From 89904fead160e4e1312eee4e89672c39d58c3ad5 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Thu, 21 Mar 2024 20:23:20 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E8=8F=9C=E5=8D=95=E6=97=B6=E6=95=88?= =?UTF-8?q?=E8=8C=83=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Request/DishesMenuNameDateSaveRequest.cs | 16 +++--- .../Dishes/Response/DishesMenuPageResponse.cs | 9 +++- .../Services/Implements/DishesMenuService.cs | 50 +++++++++++++------ .../Implements/BookingOrderService.cs | 3 +- .../Canteen/Entities/DishesMenuEntity.cs | 11 ++-- 5 files changed, 59 insertions(+), 30 deletions(-) diff --git a/Src/Dlhis.Basic/Dishes/Request/DishesMenuNameDateSaveRequest.cs b/Src/Dlhis.Basic/Dishes/Request/DishesMenuNameDateSaveRequest.cs index 54b3bb35..7be1b655 100644 --- a/Src/Dlhis.Basic/Dishes/Request/DishesMenuNameDateSaveRequest.cs +++ b/Src/Dlhis.Basic/Dishes/Request/DishesMenuNameDateSaveRequest.cs @@ -1,5 +1,6 @@ using System.ComponentModel.DataAnnotations; using Kurisu.AspNetCore.Utils.Extensions; +using Kurisu.Core.CustomClass; namespace Dlhis.Basic.Dishes.Request; @@ -11,29 +12,26 @@ public class DishesMenuNameDateSaveRequest : IValidatableObject public string CustomCode { get; set; } /// - /// 菜单日期 + /// 时间段 /// - public DateTime Date { get; set; } + [Required(ErrorMessage = "时间段不可为空")] + public DateTimePeriod Period { get; set; } /// /// 餐次数据 /// public List ShiftTypes { get; set; } - public IEnumerable Validate(ValidationContext validationContext) { - if (Date < DateTime.Today) + if (Period.Start < Period.End) { - yield return new ValidationResult("菜单日期不能小于当天"); + yield return new ValidationResult("时间范围有误", new[] { nameof(Period) }); } - //格式化 - Date = Date.Date; - if (CustomCode.IsEmpty()) { - CustomCode = Date.ToString("yyyy-MM-dd"); + CustomCode = Period.Start.Value.ToString("yyyy-MM-dd") + "." + Period.End.Value.ToString("yyyy-MM-dd"); } } } diff --git a/Src/Dlhis.Basic/Dishes/Response/DishesMenuPageResponse.cs b/Src/Dlhis.Basic/Dishes/Response/DishesMenuPageResponse.cs index c59836cb..96414ae9 100644 --- a/Src/Dlhis.Basic/Dishes/Response/DishesMenuPageResponse.cs +++ b/Src/Dlhis.Basic/Dishes/Response/DishesMenuPageResponse.cs @@ -13,7 +13,12 @@ public class DishesMenuPageResponse public Guid BusinessPlaceCode { get; set; } /// - /// 营业日期 + /// 营业日期 开始 /// - public DateTime Date { get; set; } + public DateTime StartDate { get; set; } + + /// + /// 营业日期 结束 + /// + public DateTime EndDate { get; set; } } diff --git a/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs b/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs index 77e9b9b0..d007c4d2 100644 --- a/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs +++ b/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs @@ -9,7 +9,8 @@ using Dlhis.Basic.Dishes.Request; using Dlhis.Basic.Dishes.Response; using Dlhis.Basic.BusinessPlace.Services; using Dlhis.Basic.Dishes.Dto; -using Mapster; +using Kurisu.Core.CustomClass; +using System.Linq.Expressions; namespace Dlhis.Basic.Dishes.Services.Implements; @@ -28,12 +29,13 @@ public class DishesMenuService : IDishesMenuService { return await _dbContext.Queryable() .Where(x => x.BusinessPlaceCode == request.BusinessPlaceCode) - .GroupBy(x => new { x.BusinessPlaceCode, x.CustomCode, x.Date }) + .GroupBy(x => new { x.BusinessPlaceCode, x.CustomCode, x.StartDate, x.EndDate }) .Select(x => new DishesMenuPageResponse { BusinessPlaceCode = x.BusinessPlaceCode, CustomCode = x.CustomCode, - Date = x.Date, + StartDate = x.StartDate, + EndDate = x.EndDate, }) .ToPageListAsync(request); } @@ -42,6 +44,8 @@ public class DishesMenuService : IDishesMenuService { var data = await _dbContext.Queryable() .Where(x => x.BusinessPlaceCode == businessPlaceCode) + .Where(x => x.CustomCode == customCode) + .Where(x => x.StartDate >= date && x.EndDate <= date) .ToListAsync(); return new DishesMenuSaveRequest @@ -52,7 +56,11 @@ public class DishesMenuService : IDishesMenuService new() { CustomCode = customCode, - Date = date, + Period = new DateTimePeriod + { + Start = data[0].StartDate, + End = data[0].EndDate, + }, ShiftTypes = data.GroupBy(x => x.ShiftType).Select(item => { var shiftType = item.Key; @@ -79,7 +87,7 @@ public class DishesMenuService : IDishesMenuService var data = await _dbContext.Queryable() .LeftJoin((x, dishes) => x.DishesCode == dishes.CustomCode) .Where(x => x.BusinessPlaceCode == businessPlaceCode) - .Where(x => SqlFunc.DateIsSame(x.Date, date, DateType.Day)) + .Where(x => x.StartDate >= date && x.EndDate <= date) .Where((x, dishes) => dishes.Enable) .WhereIF(shiftType.HasValue, x => x.ShiftType == shiftType) .Where((x, dishes) => dishes.CategoryCode == categoryCode) @@ -114,7 +122,7 @@ public class DishesMenuService : IDishesMenuService var entities = request.Items.SelectMany(item => { var customCode = item.CustomCode; - var date = item.Date; + var period = item.Period; return item.ShiftTypes.SelectMany(shiftTypeItem => { @@ -130,7 +138,8 @@ public class DishesMenuService : IDishesMenuService { BusinessPlaceCode = request.BusinessPlaceCode, CustomCode = customCode, - Date = date, + StartDate = period.Start.Value, + EndDate = period.End.Value, ShiftType = shiftType, DishesCode = dishesCode, Number = number, @@ -143,31 +152,44 @@ public class DishesMenuService : IDishesMenuService }); }).ToList(); - var keys = entities.DistinctBy(x => new { x.Date, x.ShiftType }).Select(x => new { x.Date, x.ShiftType }).ToList(); + var keys = entities.DistinctBy(x => new { x.StartDate, x.EndDate, x.ShiftType }).Select(x => new { x.StartDate, x.EndDate, x.ShiftType }).ToList(); var where = LinqExpressionExtension.False(); keys.ForEach(x => { - where = where.Or(item => item.BusinessPlaceCode == request.BusinessPlaceCode - && SqlFunc.DateIsSame(item.Date, x.Date, DateType.Day) + where = where.Or(item => item.BusinessPlaceCode == request.BusinessPlaceCode + && SqlFunc.DateIsSame(item.StartDate, x.StartDate, DateType.Day) + && SqlFunc.DateIsSame(item.EndDate, x.EndDate, DateType.Day) && item.ShiftType == x.ShiftType); }); await _dbContext.Client.Deleteable().Where(where).ExecuteCommandAsync(); await _dbContext.InsertAsync(entities); + + if (request.Items.Any()) + { + Expression> whereCheck = LinqExpressionExtension.False(); + request.Items.ForEach(p => + { + whereCheck = where.Or(x => !(x.EndDate < p.Period.Start || x.StartDate > p.Period.End)); + }); + + var duplicate = await _dbContext.Queryable().Where(whereCheck).AnyAsync(); + duplicate.ThrowIfTrue("菜单时效冲突"); + } } public async Task GetBookingDishesDetailAsync(DateTime date, Guid businessPlaceCode, ShiftEnumType shiftType, string dishesCode) { var detail = await _dbContext.Queryable() .LeftJoin((x, d) => x.DishesCode == d.CustomCode) - .Where(x => SqlFunc.DateIsSame(x.Date, date, DateType.Day)) + .Where(x => x.StartDate >= date && x.EndDate <= date) .Where(x => x.BusinessPlaceCode == businessPlaceCode) .Where(x => x.ShiftType == shiftType) .Where(x => x.DishesCode == dishesCode) .Where((x, d) => d.Enable) .Select((x, d) => new DishesMenuDetailDto { - Date = x.Date, + Date = date, MenuId = x.Id, DishesId = d.Id, DishesCode = d.CustomCode, @@ -185,11 +207,11 @@ public class DishesMenuService : IDishesMenuService private static void CheckDuplicateData(DishesMenuSaveRequest request) { - (request.Items.DistinctBy(x => new { x.CustomCode, x.Date }).Count() != request.Items.Count).ThrowIfTrue("菜单不可重复"); + (request.Items.DistinctBy(x => new { x.CustomCode, x.Period.Start, x.Period.End }).Count() != request.Items.Count).ThrowIfTrue("菜单不可重复"); foreach (var item in request.Items) { - var u = item.Date.ToString("yyyy-MM-dd") + ". " + item.CustomCode; + var u = item.Period.Start.Value.ToString("yyyy-MM-dd") + "." + item.Period.End.Value.ToString("yyyy-MM-dd") + "." + item.CustomCode; (item.ShiftTypes.DistinctBy(x => x.ShiftType).Count() != item.ShiftTypes.Count).ThrowIfTrue($"{u}的餐次不可重复添加"); diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs index c8187ecc..18623126 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs @@ -14,7 +14,6 @@ using Dlhis.Basic.Api; using Kurisu.SqlSugar.Extensions; using SqlSugar; using Mapster; -using MySqlX.XDevAPI.Relational; namespace Dlhis.Canteen.Order.Services.Implements; @@ -134,7 +133,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService .SetColumns(x => x.Number == menuDetail.Number) .SetColumns(x => x.Version == x.Version + 1) .SetColumns(x => x.ModifiedTime == now) - .Where(x => x.Date == menuDetail.Date + .Where(x => x.StartDate >= menuDetail.Date && x.EndDate <= menuDetail.Date && x.ShiftType == request.ShiftType && x.BusinessPlaceCode == request.BusinessPlaceCode && x.DishesCode == request.DishesCode diff --git a/Src/Dlhis.Entity/Canteen/Entities/DishesMenuEntity.cs b/Src/Dlhis.Entity/Canteen/Entities/DishesMenuEntity.cs index 52dffbc0..237f2b01 100644 --- a/Src/Dlhis.Entity/Canteen/Entities/DishesMenuEntity.cs +++ b/Src/Dlhis.Entity/Canteen/Entities/DishesMenuEntity.cs @@ -31,11 +31,16 @@ public class DishesMenuEntity : SugarBaseEntity, ITenantId, IVersion public Guid BusinessPlaceCode { get; set; } /// - /// 营业日期 + /// 营业日期-开始 /// - [SugarColumn(ColumnDataType = "date", ColumnDescription = "营业日期")] - public DateTime Date { get; set; } + [SugarColumn(ColumnDescription = "营业日期开始")] + public DateTime StartDate { get; set; } + /// + /// 营业日期-结束 + /// + [SugarColumn(ColumnDescription = "营业日期结束")] + public DateTime EndDate { get; set; } /// /// 餐次