Files
MoviconHub/MoviconWebApi/API/ClearStaticApi/Data.cs
2025-09-15 17:59:48 +08:00

104 lines
4.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using MoviconWebApi.Entities;
namespace MoviconWebApi.API.ClearStaticApi
{
/// <summary>
/// 清洗统计数据访问类
/// </summary>
public static class Data
{
/// <summary>
/// 获取清洗统计数据
/// </summary>
/// <param name="request">请求参数</param>
/// <param name="freeSql">FreeSql实例</param>
/// <returns>清洗统计响应</returns>
internal static async Task<ClearStaticResponse?> 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<DeviceState>();
// 构建基础查询
//var queryDeviceState = freeSql.Select<DeviceState>();
var CurRunClearData = freeSql.Select<CurRunClearState>().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;
}
}
}
}