修复所有Repository SQL列名为snake_case,新增CncRepository.Tests(37个测试全部通过)

- 修复20个Repository文件中SQL列名从PascalCase改为snake_case匹配数据库
- 新增TestDb.cs测试辅助类(DELETE+重置自增+种子数据)
- 新增5个测试类(Alert/Brand/Machine/SysConfig/Workshop)共37个测试
- 添加[Collection(Database)]串行执行避免并行竞争
- 解决TRUNCATE外键约束问题改用DELETE FROM
main
haoliang 1 week ago
parent 03aaeb11c2
commit 3a1912f4a1

@ -14,11 +14,14 @@ namespace CncRepository.Impl
{ {
public AlertRepository(string connectionString) : base(connectionString) { } public AlertRepository(string connectionString) : base(connectionString) { }
/// <summary>Alert SELECT列映射模板snake_case列名 → PascalCase属性名</summary>
private const string SelectColumns = @"id as Id, alert_type as AlertType, machine_id as MachineId, collect_address_id as CollectAddressId, title as Title, detail as Detail, is_resolved as IsResolved, resolved_at as ResolvedAt, created_at as CreatedAt";
public Alert GetById(long id) public Alert GetById(long id)
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "SELECT * FROM cnc_alert WHERE Id = @Id"; string sql = $"SELECT {SelectColumns} FROM cnc_alert WHERE id = @Id";
return conn.QuerySingleOrDefault<Alert>(sql, new { Id = id }); return conn.QuerySingleOrDefault<Alert>(sql, new { Id = id });
} }
} }
@ -27,19 +30,19 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"SELECT a.Id, a.CreatedAt, a.AlertType, a.Title, m.Name AS MachineName, a.Detail, a.IsResolved, a.ResolvedAt string sql = @"SELECT a.id, a.created_at, a.alert_type, a.title, m.name AS MachineName, a.detail, a.is_resolved, a.resolved_at
FROM cnc_alert a LEFT JOIN cnc_machine m ON a.MachineId = m.Id FROM cnc_alert a LEFT JOIN cnc_machine m ON a.machine_id = m.id
WHERE 1=1"; WHERE 1=1";
string countSql = @"SELECT COUNT(*) FROM cnc_alert a LEFT JOIN cnc_machine m ON a.MachineId = m.Id WHERE 1=1"; string countSql = @"SELECT COUNT(*) FROM cnc_alert a LEFT JOIN cnc_machine m ON a.machine_id = m.id WHERE 1=1";
var p = new DynamicParameters(); var p = new DynamicParameters();
if (!string.IsNullOrEmpty(query.AlertType)) { sql += " AND a.AlertType = @AlertType"; countSql += " AND a.AlertType = @AlertType"; p.Add("AlertType", query.AlertType); } if (!string.IsNullOrEmpty(query.AlertType)) { sql += " AND a.alert_type = @AlertType"; countSql += " AND a.alert_type = @AlertType"; p.Add("AlertType", query.AlertType); }
if (query.IsResolved.HasValue) { sql += " AND a.IsResolved = @IsResolved"; countSql += " AND a.IsResolved = @IsResolved"; p.Add("IsResolved", query.IsResolved.Value); } if (query.IsResolved.HasValue) { sql += " AND a.is_resolved = @IsResolved"; countSql += " AND a.is_resolved = @IsResolved"; p.Add("IsResolved", query.IsResolved.Value); }
if (query.MachineId.HasValue) { sql += " AND a.MachineId = @MachineId"; countSql += " AND a.MachineId = @MachineId"; p.Add("MachineId", query.MachineId.Value); } if (query.MachineId.HasValue) { sql += " AND a.machine_id = @MachineId"; countSql += " AND a.machine_id = @MachineId"; p.Add("MachineId", query.MachineId.Value); }
if (query.StartDate.HasValue) { sql += " AND a.CreatedAt >= @Start"; countSql += " AND a.CreatedAt >= @Start"; p.Add("Start", query.StartDate.Value); } if (query.StartDate.HasValue) { sql += " AND a.created_at >= @Start"; countSql += " AND a.created_at >= @Start"; p.Add("Start", query.StartDate.Value); }
if (query.EndDate.HasValue) { sql += " AND a.CreatedAt <= @End"; countSql += " AND a.CreatedAt <= @End"; p.Add("End", query.EndDate.Value); } if (query.EndDate.HasValue) { sql += " AND a.created_at <= @End"; countSql += " AND a.created_at <= @End"; p.Add("End", query.EndDate.Value); }
int offset = (query.Page - 1) * query.PageSize; int offset = (query.Page - 1) * query.PageSize;
sql += " ORDER BY a.CreatedAt DESC LIMIT @Limit OFFSET @Offset"; sql += " ORDER BY a.created_at DESC LIMIT @Limit OFFSET @Offset";
p.Add("Limit", query.PageSize); p.Add("Limit", query.PageSize);
p.Add("Offset", offset); p.Add("Offset", offset);
@ -53,7 +56,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"INSERT INTO cnc_alert (AlertType, MachineId, CollectAddressId, Title, Detail, IsResolved, ResolvedAt, CreatedAt) string sql = @"INSERT INTO cnc_alert (alert_type, machine_id, collect_address_id, title, detail, is_resolved, resolved_at, created_at)
VALUES (@AlertType, @MachineId, @CollectAddressId, @Title, @Detail, @IsResolved, @ResolvedAt, @CreatedAt); SELECT LAST_INSERT_ID();"; VALUES (@AlertType, @MachineId, @CollectAddressId, @Title, @Detail, @IsResolved, @ResolvedAt, @CreatedAt); SELECT LAST_INSERT_ID();";
return conn.ExecuteScalar<long>(sql, entity); return conn.ExecuteScalar<long>(sql, entity);
} }
@ -63,7 +66,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "UPDATE cnc_alert SET IsResolved = 1, ResolvedAt = NOW() WHERE Id = @Id"; string sql = "UPDATE cnc_alert SET is_resolved = 1, resolved_at = NOW() WHERE id = @Id";
int affected = conn.Execute(sql, new { Id = id }); int affected = conn.Execute(sql, new { Id = id });
return affected > 0; return affected > 0;
} }
@ -73,7 +76,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "UPDATE cnc_alert SET IsResolved = 1, ResolvedAt = NOW() WHERE Id IN @Ids"; string sql = "UPDATE cnc_alert SET is_resolved = 1, resolved_at = NOW() WHERE id IN @Ids";
return conn.Execute(sql, new { Ids = ids }); return conn.Execute(sql, new { Ids = ids });
} }
} }

@ -19,8 +19,8 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, BrandId as BrandId, StandardField as StandardField, FieldName as FieldName, MatchBy as MatchBy, DataType as DataType, IsRequired as IsRequired, CreatedAt as CreatedAt var sql = @"SELECT id as Id, brand_id as BrandId, standard_field as StandardField, field_name as FieldName, match_by as MatchBy, data_type as DataType, is_required as IsRequired, created_at as CreatedAt
FROM cnc_brand_field_mapping WHERE BrandId = @BrandId ORDER BY Id"; FROM cnc_brand_field_mapping WHERE brand_id = @BrandId ORDER BY id";
return conn.Query<BrandFieldMapping>(sql, new { BrandId = brandId }).ToList(); return conn.Query<BrandFieldMapping>(sql, new { BrandId = brandId }).ToList();
} }
} }
@ -29,8 +29,8 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, BrandId as BrandId, StandardField as StandardField, FieldName as FieldName, MatchBy as MatchBy, DataType as DataType, IsRequired as IsRequired, CreatedAt as CreatedAt var sql = @"SELECT id as Id, brand_id as BrandId, standard_field as StandardField, field_name as FieldName, match_by as MatchBy, data_type as DataType, is_required as IsRequired, created_at as CreatedAt
FROM cnc_brand_field_mapping WHERE Id = @Id"; FROM cnc_brand_field_mapping WHERE id = @Id";
return conn.QuerySingleOrDefault<BrandFieldMapping>(sql, new { Id = id }); return conn.QuerySingleOrDefault<BrandFieldMapping>(sql, new { Id = id });
} }
} }
@ -39,7 +39,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"INSERT INTO cnc_brand_field_mapping (BrandId, StandardField, FieldName, MatchBy, DataType, IsRequired, CreatedAt) var sql = @"INSERT INTO cnc_brand_field_mapping (brand_id, standard_field, field_name, match_by, data_type, is_required, created_at)
VALUES (@BrandId, @StandardField, @FieldName, @MatchBy, @DataType, @IsRequired, @CreatedAt); VALUES (@BrandId, @StandardField, @FieldName, @MatchBy, @DataType, @IsRequired, @CreatedAt);
SELECT LAST_INSERT_ID();"; SELECT LAST_INSERT_ID();";
return conn.QuerySingle<int>(sql, entity); return conn.QuerySingle<int>(sql, entity);
@ -50,7 +50,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"UPDATE cnc_brand_field_mapping SET BrandId = @BrandId, StandardField = @StandardField, FieldName = @FieldName, MatchBy = @MatchBy, DataType = @DataType, IsRequired = @IsRequired, CreatedAt = @CreatedAt WHERE Id = @Id"; var sql = @"UPDATE cnc_brand_field_mapping SET brand_id = @BrandId, standard_field = @StandardField, field_name = @FieldName, match_by = @MatchBy, data_type = @DataType, is_required = @IsRequired, created_at = @CreatedAt WHERE id = @Id";
return conn.Execute(sql, entity) > 0; return conn.Execute(sql, entity) > 0;
} }
} }
@ -59,7 +59,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"DELETE FROM cnc_brand_field_mapping WHERE BrandId = @BrandId"; var sql = @"DELETE FROM cnc_brand_field_mapping WHERE brand_id = @BrandId";
return conn.Execute(sql, new { BrandId = brandId }) > 0; return conn.Execute(sql, new { BrandId = brandId }) > 0;
} }
} }
@ -73,7 +73,7 @@ namespace CncRepository.Impl
try try
{ {
int count = 0; int count = 0;
var sql = @"INSERT INTO cnc_brand_field_mapping (BrandId, StandardField, FieldName, MatchBy, DataType, IsRequired, CreatedAt) var sql = @"INSERT INTO cnc_brand_field_mapping (brand_id, standard_field, field_name, match_by, data_type, is_required, created_at)
VALUES (@BrandId, @StandardField, @FieldName, @MatchBy, @DataType, @IsRequired, @CreatedAt); VALUES (@BrandId, @StandardField, @FieldName, @MatchBy, @DataType, @IsRequired, @CreatedAt);
SELECT LAST_INSERT_ID();"; SELECT LAST_INSERT_ID();";
foreach (var m in mappings) foreach (var m in mappings)

@ -18,8 +18,8 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, BrandName as BrandName, DeviceField as DeviceField, TagsPath as TagsPath, IsEnabled as IsEnabled, CreatedAt as CreatedAt, UpdatedAt as UpdatedAt var sql = @"SELECT id as Id, brand_name as BrandName, device_field as DeviceField, tags_path as TagsPath, is_enabled as IsEnabled, created_at as CreatedAt, updated_at as UpdatedAt
FROM cnc_brand WHERE Id = @Id"; FROM cnc_brand WHERE id = @Id";
return conn.QuerySingleOrDefault<Brand>(sql, new { Id = id }); return conn.QuerySingleOrDefault<Brand>(sql, new { Id = id });
} }
} }
@ -28,7 +28,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, BrandName as BrandName, DeviceField as DeviceField, TagsPath as TagsPath, IsEnabled as IsEnabled, CreatedAt as CreatedAt, UpdatedAt as UpdatedAt FROM cnc_brand ORDER BY Id"; var sql = @"SELECT id as Id, brand_name as BrandName, device_field as DeviceField, tags_path as TagsPath, is_enabled as IsEnabled, created_at as CreatedAt, updated_at as UpdatedAt FROM cnc_brand ORDER BY id";
return conn.Query<Brand>(sql).ToList(); return conn.Query<Brand>(sql).ToList();
} }
} }
@ -37,7 +37,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"INSERT INTO cnc_brand (BrandName, DeviceField, TagsPath, IsEnabled, CreatedAt, UpdatedAt) var sql = @"INSERT INTO cnc_brand (brand_name, device_field, tags_path, is_enabled, created_at, updated_at)
VALUES (@BrandName, @DeviceField, @TagsPath, @IsEnabled, @CreatedAt, @UpdatedAt); VALUES (@BrandName, @DeviceField, @TagsPath, @IsEnabled, @CreatedAt, @UpdatedAt);
SELECT LAST_INSERT_ID();"; SELECT LAST_INSERT_ID();";
return conn.QuerySingle<int>(sql, entity); return conn.QuerySingle<int>(sql, entity);
@ -48,7 +48,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"UPDATE cnc_brand SET BrandName = @BrandName, DeviceField = @DeviceField, TagsPath = @TagsPath, IsEnabled = @IsEnabled, UpdatedAt = @UpdatedAt WHERE Id = @Id"; var sql = @"UPDATE cnc_brand SET brand_name = @BrandName, device_field = @DeviceField, tags_path = @TagsPath, is_enabled = @IsEnabled, updated_at = @UpdatedAt WHERE id = @Id";
return conn.Execute(sql, entity) > 0; return conn.Execute(sql, entity) > 0;
} }
} }
@ -57,7 +57,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"DELETE FROM cnc_brand WHERE Id = @Id"; var sql = @"DELETE FROM cnc_brand WHERE id = @Id";
return conn.Execute(sql, new { Id = id }) > 0; return conn.Execute(sql, new { Id = id }) > 0;
} }
} }
@ -66,7 +66,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"UPDATE cnc_brand SET IsEnabled = CASE WHEN IsEnabled = 1 THEN 0 ELSE 1 END, UpdatedAt = NOW() WHERE Id = @Id"; var sql = @"UPDATE cnc_brand SET is_enabled = CASE WHEN is_enabled = 1 THEN 0 ELSE 1 END, updated_at = NOW() WHERE id = @Id";
return conn.Execute(sql, new { Id = id }) > 0; return conn.Execute(sql, new { Id = id }) > 0;
} }
} }
@ -75,7 +75,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT COUNT(*) FROM cnc_brand_field_mapping WHERE BrandId = @BrandId"; var sql = @"SELECT COUNT(*) FROM cnc_brand_field_mapping WHERE brand_id = @BrandId";
return conn.ExecuteScalar<int>(sql, new { BrandId = brandId }); return conn.ExecuteScalar<int>(sql, new { BrandId = brandId });
} }
} }
@ -84,7 +84,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT COUNT(*) FROM cnc_collect_address WHERE BrandId = @BrandId"; var sql = @"SELECT COUNT(*) FROM cnc_collect_address WHERE brand_id = @BrandId";
return conn.ExecuteScalar<int>(sql, new { BrandId = brandId }); return conn.ExecuteScalar<int>(sql, new { BrandId = brandId });
} }
} }

