fix 参数配置方法修改

This commit is contained in:
2024-10-24 16:51:17 +08:00
parent 7ce43ee45a
commit 8cf195eb77
5 changed files with 60 additions and 48 deletions

View File

@@ -1,16 +1,12 @@
using Dlhis.Canteen.Setting.Services; using Dlhis.Canteen.Setting.Services;
using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Canteen.Enums; using Dlhis.Entity.Canteen.Enums;
using Kurisu.AspNetCore.Authentication.Abstractions; using Kurisu.AspNetCore.Authentication.Abstractions;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
using Kurisu.AspNetCore.Utils.Extensions;
using Mapster;
namespace Dlhis.Canteen.Order.Services; namespace Dlhis.Canteen.Order.Services;
public abstract class BaseOrderService public abstract class BaseOrderService
{ {
private readonly ICanteenSettingService _canteenSettingService;
private readonly IDbContext _dbContext; private readonly IDbContext _dbContext;
private readonly ICurrentUser _currentUser; private readonly ICurrentUser _currentUser;
private readonly ILogger _logger; private readonly ILogger _logger;
@@ -21,7 +17,6 @@ public abstract class BaseOrderService
ICurrentUser currentUser, ICurrentUser currentUser,
ILogger logger) ILogger logger)
{ {
_canteenSettingService = canteenSettingService;
_dbContext = dbContext; _dbContext = dbContext;
_currentUser = currentUser; _currentUser = currentUser;
_logger = logger; _logger = logger;
@@ -32,37 +27,4 @@ public abstract class BaseOrderService
protected IDbContext DbContext => _dbContext; protected IDbContext DbContext => _dbContext;
protected ICurrentUser CurrentUser => _currentUser; protected ICurrentUser CurrentUser => _currentUser;
/// <summary>
/// 获取参数配置
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="userNo"></param>
/// <param name="tenantId"></param>
/// <param name="item"></param>
/// <param name="defaultValue"></param>
/// <returns></returns>
protected async Task<T> GetSettingAsync<T>(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<T>();
}
return v.Adapt<T>();
}
catch (Exception)
{
return defaultValue;
}
}
return defaultValue;
}
} }

View File

@@ -19,6 +19,7 @@ namespace Dlhis.Canteen.Order.Services.Implements;
public class BookingOrderService : BaseOrderService, IBookingOrderService public class BookingOrderService : BaseOrderService, IBookingOrderService
{ {
private readonly ICanteenSettingService _canteenSettingService;
private readonly IDishesMenuApi _dishesMenuApi; private readonly IDishesMenuApi _dishesMenuApi;
private readonly IBusinessPlacePermissionsApi _businessPlacePermissionsApi; private readonly IBusinessPlacePermissionsApi _businessPlacePermissionsApi;
@@ -28,6 +29,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
ICurrentUser currentUser, ILogger<BookingOrderService> logger) ICurrentUser currentUser, ILogger<BookingOrderService> logger)
: base(canteenSettingService, dbContext, currentUser, logger) : base(canteenSettingService, dbContext, currentUser, logger)
{ {
_canteenSettingService = canteenSettingService;
_dishesMenuApi = dishesMenuApi; _dishesMenuApi = dishesMenuApi;
_businessPlacePermissionsApi = businessPlacePermissionsApi; _businessPlacePermissionsApi = businessPlacePermissionsApi;
} }
@@ -41,7 +43,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
//预定时间 //预定时间
var now = DateTime.Now; var now = DateTime.Now;
var bookingDeadline = await GetSettingAsync<TimeOnly?>(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()); var dealLine = DateTime.Today.Add(bookingDeadline.ToTimeSpan());
(now >= dealLine).ThrowIfTrue("超出订餐时间"); (now >= dealLine).ThrowIfTrue("超出订餐时间");
@@ -72,7 +74,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
No = SnowFlakeHelper.Instance.NextId().ToString(), No = SnowFlakeHelper.Instance.NextId().ToString(),
IsOffline = false, IsOffline = false,
IsCostCrossTenant = await GetSettingAsync<bool>(gainfo.No, businessPlace.TenantId, CanteenSettingItemEnumType.AllowCrossTenant), IsCostCrossTenant = await _canteenSettingService.GetSettingAsync<bool>(CanteenSettingItemEnumType.AllowCrossTenant, businessPlace.TenantId, gainfo.No),
OriginTenantId = gainfo.Factory, //人员可能跨基地消费 OriginTenantId = gainfo.Factory, //人员可能跨基地消费
@@ -212,7 +214,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
var order = await DbContext.Queryable<CanteenOrderEntity>().Where(x => x.No == request.No).FirstAsync(); var order = await DbContext.Queryable<CanteenOrderEntity>().Where(x => x.No == request.No).FirstAsync();
order.ThrowIfNull("订单不存在"); order.ThrowIfNull("订单不存在");
var bookingDeadline = await GetSettingAsync<TimeOnly?>(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()); var dealLine = DateTime.Today.Add(bookingDeadline.ToTimeSpan());
(DateTime.Now >= dealLine).ThrowIfTrue("不在订单取消允许范围内,不可操作"); (DateTime.Now >= dealLine).ThrowIfTrue("不在订单取消允许范围内,不可操作");

