using System; using System.Collections.Generic; using System.Linq; using Dapper; using MySqlConnector; using CncModels.Dto; using CncModels.Dto.CollectLog; using CncModels.Entity; using CncRepository.Base; using CncRepository.Interface; namespace CncRepository.Impl.Log { /// /// 采集分析仓储实现(日志库 - log_collect_analysis) /// public class CollectAnalysisRepository : LogRepository, ICollectAnalysisRepository { public CollectAnalysisRepository(string connectionString) : base(connectionString) { } public PagedResult GetAnalysisList(CollectAnalysisQuery query) { using (var conn = CreateConnection()) { var whereParts = new List { "1=1" }; var p = new DynamicParameters(); if (query.StartDate.HasValue) { whereParts.Add("a.analysis_time >= @StartDate"); p.Add("StartDate", query.StartDate); } if (query.EndDate.HasValue) { whereParts.Add("a.analysis_time <= @EndDate"); p.Add("EndDate", query.EndDate); } if (query.CollectAddressId.HasValue) { whereParts.Add("a.collect_address_id = @CollectAddressId"); p.Add("CollectAddressId", query.CollectAddressId); } if (query.MachineId.HasValue) { whereParts.Add("a.machine_id = @MachineId"); p.Add("MachineId", query.MachineId); } if (!string.IsNullOrEmpty(query.AnalysisType)) { whereParts.Add("a.analysis_type = @AnalysisType"); p.Add("AnalysisType", query.AnalysisType); } if (!string.IsNullOrEmpty(query.ProgramName)) { whereParts.Add("a.current_program LIKE CONCAT('%', @ProgramName, '%')"); p.Add("ProgramName", query.ProgramName); } var whereSql = string.Join(" AND ", whereParts); // 统计总条数 var total = conn.ExecuteScalar( $"SELECT COUNT(1) FROM log_collect_analysis a WHERE {whereSql}", p); // 分页查询(左连机床表获取名称) var dataSql = $@"SELECT a.id AS Id, DATE_FORMAT(a.analysis_time, '%Y-%m-%d %H:%i:%s') AS AnalysisTime, a.collect_address_id AS CollectAddressId, a.machine_id AS MachineId, NULL AS MachineName, a.analysis_type AS AnalysisType, a.previous_program AS PreviousProgram, a.current_program AS CurrentProgram, a.part_count_delta AS PartCountDelta, a.analysis_summary AS AnalysisSummary FROM log_collect_analysis a WHERE {whereSql} ORDER BY a.analysis_time DESC LIMIT @PageSize OFFSET @Offset"; var items = conn.Query(dataSql, new { PageSize = query.PageSize, Offset = query.Offset }).AsList(); return new PagedResult { Items = items, Total = total, Page = query.Page, PageSize = query.PageSize }; } } public CollectAnalysisDetail GetAnalysisDetail(long id) { using (var conn = CreateConnection()) { var sql = @"SELECT a.id AS Id, DATE_FORMAT(a.analysis_time, '%Y-%m-%d %H:%i:%s') AS AnalysisTime, a.collect_address_id AS CollectAddressId, a.machine_id AS MachineId, NULL AS MachineName, a.analysis_type AS AnalysisType, a.previous_program AS PreviousProgram, a.current_program AS CurrentProgram, a.part_count_delta AS PartCountDelta, a.previous_part_count AS PreviousPartCount, a.current_part_count AS CurrentPartCount, a.previous_status AS PreviousStatus, a.current_status AS CurrentStatus, a.analysis_summary AS AnalysisSummary, a.analysis_detail AS AnalysisDetail, a.raw_log_id AS RawLogId FROM log_collect_analysis a WHERE a.id = @Id"; return conn.QueryFirstOrDefault(sql, new { Id = id }); } } public List GetAnalysisByRawLogId(long rawLogId) { using (var conn = CreateConnection()) { var sql = @"SELECT a.id AS Id, DATE_FORMAT(a.analysis_time, '%Y-%m-%d %H:%i:%s') AS AnalysisTime, a.collect_address_id AS CollectAddressId, a.machine_id AS MachineId, NULL AS MachineName, a.analysis_type AS AnalysisType, a.previous_program AS PreviousProgram, a.current_program AS CurrentProgram, a.part_count_delta AS PartCountDelta, a.analysis_summary AS AnalysisSummary FROM log_collect_analysis a WHERE a.raw_log_id = @RawLogId ORDER BY a.analysis_time DESC"; return conn.Query(sql, new { RawLogId = rawLogId }).AsList(); } } public long Create(CollectAnalysis entity) { using (var conn = CreateConnection()) { var sql = @"INSERT INTO log_collect_analysis (analysis_time, raw_log_id, collect_address_id, machine_id, analysis_type, previous_program, current_program, previous_part_count, current_part_count, part_count_delta, previous_status, current_status, analysis_summary, analysis_detail, created_at) VALUES (@AnalysisTime, @RawLogId, @CollectAddressId, @MachineId, @AnalysisType, @PreviousProgram, @CurrentProgram, @PreviousPartCount, @CurrentPartCount, @PartCountDelta, @PreviousStatus, @CurrentStatus, @AnalysisSummary, @AnalysisDetail, NOW()); SELECT LAST_INSERT_ID();"; return conn.ExecuteScalar(sql, new { entity.AnalysisTime, entity.RawLogId, entity.CollectAddressId, entity.MachineId, entity.AnalysisType, entity.PreviousProgram, entity.CurrentProgram, entity.PreviousPartCount, entity.CurrentPartCount, entity.PartCountDelta, entity.PreviousStatus, entity.CurrentStatus, entity.AnalysisSummary, entity.AnalysisDetail }); } } public int DeleteBeforeDate(DateTime date) { using (var conn = CreateConnection()) { return conn.Execute( "DELETE FROM log_collect_analysis WHERE analysis_time < @Date", new { Date = date }); } } } }