@ -16,11 +16,14 @@ namespace CncRepository.Impl
{ {
public CollectAddressRepository(string connectionString) : base(connectionString) { } public CollectAddressRepository(string connectionString) : base(connectionString) { }
/// <summary>采集地址SELECT列映射模板</summary>
private const string SelectColumns = @"id as Id, name as Name, url as Url, brand_id as BrandId, collect_interval as CollectInterval, is_enabled as IsEnabled, last_collect_time as LastCollectTime, last_collect_status as LastCollectStatus, fail_count as FailCount, created_at as CreatedAt, updated_at as UpdatedAt";
public CollectAddress GetById(int id) public CollectAddress GetById(int id)
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, Name as Name, Url as Url, BrandId as BrandId, CollectInterval as CollectInterval, IsEnabled as IsEnabled, LastCollectTime as LastCollectTime, LastCollectStatus as LastCollectStatus, FailCount as FailCount, CreatedAt as CreatedAt, UpdatedAt as UpdatedAt FROM cnc_collect_address WHERE Id = @Id"; var sql = $"SELECT {SelectColumns} FROM cnc_collect_address WHERE id = @Id";
return conn.QuerySingleOrDefault<CollectAddress>(sql, new { Id = id }); return conn.QuerySingleOrDefault<CollectAddress>(sql, new { Id = id });
} }
} }
@ -33,29 +36,29 @@ namespace CncRepository.Impl
var parameters = new DynamicParameters(); var parameters = new DynamicParameters();
if (!string.IsNullOrWhiteSpace(query.Keyword)) if (!string.IsNullOrWhiteSpace(query.Keyword))
{ {
where += " AND (ca.Name LIKE @Keyword OR ca.Url LIKE @Keyword)"; where += " AND (ca.name LIKE @Keyword OR ca.url LIKE @Keyword)";
parameters.Add("Keyword", $"%{query.Keyword}%"); parameters.Add("Keyword", $"%{query.Keyword}%");
} }
if (query.BrandId.HasValue) if (query.BrandId.HasValue)
{ {
where += " AND ca.BrandId = @BrandId"; where += " AND ca.brand_id = @BrandId";
parameters.Add("BrandId", query.BrandId.Value); parameters.Add("BrandId", query.BrandId.Value);
} }
if (query.IsEnabled.HasValue) if (query.IsEnabled.HasValue)
{ {
where += " AND ca.IsEnabled = @IsEnabled"; where += " AND ca.is_enabled = @IsEnabled";
parameters.Add("IsEnabled", query.IsEnabled.Value); parameters.Add("IsEnabled", query.IsEnabled.Value);
} }
var limit = query.PageSize; var limit = query.PageSize;
var offset = query.Offset; var offset = query.Offset;
var sql = @"SELECT ca.Id as Id, ca.Name as Name, ca.Url as Url, ca.BrandId as BrandId, b.BrandName as BrandName, ca.CollectInterval as CollectInterval, ca.IsEnabled as IsEnabled, ca.LastCollectTime as LastCollectTime, var sql = @"SELECT ca.id as Id, ca.name as Name, ca.url as Url, ca.brand_id as BrandId, b.brand_name as BrandName, ca.collect_interval as CollectInterval, ca.is_enabled as IsEnabled, ca.last_collect_time as LastCollectTime,
(SELECT COUNT(*) FROM cnc_machine m WHERE m.CollectAddressId = ca.Id) as MachineCount (SELECT COUNT(*) FROM cnc_machine m WHERE m.collect_address_id = ca.id) as MachineCount
FROM cnc_collect_address ca LEFT JOIN cnc_brand b ON ca.BrandId = b.Id" + where + @" ORDER BY ca.Id DESC LIMIT @Limit OFFSET @Offset"; FROM cnc_collect_address ca LEFT JOIN cnc_brand b ON ca.brand_id = b.id" + where + @" ORDER BY ca.id DESC LIMIT @Limit OFFSET @Offset";
parameters.Add("Limit", limit); parameters.Add("Limit", limit);
parameters.Add("Offset", offset); parameters.Add("Offset", offset);
var totalSql = @"SELECT COUNT(*) FROM cnc_collect_address ca LEFT JOIN cnc_brand b ON ca.BrandId = b.Id" + where; var totalSql = @"SELECT COUNT(*) FROM cnc_collect_address ca LEFT JOIN cnc_brand b ON ca.brand_id = b.id" + where;
var total = conn.ExecuteScalar<int>(totalSql, parameters); var total = conn.ExecuteScalar<int>(totalSql, parameters);
var items = conn.Query<CollectAddressListItem>(sql, parameters).ToList(); var items = conn.Query<CollectAddressListItem>(sql, parameters).ToList();
@ -73,7 +76,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"INSERT INTO cnc_collect_address (Name, Url, BrandId, CollectInterval, IsEnabled, CreatedAt, UpdatedAt) var sql = @"INSERT INTO cnc_collect_address (name, url, brand_id, collect_interval, is_enabled, created_at, updated_at)
VALUES (@Name, @Url, @BrandId, @CollectInterval, @IsEnabled, @CreatedAt, @UpdatedAt); VALUES (@Name, @Url, @BrandId, @CollectInterval, @IsEnabled, @CreatedAt, @UpdatedAt);
SELECT LAST_INSERT_ID();"; SELECT LAST_INSERT_ID();";
return conn.QuerySingle<int>(sql, entity); return conn.QuerySingle<int>(sql, entity);
@ -84,7 +87,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"UPDATE cnc_collect_address SET Name = @Name, Url = @Url, BrandId = @BrandId, CollectInterval = @CollectInterval, IsEnabled = @IsEnabled, UpdatedAt = @UpdatedAt WHERE Id = @Id"; var sql = @"UPDATE cnc_collect_address SET name = @Name, url = @Url, brand_id = @BrandId, collect_interval = @CollectInterval, is_enabled = @IsEnabled, updated_at = @UpdatedAt WHERE id = @Id";
return conn.Execute(sql, entity) > 0; return conn.Execute(sql, entity) > 0;
} }
} }
@ -93,7 +96,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"DELETE FROM cnc_collect_address WHERE Id = @Id"; var sql = @"DELETE FROM cnc_collect_address WHERE id = @Id";
return conn.Execute(sql, new { Id = id }) > 0; return conn.Execute(sql, new { Id = id }) > 0;
} }
} }
@ -102,7 +105,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"UPDATE cnc_collect_address SET IsEnabled = CASE WHEN IsEnabled = 1 THEN 0 ELSE 1 END, UpdatedAt = NOW() WHERE Id = @Id"; var sql = @"UPDATE cnc_collect_address SET is_enabled = CASE WHEN is_enabled = 1 THEN 0 ELSE 1 END, updated_at = NOW() WHERE id = @Id";
return conn.Execute(sql, new { Id = id }) > 0; return conn.Execute(sql, new { Id = id }) > 0;
} }
} }
@ -111,7 +114,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, Name as Name, Url as Url, BrandId as BrandId, CollectInterval as CollectInterval, IsEnabled as IsEnabled, LastCollectTime as LastCollectTime, LastCollectStatus as LastCollectStatus, FailCount as FailCount, CreatedAt as CreatedAt, UpdatedAt as UpdatedAt FROM cnc_collect_address WHERE IsEnabled = 1"; var sql = $"SELECT {SelectColumns} FROM cnc_collect_address WHERE is_enabled = 1";
return conn.Query<CollectAddress>(sql).ToList(); return conn.Query<CollectAddress>(sql).ToList();
} }
} }
@ -120,7 +123,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT COUNT(*) FROM cnc_machine WHERE CollectAddressId = @CollectAddressId"; var sql = @"SELECT COUNT(*) FROM cnc_machine WHERE collect_address_id = @CollectAddressId";
return conn.ExecuteScalar<int>(sql, new { CollectAddressId = collectAddressId }); return conn.ExecuteScalar<int>(sql, new { CollectAddressId = collectAddressId });
} }
} }

@ -5,8 +5,6 @@ using Dapper;
using CncModels.Entity; using CncModels.Entity;
using CncModels.Dto.Production; using CncModels.Dto.Production;
using CncModels.Dto; using CncModels.Dto;
using CncModels.Dto.Production;
using CncRepository.Base;
using CncRepository.Base; using CncRepository.Base;
using CncRepository.Interface; using CncRepository.Interface;
@ -23,7 +21,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "SELECT * FROM cnc_daily_production WHERE Id = @Id"; string sql = "SELECT * FROM cnc_daily_production WHERE id = @Id";
return conn.QuerySingleOrDefault<DailyProduction>(sql, new { Id = id }); return conn.QuerySingleOrDefault<DailyProduction>(sql, new { Id = id });
} }
} }
@ -32,21 +30,21 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string baseSql = @"SELECT dp.Id, dp.MachineId, m.Name AS MachineName, dp.ProductionDate, dp.ProgramName, dp.TotalQuantity, dp.SegmentCount, dp.TotalRunTime, dp.TotalCuttingTime, dp.TotalCycleTime, dp.WorkerId AS WorkerId string baseSql = @"SELECT dp.id, dp.machine_id, m.name AS MachineName, dp.production_date, dp.program_name, dp.total_quantity, dp.segment_count, dp.total_run_time, dp.total_cutting_time, dp.total_cycle_time, dp.worker_id AS WorkerId
FROM cnc_daily_production dp FROM cnc_daily_production dp
LEFT JOIN cnc_machine m ON dp.MachineId = m.Id LEFT JOIN cnc_machine m ON dp.machine_id = m.id
WHERE 1=1"; WHERE 1=1";
string countSql = @"SELECT COUNT(*) FROM cnc_daily_production dp LEFT JOIN cnc_machine m ON dp.MachineId = m.Id WHERE 1=1"; string countSql = @"SELECT COUNT(*) FROM cnc_daily_production dp LEFT JOIN cnc_machine m ON dp.machine_id = m.id WHERE 1=1";
var parameters = new DynamicParameters(); var parameters = new DynamicParameters();
if (query?.Date.HasValue == true) if (query?.Date.HasValue == true)
{ {
baseSql += " AND dp.ProductionDate = @Date"; baseSql += " AND dp.production_date = @Date";
countSql += " AND dp.ProductionDate = @Date"; countSql += " AND dp.production_date = @Date";
parameters.Add("Date", query.Date); parameters.Add("Date", query.Date);
} }
int offset = (query.Page - 1) * query.PageSize; int offset = (query.Page - 1) * query.PageSize;
string paging = " ORDER BY dp.ProductionDate DESC LIMIT @Limit OFFSET @Offset"; string paging = " ORDER BY dp.production_date DESC LIMIT @Limit OFFSET @Offset";
parameters.Add("Limit", query.PageSize); parameters.Add("Limit", query.PageSize);
parameters.Add("Offset", offset); parameters.Add("Offset", offset);
@ -66,7 +64,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "SELECT * FROM cnc_daily_production WHERE MachineId = @MachineId AND ProductionDate = @Date"; string sql = "SELECT * FROM cnc_daily_production WHERE machine_id = @MachineId AND production_date = @Date";
return conn.Query<DailyProduction>(sql, new { MachineId = machineId, Date = date }).ToList(); return conn.Query<DailyProduction>(sql, new { MachineId = machineId, Date = date }).ToList();
} }
} }
@ -75,7 +73,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"SELECT dp.* FROM cnc_daily_production dp LEFT JOIN cnc_machine m ON dp.MachineId = m.Id WHERE dp.ProductionDate BETWEEN @Start AND @End ORDER BY dp.ProductionDate DESC"; string sql = @"SELECT dp.* FROM cnc_daily_production dp LEFT JOIN cnc_machine m ON dp.machine_id = m.id WHERE dp.production_date BETWEEN @Start AND @End ORDER BY dp.production_date DESC";
return conn.Query<DailyProduction>(sql, new { Start = startDate, End = endDate }).ToList(); return conn.Query<DailyProduction>(sql, new { Start = startDate, End = endDate }).ToList();
} }
} }
@ -84,10 +82,10 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"SELECT SUM(dp.TotalQuantity) FROM cnc_daily_production dp LEFT JOIN cnc_machine m ON dp.MachineId = m.Id WHERE dp.ProductionDate BETWEEN @Start AND @End"; string sql = @"SELECT SUM(dp.total_quantity) FROM cnc_daily_production dp LEFT JOIN cnc_machine m ON dp.machine_id = m.id WHERE dp.production_date BETWEEN @Start AND @End";
if (workshopId.HasValue) if (workshopId.HasValue)
{ {
sql += " AND m.WorkshopId = @WorkshopId"; sql += " AND m.workshop_id = @WorkshopId";
return conn.ExecuteScalar<decimal>(sql, new { Start = startDate, End = endDate, WorkshopId = workshopId.Value }); return conn.ExecuteScalar<decimal>(sql, new { Start = startDate, End = endDate, WorkshopId = workshopId.Value });
} }
return conn.ExecuteScalar<decimal>(sql, new { Start = startDate, End = endDate }); return conn.ExecuteScalar<decimal>(sql, new { Start = startDate, End = endDate });
@ -98,7 +96,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"SELECT SUM(TotalQuantity) FROM cnc_daily_production WHERE WorkerId = @WorkerId AND ProductionDate BETWEEN @Start AND @End"; string sql = @"SELECT SUM(total_quantity) FROM cnc_daily_production WHERE worker_id = @WorkerId AND production_date BETWEEN @Start AND @End";
var res = conn.ExecuteScalar<decimal?>(sql, new { WorkerId = workerId, Start = startDate, End = endDate }); var res = conn.ExecuteScalar<decimal?>(sql, new { WorkerId = workerId, Start = startDate, End = endDate });
return res ?? 0m; return res ?? 0m;
} }
@ -108,12 +106,12 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"SELECT m.Id AS Id, m.Id AS MachineId, m.Name AS MachineName, SUM(dp.TotalQuantity) AS TotalQuantity, NULL AS ProgramName, NULL AS ProductionDate, NULL AS SegmentCount, NULL AS TotalRunTime, NULL AS TotalCuttingTime, NULL AS TotalCycleTime string sql = @"SELECT m.id AS Id, m.id AS MachineId, m.name AS MachineName, SUM(dp.total_quantity) AS TotalQuantity, NULL AS ProgramName, NULL AS ProductionDate, NULL AS SegmentCount, NULL AS TotalRunTime, NULL AS TotalCuttingTime, NULL AS TotalCycleTime
FROM cnc_daily_production dp FROM cnc_daily_production dp
JOIN cnc_machine m ON dp.MachineId = m.Id JOIN cnc_machine m ON dp.machine_id = m.id
WHERE dp.ProductionDate BETWEEN @Start AND @End WHERE dp.production_date BETWEEN @Start AND @End
GROUP BY m.Id, m.Name GROUP BY m.id, m.name
ORDER BY SUM(dp.TotalQuantity) DESC LIMIT @Top"; ORDER BY SUM(dp.total_quantity) DESC LIMIT @Top";
return conn.Query<DailyProduction>(sql, new { Start = startDate, End = endDate, Top = top }).ToList(); return conn.Query<DailyProduction>(sql, new { Start = startDate, End = endDate, Top = top }).ToList();
} }
} }
@ -122,11 +120,11 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"SELECT 0 AS Id, NULL AS MachineId, NULL AS MachineName, SUM(TotalQuantity) AS TotalQuantity, WorkerId AS WorkerId, NULL AS ProductionDate, NULL AS ProgramName, NULL AS SegmentCount, NULL AS TotalRunTime, NULL AS TotalCuttingTime, NULL AS TotalCycleTime string sql = @"SELECT 0 AS Id, NULL AS MachineId, NULL AS MachineName, SUM(total_quantity) AS TotalQuantity, worker_id AS WorkerId, NULL AS ProductionDate, NULL AS ProgramName, NULL AS SegmentCount, NULL AS TotalRunTime, NULL AS TotalCuttingTime, NULL AS TotalCycleTime
FROM cnc_daily_production FROM cnc_daily_production
WHERE ProductionDate BETWEEN @Start AND @End AND WorkerId IS NOT NULL WHERE production_date BETWEEN @Start AND @End AND worker_id IS NOT NULL
GROUP BY WorkerId GROUP BY worker_id
ORDER BY SUM(TotalQuantity) DESC LIMIT @Top"; ORDER BY SUM(total_quantity) DESC LIMIT @Top";
return conn.Query<DailyProduction>(sql, new { Start = startDate, End = endDate, Top = top }).ToList(); return conn.Query<DailyProduction>(sql, new { Start = startDate, End = endDate, Top = top }).ToList();
} }
} }

