using MoviconWebApi.Entities; namespace MoviconWebApi.API.ClearStaticApi { /// /// 清洗统计数据访问类 /// public static class Data { /// /// 获取清洗统计数据 /// /// 请求参数 /// FreeSql实例 /// 清洗统计响应 internal static async Task GetClearStatic(ClearStaticRequest request, IFreeSql freeSql) { try { // 获取当前日期信息 var today = DateTime.Today; var firstDayOfMonth = new DateTime(today.Year, today.Month, 1); var firstDayOfYear = new DateTime(today.Year, 1, 1); // 构建基础查询 var query = freeSql.Select(); // 构建基础查询 //var queryDeviceState = freeSql.Select(); var CurRunClearData = freeSql.Select().Where(a => a.Test_PartsEquipmentStatus == "1").OrderByDescending(a => a.CreateTime).First(); // 根据设备编号过滤 if (!string.IsNullOrWhiteSpace(request.DeviceCode)) { query = query.Where(x => x.DeviceCode == request.DeviceCode); } // 计算累计作业数量 var totalJobCount = await query.CountAsync(); // 计算本年度作业数 var yearJobCount = await query .Where(x => x.CreateTime >= firstDayOfYear) .CountAsync(); // 计算本月作业数 var monthJobCount = await query .Where(x => x.CreateTime >= firstDayOfMonth) .CountAsync(); // 计算今日作业数 var todayJobCount = await query .Where(x => x.CreateTime >= today) .CountAsync(); // 计算累计作业时长 // 注意:这里假设ClearData表中有一个字段表示清洗时长,可能需要根据实际情况调整 var totalJobHours = await query .SumAsync(x => Convert.ToDecimal(x.RunTime)) / 60; // 假设时长单位是秒,转换为小时 // 计算本年作业时长 var yearJobHours = await query .Where(x => x.CreateTime >= firstDayOfYear) .SumAsync(x => Convert.ToDecimal(x.RunTime)) / 60; // 计算本月作业时长 var monthJobHours = await query .Where(x => x.CreateTime >= firstDayOfMonth) .SumAsync(x => Convert.ToDecimal(x.RunTime)) / 60; // 计算今日作业时长 var todayJobHours = await query .Where(x => x.CreateTime >= today) .SumAsync(x => Convert.ToDecimal(x.RunTime)) / 60; // 返回结果 return new ClearStaticResponse { TotalJobCount = (int)totalJobCount, YearJobCount = (int)yearJobCount, MonthJobCount = (int)monthJobCount, TodayJobCount = (int)todayJobCount, TotalJobHours = Math.Round(totalJobHours, 2), YearJobHours = Math.Round(yearJobHours, 2), MonthJobHours = Math.Round(monthJobHours, 2), TodayJobHours = Math.Round(todayJobHours, 2), CurrentVehicleModel = CurRunClearData != null ? CurRunClearData.vehicle_model : "", CurrentLocomotiveNumber = CurRunClearData != null ? CurRunClearData.locomotive_number : "", CurrentRepairProcess = CurRunClearData != null ? CurRunClearData.repair_process : "", CurrentWheelNumber = "", // 假设part_num字段存储车轮编号 UpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; } catch (Exception ex) { // 记录异常日志 Console.WriteLine($"获取清洗统计数据失败:{ex.Message}"); return null; } } } }