This commit is contained in:
2025-11-04 13:10:46 +08:00
2 changed files with 90 additions and 25 deletions

View File

@@ -10,6 +10,8 @@ namespace ZR.Model.mes.carouselBoard
{
public string Text { get; set; } = string.Empty;
public string SubText { get; set; } = string.Empty;
public DateTime? StartTime { get; set; }
public DateTime? EndTime { get; set; }
}
/// <summary>

View File

@@ -124,14 +124,27 @@ namespace ZR.Service.MES.carouselBoard
public List<QualityStatisticsCarouseDto> GetQualityStatisticsCarouselBoardData(CarouselBoardQuery query)
{
// 获取今日日期
DateTime today = DateTime.Today;
DateTime tomorrow = today.AddDays(1);
// 确定查询时间范围
DateTime startTime, endTime;
if (query != null && query.StartTime.HasValue && query.EndTime.HasValue)
{
// 使用传入的时间范围
startTime = query.StartTime.Value;
endTime = query.EndTime.Value;
}
else
{
// 默认使用前一天和当天的数据
DateTime yesterday = DateTime.Today.AddDays(-1);
DateTime todayEnd = DateTime.Today.AddDays(1).AddMilliseconds(-1);
startTime = yesterday;
endTime = todayEnd;
}
List<QualityStatisticsCarouseDto> qualityStatistics = Context
.Queryable<QcQualityStatisticsFirst>()
.Where(it => it.Remark2 == 1) // 只获取有效的记录
.Where(it => it.StartTime >= today && it.StartTime < tomorrow) // 筛选今日内的数据
.Where(it => it.StartTime >= startTime && it.StartTime <= endTime) // 筛选时间范围内的数据
.Select(it => new QualityStatisticsCarouseDto
{
Id = it.Id, // id
@@ -155,30 +168,80 @@ namespace ZR.Service.MES.carouselBoard
public List<WorkOrderCarouseDto> GetWorkOrderCarouselBoardData(CarouselBoardQuery query)
{
// 获取当前日期信息
DateTime now = DateTime.Now;
int currentYear = now.Year;
// 计算当前是本年的第几周(周一为一周的开始)
int currentWeek = CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(
now,
CalendarWeekRule.FirstFourDayWeek,
DayOfWeek.Monday
);
// 计算当前是星期几1-7周一=1周日=7
int currentDay = (int)now.DayOfWeek;
if (currentDay == 0) // 如果是周日
// 查询条件构建
var queryable = Context.Queryable<ProWorkorder_v2>()
.Where(it => it.Remark3 == "是"); // 只获取有效的工单
if (query != null && query.StartTime.HasValue && query.EndTime.HasValue)
{
currentDay = 7;
// 使用传入的时间范围进行查询
// 由于工单曲线上使用Year、Week、Date存储日期需要进行转换处理
// 这里假设工单曲线上的Year、Week、Date组合可以映射到具体日期
// 找出时间范围内的所有日期
var dateRange = new List<DateTime>();
DateTime currentDate = query.StartTime.Value.Date;
DateTime endDate = query.EndTime.Value.Date;
while (currentDate <= endDate)
{
dateRange.Add(currentDate);
currentDate = currentDate.AddDays(1);
}
// 构建日期条件
var yearWeekDayConditions = dateRange.Select(date => new
{
Year = date.Year,
Week = CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(
date,
CalendarWeekRule.FirstFourDayWeek,
DayOfWeek.Monday
),
Day = ((int)date.DayOfWeek == 0) ? 7 : (int)date.DayOfWeek
}).ToList();
// 使用OR条件连接不同日期的工单
var conditions = Expressionable.Create<ProWorkorder_v2>();
foreach (var yw in yearWeekDayConditions)
{
conditions.Or(it => it.Year == yw.Year && it.Week == yw.Week && it.Date == yw.Day);
}
queryable = queryable.Where(conditions.ToExpression());
}
else
{
// 默认使用前一天和当天的数据
DateTime yesterday = DateTime.Today.AddDays(-1);
DateTime today = DateTime.Today;
// 计算昨天的年、周、日信息
int yesterdayYear = yesterday.Year;
int yesterdayWeek = CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(
yesterday,
CalendarWeekRule.FirstFourDayWeek,
DayOfWeek.Monday
);
int yesterdayDay = ((int)yesterday.DayOfWeek == 0) ? 7 : (int)yesterday.DayOfWeek;
// 计算今天的年、周、日信息
int todayYear = today.Year;
int todayWeek = CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(
today,
CalendarWeekRule.FirstFourDayWeek,
DayOfWeek.Monday
);
int todayDay = ((int)today.DayOfWeek == 0) ? 7 : (int)today.DayOfWeek;
// 使用OR条件查询昨天和今天的工单
queryable = queryable.Where(it =>
(it.Year == yesterdayYear && it.Week == yesterdayWeek && it.Date == yesterdayDay) ||
(it.Year == todayYear && it.Week == todayWeek && it.Date == todayDay)
);
}
List<WorkOrderCarouseDto> workorders = Context
.Queryable<ProWorkorder_v2>()
.Where(it => it.Remark3 == "是") // 只获取有效的工单
.Where(it => it.Year == currentYear) // 筛选当前年份
.Where(it => it.Week == currentWeek) // 筛选当前周
.Where(it => it.Date == currentDay) // 筛选当前日
List<WorkOrderCarouseDto> workorders = queryable
.OrderBy(it => it.Sort) // 按序号排序
.Select(it => new WorkOrderCarouseDto
{