From c9571ee433732c6163679ed7b8bf35903f35cb06 Mon Sep 17 00:00:00 2001 From: git_rabbit Date: Sat, 1 Nov 2025 20:07:35 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=BD=AE=E6=92=AD=E7=9C=8B=E6=9D=BF):=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=B6=E9=97=B4=E8=8C=83=E5=9B=B4=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在CarouselBoardDto中添加StartTime和EndTime字段,支持传入时间范围查询 修改GetQualityStatisticsCarouselBoardData和GetWorkOrderCarouselBoardData方法,支持按传入时间范围或默认时间范围查询数据 --- .../MES/BI/carouselBoard/CarouselBoardDto.cs | 2 + .../BI/carouselBoard/CarouselBoardService.cs | 113 ++++++++++++++---- 2 files changed, 90 insertions(+), 25 deletions(-) diff --git a/ZR.Model/MES/BI/carouselBoard/CarouselBoardDto.cs b/ZR.Model/MES/BI/carouselBoard/CarouselBoardDto.cs index 755af918..49a635eb 100644 --- a/ZR.Model/MES/BI/carouselBoard/CarouselBoardDto.cs +++ b/ZR.Model/MES/BI/carouselBoard/CarouselBoardDto.cs @@ -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; } } /// diff --git a/ZR.Service/mes/BI/carouselBoard/CarouselBoardService.cs b/ZR.Service/mes/BI/carouselBoard/CarouselBoardService.cs index edf2f42f..9160b377 100644 --- a/ZR.Service/mes/BI/carouselBoard/CarouselBoardService.cs +++ b/ZR.Service/mes/BI/carouselBoard/CarouselBoardService.cs @@ -124,14 +124,27 @@ namespace ZR.Service.MES.carouselBoard public List 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 qualityStatistics = Context .Queryable() .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 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() + .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 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(); + 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 workorders = Context - .Queryable() - .Where(it => it.Remark3 == "是") // 只获取有效的工单 - .Where(it => it.Year == currentYear) // 筛选当前年份 - .Where(it => it.Week == currentWeek) // 筛选当前周 - .Where(it => it.Date == currentDay) // 筛选当前日 + List workorders = queryable .OrderBy(it => it.Sort) // 按序号排序 .Select(it => new WorkOrderCarouseDto {