@ -137,7 +137,7 @@ namespace CncRepository.Impl.Dashboard
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id, Title AS Message, Severity, CreatedAt FROM cnc_alert ORDER BY CreatedAt DESC LIMIT @Count"; var sql = @"SELECT id, title AS Message, alert_type AS Severity, created_at FROM cnc_alert ORDER BY created_at DESC LIMIT @Count";
// 如果 cnc_alert 不存在 Title/Severity后续可调整为 Message/Level 等字段 // 如果 cnc_alert 不存在 Title/Severity后续可调整为 Message/Level 等字段
return conn.Query<AlertListItem>(sql, new { Count = count }).ToList(); return conn.Query<AlertListItem>(sql, new { Count = count }).ToList();
} }

@ -6,7 +6,6 @@ using Dapper;
using CncModels.Entity; using CncModels.Entity;
using CncModels.Dto; using CncModels.Dto;
using CncRepository.Base; using CncRepository.Base;
using CncRepository.Base;
using CncRepository.Interface; using CncRepository.Interface;
namespace CncRepository.Impl.Log namespace CncRepository.Impl.Log
@ -18,24 +17,14 @@ namespace CncRepository.Impl.Log
{ {
public CollectRawRepository(string connectionString) : base(connectionString) { } public CollectRawRepository(string connectionString) : base(connectionString) { }
private const string SelectColumns = @"id as Id, collect_address_id as CollectAddressId, request_time as RequestTime, response_time as ResponseTime, response_duration as ResponseDuration, is_success as IsSuccess, status_code as StatusCode, raw_json as RawJson, error_message as ErrorMessage, created_at as CreatedAt";
/// <summary>通过 Id 获取原始记录</summary> /// <summary>通过 Id 获取原始记录</summary>
public CollectRaw GetById(long id) public CollectRaw GetById(long id)
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
return conn.QueryFirstOrDefault<CollectRaw>(@" return conn.QueryFirstOrDefault<CollectRaw>($"SELECT {SelectColumns} FROM log_collect_raw WHERE id = @Id", new { Id = id });
SELECT Id,
CollectAddressId AS CollectAddressId,
RequestTime AS RequestTime,
ResponseTime AS ResponseTime,
ResponseDuration AS ResponseDuration,
IsSuccess AS IsSuccess,
StatusCode AS StatusCode,
RawJson AS RawJson,
ErrorMessage AS ErrorMessage,
CreatedAt AS CreatedAt
FROM log_collect_raw
WHERE Id = @Id", new { Id = id });
} }
} }
@ -45,23 +34,9 @@ namespace CncRepository.Impl.Log
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
int skip = Math.Max(0, (page - 1) * pageSize); int skip = Math.Max(0, (page - 1) * pageSize);
var items = conn.Query<CollectRaw>(@" var items = conn.Query<CollectRaw>($"SELECT {SelectColumns} FROM log_collect_raw WHERE collect_address_id = @CollectAddressId ORDER BY created_at DESC LIMIT @PageSize OFFSET @Skip", new { CollectAddressId = collectAddressId, PageSize = pageSize, Skip = skip }).AsList();
SELECT Id AS Id,
CollectAddressId AS CollectAddressId,
RequestTime AS RequestTime,
ResponseTime AS ResponseTime,
ResponseDuration AS ResponseDuration,
IsSuccess AS IsSuccess,
StatusCode AS StatusCode,
RawJson AS RawJson,
ErrorMessage AS ErrorMessage,
CreatedAt AS CreatedAt
FROM log_collect_raw
WHERE CollectAddressId = @CollectAddressId
ORDER BY CreatedAt DESC
LIMIT @PageSize OFFSET @Skip", new { CollectAddressId = collectAddressId, PageSize = pageSize, Skip = skip }).AsList();
int total = conn.ExecuteScalar<int>(@"SELECT COUNT(1) FROM log_collect_raw WHERE CollectAddressId = @CollectAddressId", new { CollectAddressId = collectAddressId }); int total = conn.ExecuteScalar<int>(@"SELECT COUNT(1) FROM log_collect_raw WHERE collect_address_id = @CollectAddressId", new { CollectAddressId = collectAddressId });
return new PagedResult<CollectRaw> { Items = items.ToList(), Total = total, Page = page, PageSize = pageSize }; return new PagedResult<CollectRaw> { Items = items.ToList(), Total = total, Page = page, PageSize = pageSize };
} }
} }
@ -71,21 +46,7 @@ namespace CncRepository.Impl.Log
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
return conn.QueryFirstOrDefault<CollectRaw>(@" return conn.QueryFirstOrDefault<CollectRaw>($"SELECT {SelectColumns} FROM log_collect_raw WHERE collect_address_id = @CollectAddressId ORDER BY created_at DESC LIMIT 1", new { CollectAddressId = collectAddressId });
SELECT Id AS Id,
CollectAddressId AS CollectAddressId,
RequestTime AS RequestTime,
ResponseTime AS ResponseTime,
ResponseDuration AS ResponseDuration,
IsSuccess AS IsSuccess,
StatusCode AS StatusCode,
RawJson AS RawJson,
ErrorMessage AS ErrorMessage,
CreatedAt AS CreatedAt
FROM log_collect_raw
WHERE CollectAddressId = @CollectAddressId
ORDER BY CreatedAt DESC
LIMIT 1", new { CollectAddressId = collectAddressId });
} }
} }
@ -96,39 +57,14 @@ namespace CncRepository.Impl.Log
{ {
var sql = @" var sql = @"
INSERT INTO log_collect_raw ( INSERT INTO log_collect_raw (
CollectAddressId, collect_address_id, request_time, response_time, response_duration,
RequestTime, is_success, status_code, raw_json, error_message, created_at
ResponseTime,
ResponseDuration,
IsSuccess,
StatusCode,
RawJson,
ErrorMessage,
CreatedAt
) VALUES ( ) VALUES (
@CollectAddressId, @CollectAddressId, @RequestTime, @ResponseTime, @ResponseDuration,
@RequestTime, @IsSuccess, @StatusCode, @RawJson, @ErrorMessage, @CreatedAt
@ResponseTime,
@ResponseDuration,
@IsSuccess,
@StatusCode,
@RawJson,
@ErrorMessage,
@CreatedAt
); );
SELECT LAST_INSERT_ID();"; SELECT LAST_INSERT_ID();";
return conn.ExecuteScalar<long>(sql, new return conn.ExecuteScalar<long>(sql, entity);
{
CollectAddressId = entity.CollectAddressId,
RequestTime = entity.RequestTime,
ResponseTime = entity.ResponseTime,
ResponseDuration = entity.ResponseDuration,
IsSuccess = entity.IsSuccess,
StatusCode = entity.StatusCode,
RawJson = entity.RawJson,
ErrorMessage = entity.ErrorMessage,
CreatedAt = entity.CreatedAt
});
} }
} }
@ -137,7 +73,7 @@ namespace CncRepository.Impl.Log
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
return conn.Execute(@"DELETE FROM log_collect_raw WHERE CreatedAt < @Date", new { Date = date }); return conn.Execute(@"DELETE FROM log_collect_raw WHERE created_at < @Date", new { Date = date });
} }
} }
} }

@ -14,6 +14,8 @@ namespace CncRepository.Impl.Log
{ {
public CollectorHeartbeatRepository(string connectionString) : base(connectionString) { } public CollectorHeartbeatRepository(string connectionString) : base(connectionString) { }
private const string SelectColumns = @"id as Id, service_id as ServiceId, status as Status, collect_address_id as CollectAddressId, last_collect_time as LastCollectTime, success_count as SuccessCount, fail_count as FailCount, uptime_seconds as UptimeSeconds, detail as Detail, created_at as CreatedAt";
/// <summary>写入心跳</summary> /// <summary>写入心跳</summary>
public long Create(CollectorHeartbeat entity) public long Create(CollectorHeartbeat entity)
{ {
@ -21,23 +23,12 @@ namespace CncRepository.Impl.Log
{ {
var sql = @" var sql = @"
INSERT INTO log_collector_heartbeat ( INSERT INTO log_collector_heartbeat (
ServiceId, Status, CollectAddressId, LastCollectTime, SuccessCount, FailCount, UptimeSeconds, Detail, CreatedAt service_id, status, collect_address_id, last_collect_time, success_count, fail_count, uptime_seconds, detail, created_at
) VALUES ( ) VALUES (
@ServiceId, @Status, @CollectAddressId, @LastCollectTime, @SuccessCount, @FailCount, @UptimeSeconds, @Detail, @CreatedAt @ServiceId, @Status, @CollectAddressId, @LastCollectTime, @SuccessCount, @FailCount, @UptimeSeconds, @Detail, @CreatedAt
); );
SELECT LAST_INSERT_ID();"; SELECT LAST_INSERT_ID();";
return conn.ExecuteScalar<long>(sql, new return conn.ExecuteScalar<long>(sql, entity);
{
ServiceId = entity.ServiceId,
Status = entity.Status,
CollectAddressId = entity.CollectAddressId,
LastCollectTime = entity.LastCollectTime,
SuccessCount = entity.SuccessCount,
FailCount = entity.FailCount,
UptimeSeconds = entity.UptimeSeconds,
Detail = entity.Detail,
CreatedAt = entity.CreatedAt
});
} }
} }
@ -46,13 +37,7 @@ namespace CncRepository.Impl.Log
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
return conn.QueryFirstOrDefault<CollectorHeartbeat>(@" return conn.QueryFirstOrDefault<CollectorHeartbeat>($"SELECT {SelectColumns} FROM log_collector_heartbeat WHERE service_id = @ServiceId ORDER BY created_at DESC LIMIT 1", new { ServiceId = serviceId });
SELECT Id, ServiceId AS ServiceId, Status AS Status, CollectAddressId AS CollectAddressId, LastCollectTime AS LastCollectTime,
SuccessCount AS SuccessCount, FailCount AS FailCount, UptimeSeconds AS UptimeSeconds, Detail AS Detail, CreatedAt AS CreatedAt
FROM log_collector_heartbeat
WHERE ServiceId = @ServiceId
ORDER BY CreatedAt DESC
LIMIT 1", new { ServiceId = serviceId });
} }
} }
@ -61,7 +46,7 @@ namespace CncRepository.Impl.Log
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
return conn.Execute(@"DELETE FROM log_collector_heartbeat WHERE CreatedAt < @Date", new { Date = date }); return conn.Execute(@"DELETE FROM log_collector_heartbeat WHERE created_at < @Date", new { Date = date });
} }
} }
} }