View File

@@ -22,6 +22,7 @@ namespace Dlhis.Canteen.Order.Services.Implements;
public class OrderService : BaseOrderService, IOrderService public class OrderService : BaseOrderService, IOrderService
{ {
private readonly ICanteenSettingService _canteenSettingService;
private readonly IServiceProvider _serviceProvider; private readonly IServiceProvider _serviceProvider;
private readonly IHttpContextAccessor _httpContextAccessor; private readonly IHttpContextAccessor _httpContextAccessor;
@@ -33,6 +34,7 @@ public class OrderService : BaseOrderService, IOrderService
ILogger<OrderService> logger) ILogger<OrderService> logger)
: base(canteenSettingService, dbContext, currentUser, logger) : base(canteenSettingService, dbContext, currentUser, logger)
{ {
_canteenSettingService = canteenSettingService;
_serviceProvider = serviceProvider; _serviceProvider = serviceProvider;
_httpContextAccessor = httpContextAccessor; _httpContextAccessor = httpContextAccessor;
} }
@@ -198,7 +200,7 @@ public class OrderService : BaseOrderService, IOrderService
/// <returns></returns> /// <returns></returns>
private async Task<DateTime> GetCostDateAsync(BusinessShiftMealRelationshipEntity shift, DateTime costDateTime) private async Task<DateTime> GetCostDateAsync(BusinessShiftMealRelationshipEntity shift, DateTime costDateTime)
{ {
var switchTime = await GetSettingAsync<TimeOnly?>(string.Empty, shift.TenantId, CanteenSettingItemEnumType.BusinessSwitchTime); var switchTime = await _canteenSettingService.GetSettingAsync<TimeOnly?>(CanteenSettingItemEnumType.BusinessSwitchTime, shift.TenantId, string.Empty);
var costDate = costDateTime.Date; var costDate = costDateTime.Date;
@@ -243,7 +245,7 @@ public class OrderService : BaseOrderService, IOrderService
.ToListAsync(); .ToListAsync();
//一天消费金额 //一天消费金额
var dayCostMax = await GetSettingAsync<decimal>(order.UserNo, order.TenantId, CanteenSettingItemEnumType.DayCostMax); var dayCostMax = await _canteenSettingService.GetSettingAsync<decimal>(CanteenSettingItemEnumType.DayCostMax, order.TenantId, order.UserNo);
if (dayCostMax != default) if (dayCostMax != default)
{ {
//消费记录一定会有营业点代码!.Value是安全用法 //消费记录一定会有营业点代码!.Value是安全用法
@@ -255,7 +257,7 @@ public class OrderService : BaseOrderService, IOrderService
} }
//一次消费金额 //一次消费金额
var onceCostMax = await GetSettingAsync<decimal>(order.UserNo, order.TenantId, CanteenSettingItemEnumType.OnceCostMax); var onceCostMax = await _canteenSettingService.GetSettingAsync<decimal>(CanteenSettingItemEnumType.OnceCostMax, order.TenantId, order.UserNo);
if (onceCostMax != default) if (onceCostMax != default)
{ {
(Math.Abs(order.Amount) > onceCostMax).ThrowIfTrue($"单次消费金额不能超出{onceCostMax}元"); (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)) if (order.BusinessPlaceCode.HasValue && supermarketCodes.Contains(order.BusinessPlaceCode.Value))
{ {
var dayMarketCostMax = await GetSettingAsync<decimal>(order.UserNo, order.TenantId, CanteenSettingItemEnumType.DayMarketCostMax); var dayMarketCostMax = await _canteenSettingService.GetSettingAsync<decimal>(CanteenSettingItemEnumType.DayMarketCostMax, order.TenantId, order.UserNo);
if (dayMarketCostMax != default) if (dayMarketCostMax != default)
{ {
var cost = todayAllBalanceRecords.Where(x => x.BusinessPlaceCode.HasValue) 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) if (!allowRepeatInOneShift)
{ {
var costCount = todayAllBalanceRecords.Count(x => x.ShiftType == order.ShiftType); var costCount = todayAllBalanceRecords.Count(x => x.ShiftType == order.ShiftType);

View File

@@ -7,10 +7,25 @@ namespace Dlhis.Canteen.Setting.Services;
public interface ICanteenSettingService : IScopeDependency public interface ICanteenSettingService : IScopeDependency
{ {
/// <summary>
/// 获取配置分页数据
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
Task<Pagination<CanteenSettingResponse>> GetPageAsync(CanteenSettingPageRequest request); Task<Pagination<CanteenSettingResponse>> GetPageAsync(CanteenSettingPageRequest request);
/// <summary>
/// 保存配置
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
Task SaveSettingAsync(CanteenSettingSaveRequest request); Task SaveSettingAsync(CanteenSettingSaveRequest request);
/// <summary>
/// 设置配置启用开关
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
Task SetEnableAsync(CanteenSettingSetEnableRequest request); Task SetEnableAsync(CanteenSettingSetEnableRequest request);
/// <summary> /// <summary>
@@ -21,7 +36,13 @@ public interface ICanteenSettingService : IScopeDependency
/// <returns></returns> /// <returns></returns>
Task<Dictionary<CanteenSettingItemEnumType, string>> GetUserSettingAsync(string userNo, string tenantId); Task<Dictionary<CanteenSettingItemEnumType, string>> GetUserSettingAsync(string userNo, string tenantId);
/// <summary>
/// 获取营业点切换时间
/// </summary>
/// <param name="tenantId"></param>
/// <returns></returns>
Task<TimeOnly?> GetBusinessSwitchTimeAsync(string tenantId); Task<TimeOnly?> GetBusinessSwitchTimeAsync(string tenantId);
}
Task<T> GetSettingAsync<T>(CanteenSettingItemEnumType item, string factory, string userNo , T defaultValue = default);
}

View File

@@ -114,6 +114,31 @@ public class CanteenSettingService : ICanteenSettingService
} }
} }
/// <inheritdoc />
public async Task<T> GetSettingAsync<T>(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<T>();
}
return v.Adapt<T>();
}
catch (Exception)
{
return defaultValue;
}
}
return defaultValue;
}
//*********************************************** help methods ***************************************************// //*********************************************** help methods ***************************************************//
private async Task CheckDuplicateSettingAsync(CanteenSettingSaveRequest request) private async Task CheckDuplicateSettingAsync(CanteenSettingSaveRequest request)