diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs index f7f701a0..f0cd8c8f 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs @@ -103,7 +103,7 @@ public class OrderService : IOrderService //获取当前消费餐次 var shifts = await _dbContext.Queryable().Where(x => x.BusinessPlaceCode == businessPlace.Code).ToListAsync(); - //todo + var shift = shifts.FirstOrDefault(x => new TimePeriod() { Start = x.Start, @@ -197,127 +197,6 @@ 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; - } - /// /// 充值 /// diff --git a/Src/Dlhis.Canteen/Order/TimePeriodExtensions.cs b/Src/Dlhis.Canteen/Order/TimePeriodExtensions.cs index b400f354..d80f892d 100644 --- a/Src/Dlhis.Canteen/Order/TimePeriodExtensions.cs +++ b/Src/Dlhis.Canteen/Order/TimePeriodExtensions.cs @@ -10,60 +10,8 @@ public static class TimePeriodExtensions { public static bool IsPresent1(this TimePeriod period, DateTime dateTime) { - return period.IsPresent2(dateTime); - - int hour = dateTime.Hour; - int minute = dateTime.Minute; - IReadOnlyList hourPeriod = GetHourPeriod(); - if (hourPeriod.Contains(hour)) - { - if (hour == period.Start.Value.Hour) - { - return minute > period.Start.Value.Minute; - } - - if (hour == period.End.Value.Hour) - { - return minute < period.End.Value.Minute; - } - - return true; - } - - return false; - - - IReadOnlyList GetHourPeriod() - { - List list = new List(); - if (period.IsCrossDay()) - { - for (int i = 0; i < 25 - period.Start.Value.Hour; i++) - { - list.Add(period.Start.Value.Hour + i); - } - - for (int j = 0; j < period.End.Value.Hour; j++) - { - list.Add(j + 1); - } - } - else - { - for (int k = period.Start.Value.Hour; k < period.End.Value.Hour + 1; k++) - { - list.Add(k); - } - } - - return list; - } - } - - public static bool IsPresent2(this TimePeriod period, DateTime dateTime) - { - var start = DateTime.Now; - var end = DateTime.Now; + DateTime start; + DateTime end; if (period.IsCrossDay()) { @@ -73,6 +21,11 @@ public static class TimePeriodExtensions 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.AddDays(1).Add(period.End.Value.ToTimeSpan()); + } } else { @@ -80,8 +33,6 @@ public static class TimePeriodExtensions end = DateTime.Today.Add(period.End.Value.ToTimeSpan()); } - - return dateTime >= start && dateTime <= end; } }