@ -16,7 +16,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "SELECT * FROM cnc_machine_daily_status WHERE MachineId = @MachineId AND ProductionDate = @Date"; string sql = "SELECT * FROM cnc_machine_daily_status WHERE machine_id = @MachineId AND production_date = @Date";
return conn.QuerySingleOrDefault<MachineDailyStatus>(sql, new { MachineId = machineId, Date = date }); return conn.QuerySingleOrDefault<MachineDailyStatus>(sql, new { MachineId = machineId, Date = date });
} }
} }
@ -25,9 +25,9 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"INSERT INTO cnc_machine_daily_status (MachineId, ProductionDate, DataStatus, CreatedAt, UpdatedAt) string sql = @"INSERT INTO cnc_machine_daily_status (machine_id, production_date, data_status, created_at, updated_at)
VALUES (@MachineId, @ProductionDate, @DataStatus, @CreatedAt, @UpdatedAt) VALUES (@MachineId, @ProductionDate, @DataStatus, @CreatedAt, @UpdatedAt)
ON DUPLICATE KEY UPDATE DataStatus = @DataStatus, UpdatedAt = @UpdatedAt"; ON DUPLICATE KEY UPDATE data_status = @DataStatus, updated_at = @UpdatedAt";
return conn.Execute(sql, entity); return conn.Execute(sql, entity);
} }
} }
@ -36,7 +36,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "SELECT * FROM cnc_machine_daily_status WHERE ProductionDate = @Date"; string sql = "SELECT * FROM cnc_machine_daily_status WHERE production_date = @Date";
return conn.Query<MachineDailyStatus>(sql, new { Date = date }).AsList(); return conn.Query<MachineDailyStatus>(sql, new { Date = date }).AsList();
} }
} }
@ -45,7 +45,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "SELECT COUNT(*) FROM cnc_machine_daily_status WHERE ProductionDate = @Date AND DataStatus = @Status"; string sql = "SELECT COUNT(*) FROM cnc_machine_daily_status WHERE production_date = @Date AND data_status = @Status";
return conn.ExecuteScalar<int>(sql, new { Date = date, Status = dataStatus }); return conn.ExecuteScalar<int>(sql, new { Date = date, Status = dataStatus });
} }
} }

@ -16,11 +16,14 @@ namespace CncRepository.Impl
{ {
public MachineRepository(string connectionString) : base(connectionString) { } public MachineRepository(string connectionString) : base(connectionString) { }
/// <summary>机床SELECT列映射模板snake_case列名 → PascalCase属性名</summary>
private const string SelectColumns = @"id as Id, device_code as DeviceCode, name as Name, workshop_id as WorkshopId, collect_address_id as CollectAddressId, ip_address as IpAddress, brand_id as BrandId, is_enabled as IsEnabled, is_online as IsOnline, last_ping_time as LastPingTime, last_collect_time as LastCollectTime, last_device_status as LastDeviceStatus, last_run_status as LastRunStatus, last_program_name as LastProgramName, last_part_count as LastPartCount, last_operate_mode as LastOperateMode, last_machining_status as LastMachiningStatus, created_at as CreatedAt, updated_at as UpdatedAt";
public Machine GetById(int id) public Machine GetById(int id)
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, DeviceCode as DeviceCode, Name as Name, WorkshopId as WorkshopId, CollectAddressId as CollectAddressId, IpAddress as IpAddress, BrandId as BrandId, IsEnabled as IsEnabled, IsOnline as IsOnline, LastPingTime as LastPingTime, LastCollectTime as LastCollectTime, LastDeviceStatus as LastDeviceStatus, LastRunStatus as LastRunStatus, LastProgramName as LastProgramName, LastPartCount as LastPartCount, LastOperateMode as LastOperateMode, LastMachiningStatus as LastMachiningStatus, CreatedAt as CreatedAt, UpdatedAt as UpdatedAt FROM cnc_machine WHERE Id = @Id"; var sql = $"SELECT {SelectColumns} FROM cnc_machine WHERE id = @Id";
return conn.QuerySingleOrDefault<Machine>(sql, new { Id = id }); return conn.QuerySingleOrDefault<Machine>(sql, new { Id = id });
} }
} }
@ -33,32 +36,32 @@ namespace CncRepository.Impl
var p = new DynamicParameters(); var p = new DynamicParameters();
if (!string.IsNullOrWhiteSpace(query.Keyword)) if (!string.IsNullOrWhiteSpace(query.Keyword))
{ {
where += " AND (m.Name LIKE @Keyword OR m.DeviceCode LIKE @Keyword)"; where += " AND (m.name LIKE @Keyword OR m.device_code LIKE @Keyword)";
p.Add("Keyword", $"%{query.Keyword}%"); p.Add("Keyword", $"%{query.Keyword}%");
} }
if (query.WorkshopId.HasValue) if (query.WorkshopId.HasValue)
{ {
where += " AND m.WorkshopId = @WorkshopId"; where += " AND m.workshop_id = @WorkshopId";
p.Add("WorkshopId", query.WorkshopId.Value); p.Add("WorkshopId", query.WorkshopId.Value);
} }
if (query.IsOnline.HasValue) if (query.IsOnline.HasValue)
{ {
where += " AND m.IsOnline = @IsOnline"; where += " AND m.is_online = @IsOnline";
p.Add("IsOnline", query.IsOnline.Value); p.Add("IsOnline", query.IsOnline.Value);
} }
if (query.BrandId.HasValue) if (query.BrandId.HasValue)
{ {
where += " AND m.BrandId = @BrandId"; where += " AND m.brand_id = @BrandId";
p.Add("BrandId", query.BrandId.Value); p.Add("BrandId", query.BrandId.Value);
} }
var limit = query.PageSize; var limit = query.PageSize;
var offset = query.Offset; var offset = query.Offset;
var sql = @"SELECT m.Id as Id, m.DeviceCode as DeviceCode, m.Name as Name, m.WorkshopId as WorkshopId, ws.Name as WorkshopName, m.CollectAddressId as CollectAddressId, m.BrandId as BrandId, b.BrandName as BrandName, m.IpAddress as IpAddress, m.IsEnabled as IsEnabled, m.IsOnline as IsOnline, m.LastProgramName as LastProgramName, m.LastCollectTime as LastCollectTime, w.Id as WorkerId, w.Name as WorkerName var sql = @"SELECT m.id as Id, m.device_code as DeviceCode, m.name as Name, m.workshop_id as WorkshopId, ws.name as WorkshopName, m.collect_address_id as CollectAddressId, m.brand_id as BrandId, b.brand_name as BrandName, m.ip_address as IpAddress, m.is_enabled as IsEnabled, m.is_online as IsOnline, m.last_program_name as LastProgramName, m.last_collect_time as LastCollectTime, w.id as WorkerId, w.name as WorkerName
FROM cnc_machine m FROM cnc_machine m
LEFT JOIN cnc_workshop ws ON m.WorkshopId = ws.Id LEFT JOIN cnc_workshop ws ON m.workshop_id = ws.id
LEFT JOIN cnc_brand b ON m.BrandId = b.Id LEFT JOIN cnc_brand b ON m.brand_id = b.id
LEFT JOIN cnc_worker_machine wm ON m.Id = wm.MachineId LEFT JOIN cnc_worker_machine wm ON m.id = wm.machine_id
LEFT JOIN cnc_worker w ON wm.WorkerId = w.Id" + where + @" ORDER BY m.Id DESC LIMIT @Limit OFFSET @Offset"; LEFT JOIN cnc_worker w ON wm.worker_id = w.id" + where + @" ORDER BY m.id DESC LIMIT @Limit OFFSET @Offset";
p.Add("Limit", limit); p.Add("Limit", limit);
p.Add("Offset", offset); p.Add("Offset", offset);
var totalSql = @"SELECT COUNT(*) FROM cnc_machine m" + where + @""; var totalSql = @"SELECT COUNT(*) FROM cnc_machine m" + where + @"";
@ -78,7 +81,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"INSERT INTO cnc_machine (DeviceCode, Name, WorkshopId, CollectAddressId, IpAddress, BrandId, IsEnabled, IsOnline, CreatedAt, UpdatedAt) var sql = @"INSERT INTO cnc_machine (device_code, name, workshop_id, collect_address_id, ip_address, brand_id, is_enabled, is_online, created_at, updated_at)
VALUES (@DeviceCode, @Name, @WorkshopId, @CollectAddressId, @IpAddress, @BrandId, @IsEnabled, @IsOnline, @CreatedAt, @UpdatedAt); VALUES (@DeviceCode, @Name, @WorkshopId, @CollectAddressId, @IpAddress, @BrandId, @IsEnabled, @IsOnline, @CreatedAt, @UpdatedAt);
SELECT LAST_INSERT_ID();"; SELECT LAST_INSERT_ID();";
return conn.QuerySingle<int>(sql, entity); return conn.QuerySingle<int>(sql, entity);
@ -89,7 +92,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"UPDATE cnc_machine SET DeviceCode = @DeviceCode, Name = @Name, WorkshopId = @WorkshopId, CollectAddressId = @CollectAddressId, IpAddress = @IpAddress, BrandId = @BrandId, IsEnabled = @IsEnabled, IsOnline = @IsOnline, UpdatedAt = @UpdatedAt, LastProgramName = @LastProgramName, LastCollectTime = @LastCollectTime, LastDeviceStatus = @LastDeviceStatus, LastRunStatus = @LastRunStatus, LastMachiningStatus = @LastMachiningStatus WHERE Id = @Id"; var sql = @"UPDATE cnc_machine SET device_code = @DeviceCode, name = @Name, workshop_id = @WorkshopId, collect_address_id = @CollectAddressId, ip_address = @IpAddress, brand_id = @BrandId, is_enabled = @IsEnabled, is_online = @IsOnline, updated_at = @UpdatedAt, last_program_name = @LastProgramName, last_collect_time = @LastCollectTime, last_device_status = @LastDeviceStatus, last_run_status = @LastRunStatus, last_machining_status = @LastMachiningStatus WHERE id = @Id";
return conn.Execute(sql, entity) > 0; return conn.Execute(sql, entity) > 0;
} }
} }
@ -98,7 +101,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"DELETE FROM cnc_machine WHERE Id = @Id"; var sql = @"DELETE FROM cnc_machine WHERE id = @Id";
return conn.Execute(sql, new { Id = id }) > 0; return conn.Execute(sql, new { Id = id }) > 0;
} }
} }
@ -107,7 +110,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"UPDATE cnc_machine SET IsEnabled = CASE WHEN IsEnabled = 1 THEN 0 ELSE 1 END, UpdatedAt = NOW() WHERE Id = @Id"; var sql = @"UPDATE cnc_machine SET is_enabled = CASE WHEN is_enabled = 1 THEN 0 ELSE 1 END, updated_at = NOW() WHERE id = @Id";
return conn.Execute(sql, new { Id = id }) > 0; return conn.Execute(sql, new { Id = id }) > 0;
} }
} }
@ -116,7 +119,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, DeviceCode as DeviceCode, Name as Name, WorkshopId as WorkshopId, CollectAddressId as CollectAddressId, IpAddress as IpAddress, BrandId as BrandId, IsEnabled as IsEnabled, IsOnline as IsOnline, LastPingTime as LastPingTime, LastCollectTime as LastCollectTime, LastDeviceStatus as LastDeviceStatus, LastRunStatus as LastRunStatus, LastProgramName as LastProgramName, LastPartCount as LastPartCount, LastOperateMode as LastOperateMode, LastMachiningStatus as LastMachiningStatus, CreatedAt as CreatedAt, UpdatedAt as UpdatedAt FROM cnc_machine WHERE DeviceCode = @DeviceCode"; var sql = $"SELECT {SelectColumns} FROM cnc_machine WHERE device_code = @DeviceCode";
return conn.QuerySingleOrDefault<Machine>(sql, new { DeviceCode = deviceCode }); return conn.QuerySingleOrDefault<Machine>(sql, new { DeviceCode = deviceCode });
} }
} }
@ -125,7 +128,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, DeviceCode as DeviceCode, Name as Name, WorkshopId as WorkshopId, CollectAddressId as CollectAddressId, IpAddress as IpAddress, BrandId as BrandId, IsEnabled as IsEnabled, IsOnline as IsOnline, LastPingTime as LastPingTime, LastCollectTime as LastCollectTime, LastDeviceStatus as LastDeviceStatus, LastRunStatus as LastRunStatus, LastProgramName as LastProgramName, LastPartCount as LastPartCount, LastOperateMode as LastOperateMode, LastMachiningStatus as LastMachiningStatus, CreatedAt as CreatedAt, UpdatedAt as UpdatedAt FROM cnc_machine WHERE CollectAddressId = @CollectAddressId AND IsEnabled = 1"; var sql = $"SELECT {SelectColumns} FROM cnc_machine WHERE collect_address_id = @CollectAddressId AND is_enabled = 1";
return conn.Query<Machine>(sql, new { CollectAddressId = collectAddressId }).ToList(); return conn.Query<Machine>(sql, new { CollectAddressId = collectAddressId }).ToList();
} }
} }
@ -134,7 +137,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, DeviceCode as DeviceCode, Name as Name, WorkshopId as WorkshopId, CollectAddressId as CollectAddressId, IpAddress as IpAddress, BrandId as BrandId, IsEnabled as IsEnabled, IsOnline as IsOnline, LastPingTime as LastPingTime, LastCollectTime as LastCollectTime, LastDeviceStatus as LastDeviceStatus, LastRunStatus as LastRunStatus, LastProgramName as LastProgramName, LastPartCount as LastPartCount, LastOperateMode as LastOperateMode, LastMachiningStatus as LastMachiningStatus, CreatedAt as CreatedAt, UpdatedAt as UpdatedAt FROM cnc_machine WHERE IsEnabled = 1 AND IsOnline = 1"; var sql = $"SELECT {SelectColumns} FROM cnc_machine WHERE is_enabled = 1 AND is_online = 1";
return conn.Query<Machine>(sql).ToList(); return conn.Query<Machine>(sql).ToList();
} }
} }
@ -143,7 +146,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"UPDATE cnc_machine SET IsOnline = @IsOnline, UpdatedAt = NOW() WHERE Id = @Id"; var sql = @"UPDATE cnc_machine SET is_online = @IsOnline, updated_at = NOW() WHERE id = @Id";
conn.Execute(sql, new { Id = id, IsOnline = isOnline ? 1 : 0 }); conn.Execute(sql, new { Id = id, IsOnline = isOnline ? 1 : 0 });
} }
} }
@ -152,7 +155,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"UPDATE cnc_machine SET LastCollectTime = @LastCollectTime, LastProgramName = @LastProgramName, LastMachiningStatus = @LastMachiningStatus, UpdatedAt = NOW() WHERE Id = @Id"; var sql = @"UPDATE cnc_machine SET last_collect_time = @LastCollectTime, last_program_name = @LastProgramName, last_machining_status = @LastMachiningStatus, updated_at = NOW() WHERE id = @Id";
var param = new var param = new
{ {
Id = id, Id = id,

@ -17,7 +17,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"INSERT INTO cnc_production_adjustment (TargetTable, TargetId, FieldName, OldValue, NewValue, Reason, OperatorIp, CreatedAt) string sql = @"INSERT INTO cnc_production_adjustment (target_table, target_id, field_name, old_value, new_value, reason, operator_ip, created_at)
VALUES (@TargetTable, @TargetId, @FieldName, @OldValue, @NewValue, @Reason, @OperatorIp, @CreatedAt);"; VALUES (@TargetTable, @TargetId, @FieldName, @OldValue, @NewValue, @Reason, @OperatorIp, @CreatedAt);";
return conn.Execute(sql, entity); return conn.Execute(sql, entity);
} }
@ -28,17 +28,17 @@ namespace CncRepository.Impl
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sqlBase = "SELECT * FROM cnc_production_adjustment WHERE 1=1"; string sqlBase = "SELECT * FROM cnc_production_adjustment WHERE 1=1";
if (!string.IsNullOrEmpty(targetTable)) sqlBase += " AND TargetTable = @TargetTable"; if (!string.IsNullOrEmpty(targetTable)) sqlBase += " AND target_table = @TargetTable";
if (startDate.HasValue) sqlBase += " AND CreatedAt >= @StartDate"; if (startDate.HasValue) sqlBase += " AND created_at >= @StartDate";
if (endDate.HasValue) sqlBase += " AND CreatedAt <= @EndDate"; if (endDate.HasValue) sqlBase += " AND created_at <= @EndDate";
if (!string.IsNullOrEmpty(keyword)) sqlBase += " AND (CAST(TargetId AS CHAR) LIKE @Keyword OR FieldName LIKE @Keyword)"; if (!string.IsNullOrEmpty(keyword)) sqlBase += " AND (CAST(target_id AS CHAR) LIKE @Keyword OR field_name LIKE @Keyword)";
int offset = (page - 1) * pageSize; int offset = (page - 1) * pageSize;
string sqlCount = "SELECT COUNT(*) FROM cnc_production_adjustment WHERE 1=1" + string sqlCount = "SELECT COUNT(*) FROM cnc_production_adjustment WHERE 1=1" +
(string.IsNullOrEmpty(targetTable) ? string.Empty : " AND TargetTable = @TargetTable") + (string.IsNullOrEmpty(targetTable) ? string.Empty : " AND target_table = @TargetTable") +
(startDate.HasValue ? " AND CreatedAt >= @StartDate" : "") + (startDate.HasValue ? " AND created_at >= @StartDate" : "") +
(endDate.HasValue ? " AND CreatedAt <= @EndDate" : "") + (endDate.HasValue ? " AND created_at <= @EndDate" : "") +
(!string.IsNullOrEmpty(keyword) ? " AND (CAST(TargetId AS CHAR) LIKE @Keyword OR FieldName LIKE @Keyword)" : ""); (!string.IsNullOrEmpty(keyword) ? " AND (CAST(target_id AS CHAR) LIKE @Keyword OR field_name LIKE @Keyword)" : "");
string sqlPage = sqlBase + " ORDER BY CreatedAt DESC LIMIT @Limit OFFSET @Offset"; string sqlPage = sqlBase + " ORDER BY created_at DESC LIMIT @Limit OFFSET @Offset";
var param = new { TargetTable = targetTable, StartDate = startDate, EndDate = endDate, Keyword = ("%" + keyword + "%"), Limit = pageSize, Offset = offset }; var param = new { TargetTable = targetTable, StartDate = startDate, EndDate = endDate, Keyword = ("%" + keyword + "%"), Limit = pageSize, Offset = offset };
var items = conn.Query<ProductionAdjustment>(sqlPage, param).AsList(); var items = conn.Query<ProductionAdjustment>(sqlPage, param).AsList();
int total = conn.ExecuteScalar<int>(sqlCount, param); int total = conn.ExecuteScalar<int>(sqlCount, param);

