From 13f8bde2ea621e67f4f6390ecb6413ebb43225c4 Mon Sep 17 00:00:00 2001 From: cheche <717840555@qq.com> Date: Thu, 18 Jan 2024 17:20:19 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E6=B6=88=E8=B4=B9=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E5=88=A4=E6=96=ADConsumeIsPresent2Async?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Order/Controllers/OrdersController.cs | 1 + .../Order/Services/IOrderService.cs | 1 + .../Order/Services/Implements/OrderService.cs | 122 ++++++++++++++++++ 3 files changed, 124 insertions(+) diff --git a/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs b/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs index 86e9a5c6..3e8f30e5 100644 --- a/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs +++ b/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs @@ -43,4 +43,5 @@ public class OrdersController : ControllerBase { return await _orderService.AddAsync(request); } + } diff --git a/Src/Dlhis.Canteen/Order/Services/IOrderService.cs b/Src/Dlhis.Canteen/Order/Services/IOrderService.cs index b30a7e27..d3bfb5d2 100644 --- a/Src/Dlhis.Canteen/Order/Services/IOrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/IOrderService.cs @@ -9,4 +9,5 @@ public interface IOrderService : IScopeDependency Task> GetPageAsync(OrderPageRequest request); Task AddAsync(OrderAddRequest request); + } diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs index d9b65301..7063e3ff 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs @@ -194,6 +194,127 @@ public class OrderService : IOrderService .ExecuteCommandAsync(); } + private async Task ConsumeIsPresent2Async(ConsumeRequest request, GainfoEntity gainfo) + { + var device = await _dbContext.Queryable().Where(x => x.UniqueNo == request.DeviceUniqueNo).Where(x => x.Enable).FirstAsync(); + device.ThrowIfNull("设备不存在或者尚未启用"); + + var registry = await _dbContext.Queryable().Where(x => x.DeviceUniqueNo == request.DeviceUniqueNo).FirstAsync(); + registry.ThrowIfNull("设备尚未注册"); + + var businessPlace = await _dbContext.Queryable().Where(x => x.Code == registry.BusinessPlaceCode).FirstAsync(); + businessPlace.ThrowIfNull("营业点尚未设置"); + + // 获取当前消费餐次 + var shifts = await _dbContext.Queryable().Where(x => x.BusinessPlaceCode == businessPlace.Code).ToListAsync(); + + // 使用 LINQ 查询找到满足条件的餐次 + var shift = shifts.FirstOrDefault(x => IsPresent2(new TimePeriod { Start = x.Start, End = x.End }, request.CostDateTime)); + + var settings = await _canteenSettingService.GetUserSettingAsync(request.UserUniqueNo); + var switchTime = GetSetting(settings, CanteenSettingItemEnumType.BusinessSwitchTime); + + var shiftTimePeriod = new TimePeriod + { + Start = shift?.Start, + End = shift?.End + }; + + // 计算成本日期 todo 优化 + var costDate = DateTime.Now; + + if (shift == null) + { + costDate = DateTime.Now; + } + else + { + if (switchTime.HasValue) + { + var beginOfDay = DateTime.Today; + var setTime = beginOfDay.Add(switchTime.Value.ToTimeSpan()); + + if (DateTime.Now < setTime) + costDate = DateTime.Now.AddDays(-1); + } + } + + var order = new CanteenOrderEntity + { + RequestJson = request.ToJson(), + ThirdNo = request.ThirdNo, + Type = BalanceRecordTypeEnumType.Out, + Name = gainfo.Name, + Source = request.Source, + UserNo = gainfo.No, + UserCode = gainfo.Code, + Amount = request.Amount, + BusinessPlaceCode = businessPlace.Code, + BusinessShiftCode = shift?.Code, + CostDate = costDate.Date, + CostId = gainfo.CostId, + DepartmentNo = gainfo.DepartmentNo, + DeviceInfo = request.DeviceUniqueNo, + + No = "O" + SnowFlakeHelper.Instance.NextId(), + SubsidiesFromMonth = request.CostDateTime.ToString("yyyyMM"), + IsOffline = request.IsOffline, + IsCostCrossTenant = GetSetting(settings, CanteenSettingItemEnumType.AllowCrossTenant), + OriginTenantId = gainfo.Werks, + + Status = shift == null ? BalanceRecordStatusEnumType.Doubtful : BalanceRecordStatusEnumType.Valid, + OrderStatus = CanteenOrderStatusEnumType.Wait, + CostDateTime = request.CostDateTime, + TenantId = businessPlace.TenantId, + }; + + var orderId = await _dbContext.InsertReturnIdentityAsync(order); + + try + { + await GenerateConsumeRecordAsync(orderId, settings, shifts, request.CostDateTime); + } + catch (Exception ex) + { + await _dbContext.Updateable() + .SetColumns(x => x.OrderStatus == CanteenOrderStatusEnumType.Failure) + .SetColumns(x => x.Result == ex.Message) + .SetColumns(x => x.ModifiedTime == DateTime.Now) + .Where(x => x.Id == orderId) + .ExecuteCommandAsync(); + + throw; + } + + await _dbContext.Updateable() + .SetColumns(x => x.OrderStatus == CanteenOrderStatusEnumType.Successful) + .SetColumns(x => x.ModifiedTime == DateTime.Now) + .Where(x => x.Id == orderId) + .ExecuteCommandAsync(); + } + public static bool IsPresent2(TimePeriod period, DateTime dateTime) + { + var start = DateTime.Now; + var end = DateTime.Now; + + if (period.IsCrossDay()) + { + // 第二天 + if (dateTime.Hour >= 0) + { + start = DateTime.Today.AddDays(-1).Add(period.Start.Value.ToTimeSpan()); + end = DateTime.Today.Add(period.End.Value.ToTimeSpan()); + } + } + else + { + start = DateTime.Today.Add(period.Start.Value.ToTimeSpan()); + end = DateTime.Today.Add(period.End.Value.ToTimeSpan()); + } + + return dateTime >= start && dateTime <= end; + } + /// /// 充值 /// @@ -464,4 +585,5 @@ public class OrderService : IOrderService }, 5); } + }