diff --git a/Src/Dlhis.Canteen/Order/Services/BaseOrderService.cs b/Src/Dlhis.Canteen/Order/Services/BaseOrderService.cs index 16ed5fee..df521389 100644 --- a/Src/Dlhis.Canteen/Order/Services/BaseOrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/BaseOrderService.cs @@ -1,16 +1,12 @@ using Dlhis.Canteen.Setting.Services; -using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Canteen.Enums; using Kurisu.AspNetCore.Authentication.Abstractions; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; -using Kurisu.AspNetCore.Utils.Extensions; -using Mapster; namespace Dlhis.Canteen.Order.Services; public abstract class BaseOrderService { - private readonly ICanteenSettingService _canteenSettingService; private readonly IDbContext _dbContext; private readonly ICurrentUser _currentUser; private readonly ILogger _logger; @@ -21,7 +17,6 @@ public abstract class BaseOrderService ICurrentUser currentUser, ILogger logger) { - _canteenSettingService = canteenSettingService; _dbContext = dbContext; _currentUser = currentUser; _logger = logger; @@ -32,37 +27,4 @@ public abstract class BaseOrderService protected IDbContext DbContext => _dbContext; protected ICurrentUser CurrentUser => _currentUser; - - /// - /// 获取参数配置 - /// - /// - /// - /// - /// - /// - /// - protected async Task GetSettingAsync(string userNo, string tenantId, CanteenSettingItemEnumType item, T defaultValue = default) - { - _settings ??= await _canteenSettingService.GetUserSettingAsync(userNo, tenantId); - - if (_settings.TryGetValue(item, out var v)) - { - try - { - if (int.TryParse(v, out var n)) - { - return n.Adapt(); - } - - return v.Adapt(); - } - catch (Exception) - { - return defaultValue; - } - } - - return defaultValue; - } } \ No newline at end of file diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs index e149c83b..a39482e4 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs @@ -19,6 +19,7 @@ namespace Dlhis.Canteen.Order.Services.Implements; public class BookingOrderService : BaseOrderService, IBookingOrderService { + private readonly ICanteenSettingService _canteenSettingService; private readonly IDishesMenuApi _dishesMenuApi; private readonly IBusinessPlacePermissionsApi _businessPlacePermissionsApi; @@ -28,6 +29,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService ICurrentUser currentUser, ILogger logger) : base(canteenSettingService, dbContext, currentUser, logger) { + _canteenSettingService = canteenSettingService; _dishesMenuApi = dishesMenuApi; _businessPlacePermissionsApi = businessPlacePermissionsApi; } @@ -41,7 +43,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService //预定时间 var now = DateTime.Now; - var bookingDeadline = await GetSettingAsync(gainfo.No, businessPlace.TenantId, CanteenSettingItemEnumType.BookingDeadline) ?? new TimeOnly(20, 30, 00); + var bookingDeadline = await _canteenSettingService.GetSettingAsync(CanteenSettingItemEnumType.BookingDeadline, businessPlace.TenantId, gainfo.No, new TimeOnly(20, 30, 00)); var dealLine = DateTime.Today.Add(bookingDeadline.ToTimeSpan()); (now >= dealLine).ThrowIfTrue("超出订餐时间"); @@ -72,7 +74,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService No = SnowFlakeHelper.Instance.NextId().ToString(), IsOffline = false, - IsCostCrossTenant = await GetSettingAsync(gainfo.No, businessPlace.TenantId, CanteenSettingItemEnumType.AllowCrossTenant), + IsCostCrossTenant = await _canteenSettingService.GetSettingAsync(CanteenSettingItemEnumType.AllowCrossTenant, businessPlace.TenantId, gainfo.No), OriginTenantId = gainfo.Factory, //人员可能跨基地消费 @@ -212,7 +214,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService var order = await DbContext.Queryable().Where(x => x.No == request.No).FirstAsync(); order.ThrowIfNull("订单不存在"); - var bookingDeadline = await GetSettingAsync(order.No, order.TenantId, CanteenSettingItemEnumType.BookingDeadline) ?? new TimeOnly(20, 30, 00); + var bookingDeadline = await _canteenSettingService.GetSettingAsync(CanteenSettingItemEnumType.BookingDeadline, order.TenantId, order.No, new TimeOnly(20, 30, 00)); var dealLine = DateTime.Today.Add(bookingDeadline.ToTimeSpan()); (DateTime.Now >= dealLine).ThrowIfTrue("不在订单取消允许范围内,不可操作"); diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs index 59585d0b..6b45062f 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs @@ -22,6 +22,7 @@ namespace Dlhis.Canteen.Order.Services.Implements; public class OrderService : BaseOrderService, IOrderService { + private readonly ICanteenSettingService _canteenSettingService; private readonly IServiceProvider _serviceProvider; private readonly IHttpContextAccessor _httpContextAccessor; @@ -33,6 +34,7 @@ public class OrderService : BaseOrderService, IOrderService ILogger logger) : base(canteenSettingService, dbContext, currentUser, logger) { + _canteenSettingService = canteenSettingService; _serviceProvider = serviceProvider; _httpContextAccessor = httpContextAccessor; } @@ -198,7 +200,7 @@ public class OrderService : BaseOrderService, IOrderService /// private async Task GetCostDateAsync(BusinessShiftMealRelationshipEntity shift, DateTime costDateTime) { - var switchTime = await GetSettingAsync(string.Empty, shift.TenantId, CanteenSettingItemEnumType.BusinessSwitchTime); + var switchTime = await _canteenSettingService.GetSettingAsync(CanteenSettingItemEnumType.BusinessSwitchTime, shift.TenantId, string.Empty); var costDate = costDateTime.Date; @@ -243,7 +245,7 @@ public class OrderService : BaseOrderService, IOrderService .ToListAsync(); //一天消费金额 - var dayCostMax = await GetSettingAsync(order.UserNo, order.TenantId, CanteenSettingItemEnumType.DayCostMax); + var dayCostMax = await _canteenSettingService.GetSettingAsync(CanteenSettingItemEnumType.DayCostMax, order.TenantId, order.UserNo); if (dayCostMax != default) { //消费记录一定会有营业点代码!.Value是安全用法 @@ -255,7 +257,7 @@ public class OrderService : BaseOrderService, IOrderService } //一次消费金额 - var onceCostMax = await GetSettingAsync(order.UserNo, order.TenantId, CanteenSettingItemEnumType.OnceCostMax); + var onceCostMax = await _canteenSettingService.GetSettingAsync(CanteenSettingItemEnumType.OnceCostMax, order.TenantId, order.UserNo); if (onceCostMax != default) { (Math.Abs(order.Amount) > onceCostMax).ThrowIfTrue($"单次消费金额不能超出{onceCostMax}元"); @@ -264,7 +266,7 @@ public class OrderService : BaseOrderService, IOrderService //超市消费限额 if (order.BusinessPlaceCode.HasValue && supermarketCodes.Contains(order.BusinessPlaceCode.Value)) { - var dayMarketCostMax = await GetSettingAsync(order.UserNo, order.TenantId, CanteenSettingItemEnumType.DayMarketCostMax); + var dayMarketCostMax = await _canteenSettingService.GetSettingAsync(CanteenSettingItemEnumType.DayMarketCostMax, order.TenantId, order.UserNo); if (dayMarketCostMax != default) { var cost = todayAllBalanceRecords.Where(x => x.BusinessPlaceCode.HasValue) @@ -276,7 +278,7 @@ public class OrderService : BaseOrderService, IOrderService } //重复餐次消费 - var allowRepeatInOneShift = await GetSettingAsync(order.UserNo, order.TenantId, CanteenSettingItemEnumType.AllowRepeatInOneShift, true); + var allowRepeatInOneShift = await _canteenSettingService.GetSettingAsync(CanteenSettingItemEnumType.AllowRepeatInOneShift, order.TenantId, order.UserNo, true); if (!allowRepeatInOneShift) { var costCount = todayAllBalanceRecords.Count(x => x.ShiftType == order.ShiftType); diff --git a/Src/Dlhis.Canteen/Setting/Services/ICanteenSettingService.cs b/Src/Dlhis.Canteen/Setting/Services/ICanteenSettingService.cs index ecd8d69d..9872d134 100644 --- a/Src/Dlhis.Canteen/Setting/Services/ICanteenSettingService.cs +++ b/Src/Dlhis.Canteen/Setting/Services/ICanteenSettingService.cs @@ -7,10 +7,25 @@ namespace Dlhis.Canteen.Setting.Services; public interface ICanteenSettingService : IScopeDependency { + /// + /// 获取配置分页数据 + /// + /// + /// Task> GetPageAsync(CanteenSettingPageRequest request); + /// + /// 保存配置 + /// + /// + /// Task SaveSettingAsync(CanteenSettingSaveRequest request); + /// + /// 设置配置启用开关 + /// + /// + /// Task SetEnableAsync(CanteenSettingSetEnableRequest request); /// @@ -21,7 +36,13 @@ public interface ICanteenSettingService : IScopeDependency /// Task> GetUserSettingAsync(string userNo, string tenantId); - + /// + /// 获取营业点切换时间 + /// + /// + /// Task GetBusinessSwitchTimeAsync(string tenantId); -} + + Task GetSettingAsync(CanteenSettingItemEnumType item, string factory, string userNo , T defaultValue = default); +} \ No newline at end of file diff --git a/Src/Dlhis.Canteen/Setting/Services/Implements/CanteenSettingService.cs b/Src/Dlhis.Canteen/Setting/Services/Implements/CanteenSettingService.cs index 39300afe..41f3791b 100644 --- a/Src/Dlhis.Canteen/Setting/Services/Implements/CanteenSettingService.cs +++ b/Src/Dlhis.Canteen/Setting/Services/Implements/CanteenSettingService.cs @@ -114,6 +114,31 @@ public class CanteenSettingService : ICanteenSettingService } } + /// + public async Task GetSettingAsync(CanteenSettingItemEnumType item, string factory, string userNo, T defaultValue = default) + { + var settings = await GetUserSettingAsync(userNo, factory); + + if (settings.TryGetValue(item, out var v)) + { + try + { + if (int.TryParse(v, out var n)) + { + return n.Adapt(); + } + + return v.Adapt(); + } + catch (Exception) + { + return defaultValue; + } + } + + return defaultValue; + } + //*********************************************** help methods ***************************************************// private async Task CheckDuplicateSettingAsync(CanteenSettingSaveRequest request)