@ -11,55 +11,61 @@ namespace CncRepository.Impl
public class ProductionSegmentRepository : BusinessRepository, IProductionSegmentRepository public class ProductionSegmentRepository : BusinessRepository, IProductionSegmentRepository
{ {
public ProductionSegmentRepository(string connectionString) : base(connectionString) { } public ProductionSegmentRepository(string connectionString) : base(connectionString) { }
public ProductionSegment GetById(long id) public ProductionSegment GetById(long id)
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "SELECT * FROM cnc_production_segment WHERE Id = @Id"; string sql = "SELECT * FROM cnc_production_segment WHERE id = @Id";
return conn.QuerySingleOrDefault<ProductionSegment>(sql, new { Id = id }); return conn.QuerySingleOrDefault<ProductionSegment>(sql, new { Id = id });
} }
} }
public ProductionSegment GetActiveSegment(int machineId) public ProductionSegment GetActiveSegment(int machineId)
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "SELECT * FROM cnc_production_segment WHERE MachineId = @MachineId AND IsSettled = 0 AND EndTime IS NULL ORDER BY StartTime DESC LIMIT 1"; string sql = "SELECT * FROM cnc_production_segment WHERE machine_id = @MachineId AND is_settled = 0 AND end_time IS NULL ORDER BY start_time DESC LIMIT 1";
return conn.QuerySingleOrDefault<ProductionSegment>(sql, new { MachineId = machineId }); return conn.QuerySingleOrDefault<ProductionSegment>(sql, new { MachineId = machineId });
} }
} }
public List<ProductionSegment> GetByMachineAndDate(int machineId, DateTime date) public List<ProductionSegment> GetByMachineAndDate(int machineId, DateTime date)
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "SELECT * FROM cnc_production_segment WHERE MachineId = @MachineId AND DATE(StartTime) = DATE(@Date)"; string sql = "SELECT * FROM cnc_production_segment WHERE machine_id = @MachineId AND DATE(start_time) = DATE(@Date)";
return conn.Query<ProductionSegment>(sql, new { MachineId = machineId, Date = date }).AsList(); return conn.Query<ProductionSegment>(sql, new { MachineId = machineId, Date = date }).AsList();
} }
} }
public int Create(ProductionSegment entity) public int Create(ProductionSegment entity)
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"INSERT INTO cnc_production_segment (MachineId, ProgramName, ProductionDate, StartTime, StartPartCount, EndPartCount, Quantity, IsSettled, CloseReason, EndTime, CreatedAt, UpdatedAt) string sql = @"INSERT INTO cnc_production_segment (machine_id, program_name, production_date, start_time, start_part_count, end_part_count, quantity, is_settled, close_reason, end_time, created_at, updated_at)
VALUES (@MachineId, @ProgramName, @ProductionDate, @StartTime, @StartPartCount, @EndPartCount, @Quantity, @IsSettled, @CloseReason, @EndTime, @CreatedAt, @UpdatedAt); SELECT LAST_INSERT_ID();"; VALUES (@MachineId, @ProgramName, @ProductionDate, @StartTime, @StartPartCount, @EndPartCount, @Quantity, @IsSettled, @CloseReason, @EndTime, @CreatedAt, @UpdatedAt); SELECT LAST_INSERT_ID();";
return conn.ExecuteScalar<int>(sql, entity); return conn.ExecuteScalar<int>(sql, entity);
} }
} }
public bool CloseSegment(long id, decimal? endPartCount, decimal? quantity, string closeReason, DateTime endTime) public bool CloseSegment(long id, decimal? endPartCount, decimal? quantity, string closeReason, DateTime endTime)
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"UPDATE cnc_production_segment string sql = @"UPDATE cnc_production_segment
SET EndPartCount = @EndPartCount, Quantity = @Quantity, CloseReason = @CloseReason, EndTime = @EndTime SET end_part_count = @EndPartCount, quantity = @Quantity, close_reason = @CloseReason, end_time = @EndTime
WHERE Id = @Id"; WHERE id = @Id";
int affected = conn.Execute(sql, new { Id = id, EndPartCount = endPartCount, Quantity = quantity, CloseReason = closeReason, EndTime = endTime }); int affected = conn.Execute(sql, new { Id = id, EndPartCount = endPartCount, Quantity = quantity, CloseReason = closeReason, EndTime = endTime });
return affected > 0; return affected > 0;
} }
} }
public bool SettleByDate(DateTime date) public bool SettleByDate(DateTime date)
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"UPDATE cnc_production_segment SET IsSettled = 1, CloseReason = 'end_of_day' WHERE DATE(StartTime) = DATE(@Date) AND IsSettled = 0"; string sql = @"UPDATE cnc_production_segment SET is_settled = 1, close_reason = 'end_of_day' WHERE DATE(start_time) = DATE(@Date) AND is_settled = 0";
int affected = conn.Execute(sql, new { Date = date }); int affected = conn.Execute(sql, new { Date = date });
return affected > 0; return affected > 0;
} }

@ -24,7 +24,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "SELECT * FROM cnc_screen_config WHERE IsEnabled = 1 ORDER BY SortOrder ASC"; string sql = "SELECT * FROM cnc_screen_config WHERE is_enabled = 1 ORDER BY sort_order ASC";
return conn.Query<ScreenConfig>(sql).AsList(); return conn.Query<ScreenConfig>(sql).AsList();
} }
} }
@ -33,7 +33,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "SELECT * FROM cnc_screen_config WHERE Id = @Id"; string sql = "SELECT * FROM cnc_screen_config WHERE id = @Id";
return conn.QuerySingleOrDefault<ScreenConfig>(sql, new { Id = id }); return conn.QuerySingleOrDefault<ScreenConfig>(sql, new { Id = id });
} }
} }
@ -42,7 +42,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"INSERT INTO cnc_screen_config (CardKey, CardType, Title, Metric, Dimension, SortOrder, IsEnabled, ChartConfig, CreatedAt, UpdatedAt) string sql = @"INSERT INTO cnc_screen_config (card_key, card_type, title, metric, dimension, sort_order, is_enabled, chart_config, created_at, updated_at)
VALUES (@CardKey, @CardType, @Title, @Metric, @Dimension, @SortOrder, @IsEnabled, @ChartConfig, @CreatedAt, @UpdatedAt); SELECT LAST_INSERT_ID();"; VALUES (@CardKey, @CardType, @Title, @Metric, @Dimension, @SortOrder, @IsEnabled, @ChartConfig, @CreatedAt, @UpdatedAt); SELECT LAST_INSERT_ID();";
return conn.ExecuteScalar<int>(sql, entity); return conn.ExecuteScalar<int>(sql, entity);
} }
@ -52,7 +52,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"UPDATE cnc_screen_config SET CardKey = @CardKey, CardType = @CardType, Title = @Title, Metric = @Metric, Dimension = @Dimension, SortOrder = @SortOrder, IsEnabled = @IsEnabled, ChartConfig = @ChartConfig, UpdatedAt = @UpdatedAt WHERE Id = @Id"; string sql = @"UPDATE cnc_screen_config SET card_key = @CardKey, card_type = @CardType, title = @Title, metric = @Metric, dimension = @Dimension, sort_order = @SortOrder, is_enabled = @IsEnabled, chart_config = @ChartConfig, updated_at = @UpdatedAt WHERE id = @Id";
int affected = conn.Execute(sql, entity); int affected = conn.Execute(sql, entity);
return affected > 0; return affected > 0;
} }
@ -62,7 +62,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "DELETE FROM cnc_screen_config WHERE Id = @Id"; string sql = "DELETE FROM cnc_screen_config WHERE id = @Id";
return conn.Execute(sql, new { Id = id }) > 0; return conn.Execute(sql, new { Id = id }) > 0;
} }
} }
@ -71,7 +71,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "UPDATE cnc_screen_config SET IsEnabled = CASE WHEN IsEnabled = 1 THEN 0 ELSE 1 END, UpdatedAt = NOW() WHERE Id = @Id"; string sql = "UPDATE cnc_screen_config SET is_enabled = CASE WHEN is_enabled = 1 THEN 0 ELSE 1 END, updated_at = NOW() WHERE id = @Id";
int affected = conn.Execute(sql, new { Id = id }); int affected = conn.Execute(sql, new { Id = id });
return affected > 0; return affected > 0;
} }

@ -15,7 +15,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "SELECT * FROM cnc_screen_filter WHERE ScreenKey = @ScreenKey ORDER BY SortOrder ASC"; string sql = "SELECT * FROM cnc_screen_filter WHERE screen_key = @ScreenKey ORDER BY sort_order ASC";
return conn.Query<ScreenFilter>(sql, new { ScreenKey = screenKey }).AsList(); return conn.Query<ScreenFilter>(sql, new { ScreenKey = screenKey }).AsList();
} }
} }
@ -24,7 +24,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"INSERT INTO cnc_screen_filter (ScreenKey, FilterType, FilterValue, IsDefault, SortOrder) VALUES (@ScreenKey, @FilterType, @FilterValue, @IsDefault, @SortOrder); SELECT LAST_INSERT_ID();"; string sql = @"INSERT INTO cnc_screen_filter (screen_key, filter_type, filter_value, is_default, sort_order) VALUES (@ScreenKey, @FilterType, @FilterValue, @IsDefault, @SortOrder); SELECT LAST_INSERT_ID();";
return conn.ExecuteScalar<int>(sql, entity); return conn.ExecuteScalar<int>(sql, entity);
} }
} }
@ -33,7 +33,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"UPDATE cnc_screen_filter SET ScreenKey = @ScreenKey, FilterType = @FilterType, FilterValue = @FilterValue, IsDefault = @IsDefault, SortOrder = @SortOrder WHERE Id = @Id"; string sql = @"UPDATE cnc_screen_filter SET screen_key = @ScreenKey, filter_type = @FilterType, filter_value = @FilterValue, is_default = @IsDefault, sort_order = @SortOrder WHERE id = @Id";
int affected = conn.Execute(sql, entity); int affected = conn.Execute(sql, entity);
return affected > 0; return affected > 0;
} }
@ -43,7 +43,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "DELETE FROM cnc_screen_filter WHERE Id = @Id"; string sql = "DELETE FROM cnc_screen_filter WHERE id = @Id";
return conn.Execute(sql, new { Id = id }) > 0; return conn.Execute(sql, new { Id = id }) > 0;
} }
} }

@ -20,8 +20,8 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, ConfigKey as ConfigKey, ConfigValue as ConfigValue, ValueType as ValueType, Description as Description, UpdatedAt as UpdatedAt var sql = @"SELECT id as Id, config_key as ConfigKey, config_value as ConfigValue, value_type as ValueType, description as Description, updated_at as UpdatedAt
FROM cnc_sys_config WHERE ConfigKey = @ConfigKey LIMIT 1"; FROM cnc_sys_config WHERE config_key = @ConfigKey LIMIT 1";
return conn.QuerySingleOrDefault<SysConfig>(sql, new { ConfigKey = configKey }); return conn.QuerySingleOrDefault<SysConfig>(sql, new { ConfigKey = configKey });
} }
} }
@ -31,7 +31,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, ConfigKey as ConfigKey, ConfigValue as ConfigValue, ValueType as ValueType, Description as Description, UpdatedAt as UpdatedAt FROM cnc_sys_config ORDER BY Id"; var sql = @"SELECT id as Id, config_key as ConfigKey, config_value as ConfigValue, value_type as ValueType, description as Description, updated_at as UpdatedAt FROM cnc_sys_config ORDER BY id";
return conn.Query<SysConfig>(sql).ToList(); return conn.Query<SysConfig>(sql).ToList();
} }
} }
@ -41,7 +41,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"UPDATE cnc_sys_config SET ConfigValue = @ConfigValue, UpdatedAt = NOW() WHERE Id = @Id"; var sql = @"UPDATE cnc_sys_config SET config_value = @ConfigValue, updated_at = NOW() WHERE id = @Id";
var affected = conn.Execute(sql, new { Id = id, ConfigValue = configValue }); var affected = conn.Execute(sql, new { Id = id, ConfigValue = configValue });
return affected > 0; return affected > 0;
} }

@ -18,18 +18,18 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"SELECT Id, CreatedAt, LogLevel, Source, Message, StackTrace, ExtraData string sql = @"SELECT id, created_at, log_level, source, message, stack_trace, extra_data
FROM log_system FROM log_system
WHERE 1=1"; WHERE 1=1";
string countSql = @"SELECT COUNT(*) FROM log_system WHERE 1=1"; string countSql = @"SELECT COUNT(*) FROM log_system WHERE 1=1";
if (!string.IsNullOrEmpty(query.LogLevel)) { sql += " AND LogLevel = @LogLevel"; countSql += " AND LogLevel = @LogLevel"; } if (!string.IsNullOrEmpty(query.LogLevel)) { sql += " AND log_level = @LogLevel"; countSql += " AND log_level = @LogLevel"; }
if (!string.IsNullOrEmpty(query.Source)) { sql += " AND Source = @Source"; countSql += " AND Source = @Source"; } if (!string.IsNullOrEmpty(query.Source)) { sql += " AND source = @Source"; countSql += " AND source = @Source"; }
if (!string.IsNullOrEmpty(query.StartDate)) { sql += " AND CreatedAt >= @Start"; countSql += " AND CreatedAt >= @Start"; } if (!string.IsNullOrEmpty(query.StartDate)) { sql += " AND created_at >= @Start"; countSql += " AND created_at >= @Start"; }
if (!string.IsNullOrEmpty(query.EndDate)) { sql += " AND CreatedAt <= @End"; countSql += " AND CreatedAt <= @End"; } if (!string.IsNullOrEmpty(query.EndDate)) { sql += " AND created_at <= @End"; countSql += " AND created_at <= @End"; }
if (!string.IsNullOrEmpty(query.Keyword)) { sql += " AND Message LIKE @Keyword"; countSql += " AND Message LIKE @Keyword"; } if (!string.IsNullOrEmpty(query.Keyword)) { sql += " AND message LIKE @Keyword"; countSql += " AND message LIKE @Keyword"; }
var p = new { LogLevel = query.LogLevel, Source = query.Source, Start = query.StartDate, End = query.EndDate, Keyword = ("%" + query.Keyword + "%") }; var p = new { LogLevel = query.LogLevel, Source = query.Source, Start = query.StartDate, End = query.EndDate, Keyword = ("%" + query.Keyword + "%") };
int offset = (query.Page - 1) * query.PageSize; int offset = (query.Page - 1) * query.PageSize;
sql += " ORDER BY CreatedAt DESC LIMIT @Limit OFFSET @Offset"; sql += " ORDER BY created_at DESC LIMIT @Limit OFFSET @Offset";
var list = conn.Query<SystemLogListItem>(sql, p).AsList(); var list = conn.Query<SystemLogListItem>(sql, p).AsList();
int total = conn.ExecuteScalar<int>(countSql, p); int total = conn.ExecuteScalar<int>(countSql, p);
return new PagedResult<SystemLogListItem> { Items = list, Total = total, Page = query.Page, PageSize = query.PageSize }; return new PagedResult<SystemLogListItem> { Items = list, Total = total, Page = query.Page, PageSize = query.PageSize };
@ -40,7 +40,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"INSERT INTO log_system (LogLevel, Source, Message, StackTrace, ExtraData, CreatedAt) string sql = @"INSERT INTO log_system (log_level, source, message, stack_trace, extra_data, created_at)
VALUES (@LogLevel, @Source, @Message, @StackTrace, @ExtraData, @CreatedAt);"; VALUES (@LogLevel, @Source, @Message, @StackTrace, @ExtraData, @CreatedAt);";
return conn.Execute(sql, entity); return conn.Execute(sql, entity);
} }

@ -16,7 +16,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "SELECT * FROM cnc_worker_daily_summary WHERE WorkerId = @WorkerId AND ProductionDate = @Date"; string sql = "SELECT * FROM cnc_worker_daily_summary WHERE worker_id = @WorkerId AND production_date = @Date";
return conn.QuerySingleOrDefault<WorkerDailySummary>(sql, new { WorkerId = workerId, Date = date }); return conn.QuerySingleOrDefault<WorkerDailySummary>(sql, new { WorkerId = workerId, Date = date });
} }
} }
@ -25,7 +25,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = "SELECT * FROM cnc_worker_daily_summary WHERE ProductionDate BETWEEN @Start AND @End"; string sql = "SELECT * FROM cnc_worker_daily_summary WHERE production_date BETWEEN @Start AND @End";
return conn.Query<WorkerDailySummary>(sql, new { Start = startDate, End = endDate }).AsList(); return conn.Query<WorkerDailySummary>(sql, new { Start = startDate, End = endDate }).AsList();
} }
} }
@ -34,9 +34,9 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"INSERT INTO cnc_worker_daily_summary (WorkerId, ProductionDate, TotalQuantity, MachineCount, ProgramCount, IsAdjusted, AdjustedQuantity, CreatedAt, UpdatedAt) string sql = @"INSERT INTO cnc_worker_daily_summary (worker_id, production_date, total_quantity, machine_count, program_count, is_adjusted, adjusted_quantity, created_at, updated_at)
VALUES (@WorkerId, @ProductionDate, @TotalQuantity, @MachineCount, @ProgramCount, @IsAdjusted, @AdjustedQuantity, @CreatedAt, @UpdatedAt) VALUES (@WorkerId, @ProductionDate, @TotalQuantity, @MachineCount, @ProgramCount, @IsAdjusted, @AdjustedQuantity, @CreatedAt, @UpdatedAt)
ON DUPLICATE KEY UPDATE TotalQuantity = @TotalQuantity, MachineCount = @MachineCount, ProgramCount = @ProgramCount, UpdatedAt = @UpdatedAt"; ON DUPLICATE KEY UPDATE total_quantity = @TotalQuantity, machine_count = @MachineCount, program_count = @ProgramCount, updated_at = @UpdatedAt";
return conn.Execute(sql, entity); return conn.Execute(sql, entity);
} }
} }

@ -14,11 +14,13 @@ namespace CncRepository.Impl
{ {
public WorkerMachineRepository(string connectionString) : base(connectionString) { } public WorkerMachineRepository(string connectionString) : base(connectionString) { }
private const string SelectColumns = @"id as Id, worker_id as WorkerId, machine_id as MachineId, created_at as CreatedAt";
public WorkerMachine GetByMachineId(int machineId) public WorkerMachine GetByMachineId(int machineId)
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, WorkerId as WorkerId, MachineId as MachineId, CreatedAt as CreatedAt FROM cnc_worker_machine WHERE MachineId = @MachineId"; var sql = $"SELECT {SelectColumns} FROM cnc_worker_machine WHERE machine_id = @MachineId";
return conn.QuerySingleOrDefault<WorkerMachine>(sql, new { MachineId = machineId }); return conn.QuerySingleOrDefault<WorkerMachine>(sql, new { MachineId = machineId });
} }
} }
@ -27,7 +29,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, WorkerId as WorkerId, MachineId as MachineId, CreatedAt as CreatedAt FROM cnc_worker_machine WHERE WorkerId = @WorkerId"; var sql = $"SELECT {SelectColumns} FROM cnc_worker_machine WHERE worker_id = @WorkerId";
return conn.Query<WorkerMachine>(sql, new { WorkerId = workerId }).ToList(); return conn.Query<WorkerMachine>(sql, new { WorkerId = workerId }).ToList();
} }
} }
@ -36,7 +38,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"INSERT INTO cnc_worker_machine (WorkerId, MachineId, CreatedAt) VALUES (@WorkerId, @MachineId, NOW()); SELECT LAST_INSERT_ID();"; var sql = @"INSERT INTO cnc_worker_machine (worker_id, machine_id, created_at) VALUES (@WorkerId, @MachineId, NOW()); SELECT LAST_INSERT_ID();";
return conn.QuerySingle<int>(sql, new { WorkerId = workerId, MachineId = machineId }); return conn.QuerySingle<int>(sql, new { WorkerId = workerId, MachineId = machineId });
} }
} }
@ -45,7 +47,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"DELETE FROM cnc_worker_machine WHERE MachineId = @MachineId"; var sql = @"DELETE FROM cnc_worker_machine WHERE machine_id = @MachineId";
return conn.Execute(sql, new { MachineId = machineId }) > 0; return conn.Execute(sql, new { MachineId = machineId }) > 0;
} }
} }
@ -54,7 +56,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"DELETE FROM cnc_worker_machine WHERE WorkerId = @WorkerId"; var sql = @"DELETE FROM cnc_worker_machine WHERE worker_id = @WorkerId";
return conn.Execute(sql, new { WorkerId = workerId }) > 0; return conn.Execute(sql, new { WorkerId = workerId }) > 0;
} }
} }

@ -16,11 +16,14 @@ namespace CncRepository.Impl
{ {
public WorkerRepository(string connectionString) : base(connectionString) { } public WorkerRepository(string connectionString) : base(connectionString) { }
/// <summary>工人SELECT列映射模板</summary>
private const string SelectColumns = @"id as Id, name as Name, code as Code, is_enabled as IsEnabled, created_at as CreatedAt, updated_at as UpdatedAt";
public Worker GetById(int id) public Worker GetById(int id)
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, Name as Name, Code as Code, IsEnabled as IsEnabled, CreatedAt as CreatedAt, UpdatedAt as UpdatedAt FROM cnc_worker WHERE Id = @Id"; var sql = $"SELECT {SelectColumns} FROM cnc_worker WHERE id = @Id";
return conn.QuerySingleOrDefault<Worker>(sql, new { Id = id }); return conn.QuerySingleOrDefault<Worker>(sql, new { Id = id });
} }
} }
@ -33,20 +36,20 @@ namespace CncRepository.Impl
var p = new DynamicParameters(); var p = new DynamicParameters();
if (!string.IsNullOrWhiteSpace(query.Keyword)) if (!string.IsNullOrWhiteSpace(query.Keyword))
{ {
where += " AND (w.Name LIKE @Keyword OR w.Code LIKE @Keyword)"; where += " AND (w.name LIKE @Keyword OR w.code LIKE @Keyword)";
p.Add("Keyword", $"%{query.Keyword}%"); p.Add("Keyword", $"%{query.Keyword}%");
} }
if (query.IsEnabled.HasValue) if (query.IsEnabled.HasValue)
{ {
where += " AND w.IsEnabled = @IsEnabled"; where += " AND w.is_enabled = @IsEnabled";
p.Add("IsEnabled", query.IsEnabled.Value); p.Add("IsEnabled", query.IsEnabled.Value);
} }
var limit = query.PageSize; var limit = query.PageSize;
var offset = query.Offset; var offset = query.Offset;
var sql = @"SELECT w.Id as Id, w.Code as Code, w.Name as Name, w.IsEnabled as IsEnabled, var sql = @"SELECT w.id as Id, w.code as Code, w.name as Name, w.is_enabled as IsEnabled,
(SELECT COUNT(*) FROM cnc_worker_machine wm WHERE wm.WorkerId = w.Id) as MachineCount, (SELECT COUNT(*) FROM cnc_worker_machine wm WHERE wm.worker_id = w.id) as MachineCount,
(SELECT GROUP_CONCAT(m.Name SEPARATOR ', ') FROM cnc_worker_machine wm JOIN cnc_machine m ON wm.MachineId = m.Id WHERE wm.WorkerId = w.Id) as MachineNames (SELECT GROUP_CONCAT(m.name SEPARATOR ', ') FROM cnc_worker_machine wm JOIN cnc_machine m ON wm.machine_id = m.id WHERE wm.worker_id = w.id) as MachineNames
FROM cnc_worker w" + where + @" ORDER BY w.Id DESC LIMIT @Limit OFFSET @Offset"; FROM cnc_worker w" + where + @" ORDER BY w.id DESC LIMIT @Limit OFFSET @Offset";
p.Add("Limit", limit); p.Add("Limit", limit);
p.Add("Offset", offset); p.Add("Offset", offset);
var totalSql = @"SELECT COUNT(*) FROM cnc_worker w" + where; var totalSql = @"SELECT COUNT(*) FROM cnc_worker w" + where;
@ -66,7 +69,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"INSERT INTO cnc_worker (Name, Code, IsEnabled, CreatedAt, UpdatedAt) VALUES (@Name, @Code, @IsEnabled, @CreatedAt, @UpdatedAt); SELECT LAST_INSERT_ID();"; var sql = @"INSERT INTO cnc_worker (name, code, is_enabled, created_at, updated_at) VALUES (@Name, @Code, @IsEnabled, @CreatedAt, @UpdatedAt); SELECT LAST_INSERT_ID();";
return conn.QuerySingle<int>(sql, entity); return conn.QuerySingle<int>(sql, entity);
} }
} }
@ -75,7 +78,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"UPDATE cnc_worker SET Name = @Name, Code = @Code, IsEnabled = @IsEnabled, UpdatedAt = @UpdatedAt WHERE Id = @Id"; var sql = @"UPDATE cnc_worker SET name = @Name, code = @Code, is_enabled = @IsEnabled, updated_at = @UpdatedAt WHERE id = @Id";
return conn.Execute(sql, entity) > 0; return conn.Execute(sql, entity) > 0;
} }
} }
@ -84,7 +87,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"DELETE FROM cnc_worker WHERE Id = @Id"; var sql = @"DELETE FROM cnc_worker WHERE id = @Id";
return conn.Execute(sql, new { Id = id }) > 0; return conn.Execute(sql, new { Id = id }) > 0;
} }
} }
@ -93,7 +96,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"UPDATE cnc_worker SET IsEnabled = CASE WHEN IsEnabled = 1 THEN 0 ELSE 1 END, UpdatedAt = NOW() WHERE Id = @Id"; var sql = @"UPDATE cnc_worker SET is_enabled = CASE WHEN is_enabled = 1 THEN 0 ELSE 1 END, updated_at = NOW() WHERE id = @Id";
return conn.Execute(sql, new { Id = id }) > 0; return conn.Execute(sql, new { Id = id }) > 0;
} }
} }
@ -102,7 +105,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, Name as Name, Code as Code, IsEnabled as IsEnabled, CreatedAt as CreatedAt, UpdatedAt as UpdatedAt FROM cnc_worker WHERE Code = @Code"; var sql = $"SELECT {SelectColumns} FROM cnc_worker WHERE code = @Code";
return conn.QuerySingleOrDefault<Worker>(sql, new { Code = code }); return conn.QuerySingleOrDefault<Worker>(sql, new { Code = code });
} }
} }
@ -111,7 +114,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, Name as Name, Code as Code, IsEnabled as IsEnabled, CreatedAt as CreatedAt, UpdatedAt as UpdatedAt FROM cnc_worker ORDER BY Id"; var sql = $"SELECT {SelectColumns} FROM cnc_worker ORDER BY id";
return conn.Query<Worker>(sql).ToList(); return conn.Query<Worker>(sql).ToList();
} }
} }

@ -20,7 +20,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, Name as Name, SortOrder as SortOrder, IsEnabled as IsEnabled, CreatedAt as CreatedAt, UpdatedAt as UpdatedAt FROM cnc_workshop WHERE Id = @Id"; var sql = @"SELECT id as Id, name as Name, sort_order as SortOrder, is_enabled as IsEnabled, created_at as CreatedAt, updated_at as UpdatedAt FROM cnc_workshop WHERE id = @Id";
return conn.QuerySingleOrDefault<Workshop>(sql, new { Id = id }); return conn.QuerySingleOrDefault<Workshop>(sql, new { Id = id });
} }
} }
@ -29,7 +29,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT Id as Id, Name as Name, SortOrder as SortOrder, IsEnabled as IsEnabled, CreatedAt as CreatedAt, UpdatedAt as UpdatedAt FROM cnc_workshop ORDER BY SortOrder ASC"; var sql = @"SELECT id as Id, name as Name, sort_order as SortOrder, is_enabled as IsEnabled, created_at as CreatedAt, updated_at as UpdatedAt FROM cnc_workshop ORDER BY sort_order ASC";
return conn.Query<Workshop>(sql).ToList(); return conn.Query<Workshop>(sql).ToList();
} }
} }
@ -42,12 +42,12 @@ namespace CncRepository.Impl
var param = new DynamicParameters(); var param = new DynamicParameters();
if (!string.IsNullOrWhiteSpace(keyword)) if (!string.IsNullOrWhiteSpace(keyword))
{ {
where = " WHERE Name LIKE @Keyword"; where = " WHERE name LIKE @Keyword";
param.Add("Keyword", $"%{keyword}%"); param.Add("Keyword", $"%{keyword}%");
} }
var limit = 20; var limit = 20;
var sql = $@"SELECT Id as Id, Name as Name, SortOrder as SortOrder, IsEnabled as IsEnabled, CreatedAt as CreatedAt, UpdatedAt as UpdatedAt var sql = $@"SELECT id as Id, name as Name, sort_order as SortOrder, is_enabled as IsEnabled, created_at as CreatedAt, updated_at as UpdatedAt
FROM cnc_workshop {where} ORDER BY SortOrder ASC LIMIT {limit} OFFSET 0"; FROM cnc_workshop {where} ORDER BY sort_order ASC LIMIT {limit} OFFSET 0";
var totalSql = $@"SELECT COUNT(*) FROM cnc_workshop {where}"; var totalSql = $@"SELECT COUNT(*) FROM cnc_workshop {where}";
var items = conn.Query<Workshop>(sql, param).ToList(); var items = conn.Query<Workshop>(sql, param).ToList();
var total = conn.ExecuteScalar<int>(totalSql, param); var total = conn.ExecuteScalar<int>(totalSql, param);
@ -65,7 +65,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"INSERT INTO cnc_workshop (Name, SortOrder, IsEnabled, CreatedAt, UpdatedAt) var sql = @"INSERT INTO cnc_workshop (name, sort_order, is_enabled, created_at, updated_at)
VALUES (@Name, @SortOrder, @IsEnabled, @CreatedAt, @UpdatedAt); VALUES (@Name, @SortOrder, @IsEnabled, @CreatedAt, @UpdatedAt);
SELECT LAST_INSERT_ID();"; SELECT LAST_INSERT_ID();";
return conn.QuerySingle<int>(sql, entity); return conn.QuerySingle<int>(sql, entity);
@ -76,7 +76,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"UPDATE cnc_workshop SET Name = @Name, SortOrder = @SortOrder, IsEnabled = @IsEnabled, UpdatedAt = @UpdatedAt WHERE Id = @Id"; var sql = @"UPDATE cnc_workshop SET name = @Name, sort_order = @SortOrder, is_enabled = @IsEnabled, updated_at = @UpdatedAt WHERE id = @Id";
return conn.Execute(sql, entity) > 0; return conn.Execute(sql, entity) > 0;
} }
} }
@ -85,7 +85,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"DELETE FROM cnc_workshop WHERE Id = @Id"; var sql = @"DELETE FROM cnc_workshop WHERE id = @Id";
return conn.Execute(sql, new { Id = id }) > 0; return conn.Execute(sql, new { Id = id }) > 0;
} }
} }
@ -94,7 +94,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"UPDATE cnc_workshop SET IsEnabled = CASE WHEN IsEnabled = 1 THEN 0 ELSE 1 END, UpdatedAt = NOW() WHERE Id = @Id"; var sql = @"UPDATE cnc_workshop SET is_enabled = CASE WHEN is_enabled = 1 THEN 0 ELSE 1 END, updated_at = NOW() WHERE id = @Id";
return conn.Execute(sql, new { Id = id }) > 0; return conn.Execute(sql, new { Id = id }) > 0;
} }
} }
@ -103,7 +103,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
var sql = @"SELECT COUNT(*) FROM cnc_machine WHERE WorkshopId = @WorkshopId"; var sql = @"SELECT COUNT(*) FROM cnc_machine WHERE workshop_id = @WorkshopId";
return conn.ExecuteScalar<int>(sql, new { WorkshopId = workshopId }); return conn.ExecuteScalar<int>(sql, new { WorkshopId = workshopId });
} }
} }

@ -0,0 +1,106 @@
using System;
using System.Linq;
using CncModels.Dto.Alert;
using CncModels.Entity;
using CncRepository.Impl;
using Xunit;
namespace CncRepository.Tests
{
/// <summary>
/// 告警仓储测试
/// </summary>
[Collection("Database")]
public class AlertRepositoryTests : IDisposable
{
private readonly AlertRepository _repo;
public AlertRepositoryTests()
{
_repo = new AlertRepository(TestDb.ConnectionString);
TestDb.TruncateAll();
}
public void Dispose()
{
TestDb.TruncateAll();
}
private Alert CreateTestAlert(string alertType = "collect_fail")
{
return new Alert
{
AlertType = alertType,
Title = "测试告警",
MachineId = null,
CollectAddressId = null,
Detail = "测试详情",
IsResolved = 0,
CreatedAt = DateTime.Now
};
}
[Fact]
public void Create__ID()
{
var id = _repo.Create(CreateTestAlert());
Assert.True(id > 0);
}
[Fact]
public void GetById_ID_()
{
var id = _repo.Create(CreateTestAlert());
var result = _repo.GetById(id);
Assert.NotNull(result);
Assert.Equal("collect_fail", result.AlertType);
Assert.Equal(0, result.IsResolved);
}
[Fact]
public void GetList__()
{
for (int i = 0; i < 5; i++)
_repo.Create(CreateTestAlert());
var query = new AlertQuery { Page = 1, PageSize = 3 };
var result = _repo.GetList(query);
Assert.Equal(5, result.Total);
Assert.Equal(3, result.Items.Count);
}
[Fact]
public void Resolve__true()
{
var id = _repo.Create(CreateTestAlert());
var result = _repo.Resolve(id);
Assert.True(result);
var alert = _repo.GetById(id);
Assert.Equal(1, alert.IsResolved);
}
[Fact]
public void BatchResolve__()
{
var id1 = _repo.Create(CreateTestAlert());
var id2 = _repo.Create(CreateTestAlert());
var id3 = _repo.Create(CreateTestAlert());
var count = _repo.BatchResolve(new System.Collections.Generic.List<long> { id1, id2 });
Assert.Equal(2, count);
Assert.Equal(1, _repo.GetById(id1).IsResolved);
Assert.Equal(1, _repo.GetById(id2).IsResolved);
Assert.Equal(0, _repo.GetById(id3).IsResolved);
}
[Fact]
public void GetStatistics_()
{
_repo.Create(CreateTestAlert("collect_fail"));
_repo.Create(CreateTestAlert("collect_fail"));
_repo.Create(CreateTestAlert("device_offline"));
var stats = _repo.GetStatistics();
Assert.True(stats.UnresolvedCount >= 3);
Assert.True(stats.UnresolvedByType.ContainsKey("collect_fail"));
Assert.True(stats.UnresolvedByType["collect_fail"] >= 2);
}
}
}

@ -0,0 +1,106 @@
using System;
using System.Linq;
using CncModels.Entity;
using CncRepository.Impl;
using Xunit;
namespace CncRepository.Tests
{
/// <summary>
/// 品牌仓储测试
/// </summary>
[Collection("Database")]
public class BrandRepositoryTests : IDisposable
{
private readonly BrandRepository _repo;
public BrandRepositoryTests()
{
_repo = new BrandRepository(TestDb.ConnectionString);
TestDb.TruncateAll();
}
public void Dispose()
{
TestDb.TruncateAll();
}
[Fact]
public void GetAll_()
{
var result = _repo.GetAll();
Assert.NotNull(result);
Assert.True(result.Count >= 1);
Assert.Equal("FANUC", result[0].BrandName);
}
[Fact]
public void GetById_ID_()
{
var result = _repo.GetById(1);
Assert.NotNull(result);
Assert.Equal("FANUC", result.BrandName);
}
[Fact]
public void Create__ID()
{
var entity = new Brand
{
BrandName = "Siemens",
DeviceField = "device",
TagsPath = "tags",
IsEnabled = 1,
CreatedAt = DateTime.Now,
UpdatedAt = DateTime.Now
};
var id = _repo.Create(entity);
Assert.True(id > 0);
Assert.Equal("Siemens", _repo.GetById(id).BrandName);
}
[Fact]
public void Update__true()
{
var entity = _repo.GetById(1);
entity.BrandName = "FANUC-修改";
entity.UpdatedAt = DateTime.Now;
var result = _repo.Update(entity);
Assert.True(result);
}
[Fact]
public void Delete_ID_true()
{
var id = _repo.Create(new Brand
{
BrandName = "待删除", DeviceField = "d", TagsPath = "t", IsEnabled = 1,
CreatedAt = DateTime.Now, UpdatedAt = DateTime.Now
});
Assert.True(_repo.Delete(id));
}
[Fact]
public void ToggleEnabled_()
{
var before = _repo.GetById(1).IsEnabled;
_repo.ToggleEnabled(1);
var after = _repo.GetById(1).IsEnabled;
Assert.NotEqual(before, after);
}
[Fact]
public void GetFieldMappingCount_()
{
var count = _repo.GetFieldMappingCount(1);
Assert.True(count >= 0);
}
[Fact]
public void GetCollectAddressCount_()
{
var count = _repo.GetCollectAddressCount(1);
Assert.True(count >= 0);
}
}
}

@ -0,0 +1,10 @@
using Xunit;
namespace CncRepository.Tests
{
/// <summary>
/// 数据库测试集合定义 —— 所有测试类共享同一个数据库,必须串行执行
/// </summary>
[CollectionDefinition("Database", DisableParallelization = true)]
public class DatabaseCollection { }
}

@ -0,0 +1,138 @@
using System;
using System.Linq;
using CncModels.Dto;
using CncModels.Dto.Machine;
using CncModels.Entity;
using CncRepository.Impl;
using Xunit;
namespace CncRepository.Tests
{
/// <summary>
/// 机床仓储测试
/// </summary>
[Collection("Database")]
public class MachineRepositoryTests : IDisposable
{
private readonly MachineRepository _repo;
public MachineRepositoryTests()
{
_repo = new MachineRepository(TestDb.ConnectionString);
TestDb.TruncateAll();
// 插入一个采集地址供机床引用
TestDb.Execute(@"INSERT INTO cnc_collect_address (id, name, url, brand_id, collect_interval, is_enabled, created_at, updated_at)
VALUES (1, '', 'http://10.1.1.1/', 1, 30, 1, NOW(), NOW())");
}
public void Dispose()
{
TestDb.TruncateAll();
}
private Machine CreateTestMachine(string deviceCode = "TEST_001")
{
return new Machine
{
DeviceCode = deviceCode,
Name = "测试机床",
WorkshopId = 1,
CollectAddressId = 1,
BrandId = 1,
IpAddress = "10.1.1.8",
IsEnabled = 1,
IsOnline = 0,
CreatedAt = DateTime.Now,
UpdatedAt = DateTime.Now
};
}
[Fact]
public void Create__ID()
{
var entity = CreateTestMachine();
var id = _repo.Create(entity);
Assert.True(id > 0);
}
[Fact]
public void GetById_ID_()
{
var id = _repo.Create(CreateTestMachine());
var result = _repo.GetById(id);
Assert.NotNull(result);
Assert.Equal("TEST_001", result.DeviceCode);
Assert.Equal("测试机床", result.Name);
}
[Fact]
public void GetById_ID_null()
{
var result = _repo.GetById(99999);
Assert.Null(result);
}
[Fact]
public void GetByDeviceCode__()
{
_repo.Create(CreateTestMachine("UNIQUE_CODE"));
var result = _repo.GetByDeviceCode("UNIQUE_CODE");
Assert.NotNull(result);
Assert.Equal("UNIQUE_CODE", result.DeviceCode);
}
[Fact]
public void GetList__()
{
// 插入几条数据
for (int i = 1; i <= 3; i++)
{
_repo.Create(CreateTestMachine($"CODE_{i:D3}"));
}
var query = new MachineQuery { Page = 1, PageSize = 2 };
var result = _repo.GetList(query);
Assert.True(result.Total >= 3);
Assert.True(result.Items.Count <= 2);
}
[Fact]
public void Update__true()
{
var id = _repo.Create(CreateTestMachine());
var entity = _repo.GetById(id);
entity.Name = "修改后";
entity.UpdatedAt = DateTime.Now;
var result = _repo.Update(entity);
Assert.True(result);
Assert.Equal("修改后", _repo.GetById(id).Name);
}
[Fact]
public void Delete_ID_true()
{
var id = _repo.Create(CreateTestMachine("DEL_001"));
var result = _repo.Delete(id);
Assert.True(result);
Assert.Null(_repo.GetById(id));
}
[Fact]
public void ToggleEnabled_()
{
var id = _repo.Create(CreateTestMachine());
var before = _repo.GetById(id).IsEnabled;
_repo.ToggleEnabled(id);
var after = _repo.GetById(id).IsEnabled;
Assert.NotEqual(before, after);
}
[Fact]
public void GetEnabledByAddressId_()
{
_repo.Create(CreateTestMachine("ADDR_001"));
var result = _repo.GetEnabledByAddressId(1);
Assert.NotNull(result);
Assert.True(result.Count > 0);
}
}
}

@ -0,0 +1,62 @@
using System;
using CncModels.Entity;
using CncRepository.Impl;
using Xunit;
namespace CncRepository.Tests
{
/// <summary>
/// 系统配置仓储测试
/// </summary>
[Collection("Database")]
public class SysConfigRepositoryTests : IDisposable
{
private readonly SysConfigRepository _repo;
public SysConfigRepositoryTests()
{
_repo = new SysConfigRepository(TestDb.ConnectionString);
TestDb.TruncateAll();
// TruncateAll已插入admin_username/admin_password_hash这里只需加test_key
TestDb.Execute(@"INSERT IGNORE INTO cnc_sys_config (config_key, config_value, value_type, description, updated_at)
VALUES ('test_key', 'test_value', 'string', '', NOW())");
}
public void Dispose()
{
TestDb.TruncateAll();
}
[Fact]
public void GetByKey_Key_()
{
var result = _repo.GetByKey("test_key");
Assert.NotNull(result);
Assert.Equal("test_value", result.ConfigValue);
}
[Fact]
public void GetByKey_Key_null()
{
var result = _repo.GetByKey("nonexistent_key");
Assert.Null(result);
}
[Fact]
public void GetAll_()
{
var result = _repo.GetAll();
Assert.NotNull(result);
Assert.True(result.Count >= 2);
}
[Fact]
public void UpdateValue__true()
{
var cfg = _repo.GetByKey("test_key");
var result = _repo.UpdateValue(cfg.Id, "new_value");
Assert.True(result);
Assert.Equal("new_value", _repo.GetByKey("test_key").ConfigValue);
}
}
}

@ -0,0 +1,104 @@
using System;
using Dapper;
using MySqlConnector;
namespace CncRepository.Tests
{
/// <summary>
/// 测试数据库连接辅助类
/// 所有测试共享 cnc_test 库,每条测试后清理数据
/// 使用 DELETE FROM 代替 TRUNCATE避免外键约束阻止DDL操作
/// </summary>
public static class TestDb
{
/// <summary>测试库连接串</summary>
public static readonly string ConnectionString =
"Server=localhost;Database=cnc_test;Uid=root;Pwd=root;Charset=utf8mb4;SslMode=None;";
/// <summary>
/// 清空所有测试表按外键依赖倒序DELETE然后重置自增
/// </summary>
public static void TruncateAll()
{
using (var conn = new MySqlConnection(ConnectionString))
{
// 按外键依赖倒序:先删子表,再删父表
var tables = new[]
{
"cnc_worker_machine",
"cnc_production_segment",
"cnc_machine_daily_status",
"cnc_worker_daily_summary",
"cnc_daily_production",
"cnc_production_adjustment",
"cnc_alert",
"cnc_machine",
"cnc_collect_address",
"cnc_brand_field_mapping",
"cnc_screen_filter",
"cnc_screen_config",
"cnc_worker",
"cnc_sys_config",
"cnc_workshop",
"cnc_brand"
};
// 禁用外键检查以允许DELETE和重置AUTO_INCREMENT
conn.Execute("SET FOREIGN_KEY_CHECKS = 0");
foreach (var table in tables)
{
conn.Execute($"DELETE FROM {table}");
conn.Execute($"ALTER TABLE {table} AUTO_INCREMENT = 1");
}
conn.Execute("SET FOREIGN_KEY_CHECKS = 1");
}
// 重新插入种子数据
SeedData();
}
/// <summary>
/// 插入基础种子数据
/// </summary>
public static void SeedData()
{
using (var conn = new MySqlConnection(ConnectionString))
{
// 品牌
conn.Execute(@"INSERT IGNORE INTO cnc_brand (id, brand_name, device_field, tags_path, is_enabled, created_at, updated_at)
VALUES (1, 'FANUC', 'device', 'tags', 1, NOW(), NOW())");
// 车间
conn.Execute(@"INSERT IGNORE INTO cnc_workshop (id, name, sort_order, is_enabled, created_at, updated_at)
VALUES (1, 'A', 1, 1, NOW(), NOW()), (2, 'B', 2, 1, NOW(), NOW())");
// 系统配置admin账号
conn.Execute(@"INSERT IGNORE INTO cnc_sys_config (config_key, config_value, value_type, description, updated_at)
VALUES ('admin_username', 'admin', 'string', '', NOW()),
('admin_password_hash', '$2a$11$dummyhashfortesting', 'string', '', NOW())");
}
}
/// <summary>
/// 执行SQL并返回受影响行数
/// </summary>
public static int Execute(string sql, object param = null)
{
using (var conn = new MySqlConnection(ConnectionString))
{
return conn.Execute(sql, param);
}
}
/// <summary>
/// 查询单个值
/// </summary>
public static T QuerySingle<T>(string sql, object param = null)
{
using (var conn = new MySqlConnection(ConnectionString))
{
return conn.QuerySingle<T>(sql, param);
}
}
}
}

@ -0,0 +1,132 @@
using System;
using System.Linq;
using CncModels.Dto;
using CncModels.Dto.Settings;
using CncModels.Entity;
using CncRepository.Impl;
using Xunit;
namespace CncRepository.Tests
{
/// <summary>
/// 车间仓储测试
/// </summary>
[Collection("Database")]
public class WorkshopRepositoryTests : IDisposable
{
private readonly WorkshopRepository _repo;
public WorkshopRepositoryTests()
{
_repo = new WorkshopRepository(TestDb.ConnectionString);
TestDb.TruncateAll();
}
public void Dispose()
{
TestDb.TruncateAll();
}
[Fact]
public void GetAll_()
{
var result = _repo.GetAll();
Assert.NotNull(result);
Assert.True(result.Count >= 2, "种子数据至少有2个车间");
}
[Fact]
public void GetById_ID_()
{
var result = _repo.GetById(1);
Assert.NotNull(result);
Assert.Equal("A栋", result.Name);
Assert.Equal(1, result.SortOrder);
}
[Fact]
public void GetById_ID_null()
{
var result = _repo.GetById(99999);
Assert.Null(result);
}
[Fact]
public void GetList__()
{
var result = _repo.GetList(null);
Assert.NotNull(result);
Assert.True(result.Total >= 2);
Assert.NotNull(result.Items);
}
[Fact]
public void GetList__()
{
var result = _repo.GetList("A");
Assert.True(result.Items.All(w => w.Name.Contains("A")));
}
[Fact]
public void Create__ID()
{
var entity = new Workshop
{
Name = "C栋",
SortOrder = 3,
IsEnabled = 1,
CreatedAt = DateTime.Now,
UpdatedAt = DateTime.Now
};
var id = _repo.Create(entity);
Assert.True(id > 0);
var created = _repo.GetById(id);
Assert.Equal("C栋", created.Name);
}
[Fact]
public void Update__true()
{
var entity = _repo.GetById(1);
entity.Name = "A栋-修改";
entity.UpdatedAt = DateTime.Now;
var result = _repo.Update(entity);
Assert.True(result);
var updated = _repo.GetById(1);
Assert.Equal("A栋-修改", updated.Name);
}
[Fact]
public void Delete_ID_true()
{
// 先插入一个独立的车间
var id = _repo.Create(new Workshop
{
Name = "待删除", SortOrder = 99, IsEnabled = 1,
CreatedAt = DateTime.Now, UpdatedAt = DateTime.Now
});
var result = _repo.Delete(id);
Assert.True(result);
Assert.Null(_repo.GetById(id));
}
[Fact]
public void ToggleEnabled_()
{
var before = _repo.GetById(1);
var beforeState = before.IsEnabled;
_repo.ToggleEnabled(1);
var after = _repo.GetById(1);
Assert.NotEqual(beforeState, after.IsEnabled);
}
[Fact]
public void GetMachineCount__0()
{
var count = _repo.GetMachineCount(1);
Assert.Equal(0, count);
}
}
}
Loading…
Cancel
Save