fix 配置需要tenantId

This commit is contained in:
2024-04-09 18:02:45 +08:00
parent 8e72b0afc9
commit 25d33c36eb
6 changed files with 35 additions and 45 deletions

View File

@@ -55,10 +55,11 @@ public abstract class BaseOrderService
/// 获取参数配置
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="tenantId"></param>
/// <param name="item"></param>
/// <param name="defaultValue"></param>
/// <returns></returns>
protected async Task<T> GetSettingAsync<T>(CanteenSettingItemEnumType item, T defaultValue = default)
protected async Task<T> GetSettingAsync<T>(string tenantId, CanteenSettingItemEnumType item, T defaultValue = default)
{
if (_settings == null)
{
@@ -69,7 +70,7 @@ public abstract class BaseOrderService
{
gainfo = await _dbContext.Queryable<GainfoEntity>().Where(x => x.Code == jinkoCode).FirstAsync();
}
_settings = await _canteenSettingService.GetUserSettingAsync(gainfo.No);
_settings = await _canteenSettingService.GetUserSettingAsync(gainfo.No, tenantId);
}

View File

@@ -41,7 +41,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
//预定时间
var now = DateTime.Now;
var bookingDeadline = await GetSettingAsync<TimeOnly?>(CanteenSettingItemEnumType.BookingDeadline) ?? new TimeOnly(20, 30, 00);
var bookingDeadline = await GetSettingAsync<TimeOnly?>(businessPlace.TenantId, CanteenSettingItemEnumType.BookingDeadline) ?? new TimeOnly(20, 30, 00);
var dealLine = DateTime.Today.Add(bookingDeadline.ToTimeSpan());
(now >= dealLine).ThrowIfTrue("超出订餐时间");
@@ -73,7 +73,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
No = SnowFlakeHelper.Instance.NextId().ToString(),
SubsidiesFromMonth = now.ToString("yyyyMM"),
IsOffline = false,
IsCostCrossTenant = await GetSettingAsync<bool>(CanteenSettingItemEnumType.AllowCrossTenant),
IsCostCrossTenant = await GetSettingAsync<bool>(businessPlace.TenantId, CanteenSettingItemEnumType.AllowCrossTenant),
OriginTenantId = gainfo.Factory,//人员可能跨基地消费
@@ -211,7 +211,10 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
public async Task UserCancelOrderAsync(OrderCancelRequest request)
{
var bookingDeadline = await GetSettingAsync<TimeOnly?>(CanteenSettingItemEnumType.BookingDeadline) ?? new TimeOnly(20, 30, 00);
var order = await DbContext.Queryable<CanteenOrderEntity>().Where(x => x.No == request.No).FirstAsync();
order.ThrowIfNull("订单不存在");
var bookingDeadline = await GetSettingAsync<TimeOnly?>(order.TenantId, CanteenSettingItemEnumType.BookingDeadline) ?? new TimeOnly(20, 30, 00);
var dealLine = DateTime.Today.Add(bookingDeadline.ToTimeSpan());
(DateTime.Now >= dealLine).ThrowIfTrue("不在订单取消允许范围内,不可操作");

View File

@@ -169,7 +169,7 @@ public class OrderService : BaseOrderService, IOrderService
}.IsPresent1(request.CostDateTime));
var switchTime = await GetSettingAsync<TimeOnly?>(CanteenSettingItemEnumType.BusinessSwitchTime);
var switchTime = await GetSettingAsync<TimeOnly?>(businessPlaceInfo.TenantId, CanteenSettingItemEnumType.BusinessSwitchTime);
var shiftTimePeriod = new TimePeriod()
{
@@ -217,7 +217,7 @@ public class OrderService : BaseOrderService, IOrderService
No = SnowFlakeHelper.Instance.NextId().ToString(),
SubsidiesFromMonth = request.CostDateTime.ToString("yyyyMM"),
IsOffline = request.IsOffline,
IsCostCrossTenant = await GetSettingAsync<bool>(CanteenSettingItemEnumType.AllowCrossTenant),
IsCostCrossTenant = await GetSettingAsync<bool>(businessPlaceInfo.TenantId, CanteenSettingItemEnumType.AllowCrossTenant),
OriginTenantId = gainfo.Factory,//人员可能跨基地消费
@@ -235,7 +235,7 @@ public class OrderService : BaseOrderService, IOrderService
var orderId = await DbContext.InsertReturnIdentityAsync(order);
var allowNoBalance = await GetSettingAsync<bool>(CanteenSettingItemEnumType.AllowNoBalance);
var allowNoBalance = await GetSettingAsync<bool>(businessPlaceInfo.TenantId, CanteenSettingItemEnumType.AllowNoBalance);
await CommonHelper.RetryAsync(async () =>
{
@@ -313,7 +313,7 @@ public class OrderService : BaseOrderService, IOrderService
}.IsPresent1(request.CostDateTime));
var switchTime = await GetSettingAsync<TimeOnly?>(CanteenSettingItemEnumType.BusinessSwitchTime);
var switchTime = await GetSettingAsync<TimeOnly?>(businessPlaceInfo.TenantId, CanteenSettingItemEnumType.BusinessSwitchTime);
var shiftTimePeriod = new TimePeriod()
{
@@ -361,7 +361,7 @@ public class OrderService : BaseOrderService, IOrderService
No = SnowFlakeHelper.Instance.NextId().ToString(),
SubsidiesFromMonth = request.CostDateTime.ToString("yyyyMM"),
IsOffline = request.IsOffline,
IsCostCrossTenant = await GetSettingAsync<bool>(CanteenSettingItemEnumType.AllowCrossTenant),
IsCostCrossTenant = await GetSettingAsync<bool>(businessPlaceInfo.TenantId, CanteenSettingItemEnumType.AllowCrossTenant),
OriginTenantId = gainfo.Factory,//人员可能跨基地消费
@@ -428,7 +428,7 @@ public class OrderService : BaseOrderService, IOrderService
No = SnowFlakeHelper.Instance.NextId().ToString(),
SubsidiesFromMonth = request.CostDateTime.ToString("yyyyMM"),
IsCostCrossTenant = await GetSettingAsync<bool>(CanteenSettingItemEnumType.AllowCrossTenant),
IsCostCrossTenant = false,
OriginTenantId = gainfo.Factory,//人员可能跨基地消费
@@ -560,7 +560,7 @@ public class OrderService : BaseOrderService, IOrderService
.ToListAsync();
//一天消费金额
var dayCostMax = await GetSettingAsync<decimal>(CanteenSettingItemEnumType.DayCostMax);
var dayCostMax = await GetSettingAsync<decimal>(order.TenantId, CanteenSettingItemEnumType.DayCostMax);
if (dayCostMax != default)
{
//must has business place code, use .Value is safe
@@ -571,14 +571,14 @@ public class OrderService : BaseOrderService, IOrderService
}
//一次消费金额
var onceCostMax = await GetSettingAsync<decimal>(CanteenSettingItemEnumType.OnceCostMax);
var onceCostMax = await GetSettingAsync<decimal>(order.TenantId, CanteenSettingItemEnumType.OnceCostMax);
if (onceCostMax != default)
{
(Math.Abs(order.Amount) > onceCostMax).ThrowIfTrue($"一次消费金额不能超出{onceCostMax}");
(Math.Abs(order.Amount) > onceCostMax).ThrowIfTrue($"单次消费金额不能超出{onceCostMax}元");
}
//超时消费限额
var dayMarketCostMax = await GetSettingAsync<decimal>(CanteenSettingItemEnumType.DayMarketCostMax);
var dayMarketCostMax = await GetSettingAsync<decimal>(order.TenantId, CanteenSettingItemEnumType.DayMarketCostMax);
if (dayMarketCostMax != default)
{
//current businessplace is supermarket
@@ -593,7 +593,7 @@ public class OrderService : BaseOrderService, IOrderService
}
//重复餐次消费
var allowRepeatInOneShift = await GetSettingAsync(CanteenSettingItemEnumType.AllowRepeatInOneShift, true);
var allowRepeatInOneShift = await GetSettingAsync(order.TenantId, CanteenSettingItemEnumType.AllowRepeatInOneShift, true);
if (!allowRepeatInOneShift)
{
var costCount = todayAllBalanceRecords.Where(x => x.ShiftType == order.ShiftType).Count();
@@ -647,7 +647,7 @@ public class OrderService : BaseOrderService, IOrderService
//校验
await Verify(shifts, costDateTime, order);
var allowNoBalance = await GetSettingAsync<bool>(CanteenSettingItemEnumType.AllowNoBalance);
var allowNoBalance = await GetSettingAsync<bool>(order.TenantId, CanteenSettingItemEnumType.AllowNoBalance);
await CommonHelper.RetryAsync(async () =>
{
@@ -709,24 +709,19 @@ public class OrderService : BaseOrderService, IOrderService
await DbContext.InsertAsync(gainfoMeal);
}
var allowNoBalance = await GetSettingAsync<bool>(CanteenSettingItemEnumType.AllowNoBalance);
foreach (var order in orders)
{
await CommonHelper.RetryAsync(async () =>
{
if (!allowNoBalance)
{
var gainfoMeal = await DbContext.Queryable<GainfoMealEntity>().Where(x => x.UserNo == order.UserNo).FirstAsync();
//金额+-
gainfoMeal.Balance += order.Amount;
await DbContext.Updateable<GainfoMealEntity>()
.SetColumns(x => x.Balance == gainfoMeal.Balance)
.SetColumns(x => x.Version == x.Version + 1)
.Where(x => x.UserNo == order.UserNo && x.Version == gainfoMeal.Version)//必须与查询时的version一致
.ExecuteCommandThrowVersionAsync();
}
var gainfoMeal = await DbContext.Queryable<GainfoMealEntity>().Where(x => x.UserNo == order.UserNo).FirstAsync();
//金额+-
gainfoMeal.Balance += order.Amount;
await DbContext.Updateable<GainfoMealEntity>()
.SetColumns(x => x.Balance == gainfoMeal.Balance)
.SetColumns(x => x.Version == x.Version + 1)
.Where(x => x.UserNo == order.UserNo && x.Version == gainfoMeal.Version)//必须与查询时的version一致
.ExecuteCommandThrowVersionAsync();
//写入记录
var balanceRecord = order.Adapt<BalanceRecordEntity>();
balanceRecord.Id = 0;

View File

@@ -55,16 +55,4 @@ public class SettingController : ControllerBase
{
await _settingService.SetEnableAsync(request);
}
/// <summary>
/// 获取用户配置
/// </summary>
/// <param name="userNo"></param>
/// <returns></returns>
[HttpGet("user")]
public async Task<Dictionary<CanteenSettingItemEnumType, string>> GetUserSettingAsync(string userNo)
{
return await _settingService.GetUserSettingAsync(userNo);
}
}

View File

@@ -17,8 +17,9 @@ public interface ICanteenSettingService : IScopeDependency
/// 获取人员的就餐配置信息
/// </summary>
/// <param name="userNo">就餐人员档案号</param>
/// <param name="tenantId"></param>
/// <returns></returns>
Task<Dictionary<CanteenSettingItemEnumType, string>> GetUserSettingAsync(string userNo);
Task<Dictionary<CanteenSettingItemEnumType, string>> GetUserSettingAsync(string userNo, string tenantId);
}

View File

@@ -82,11 +82,13 @@ public class CanteenSettingService : ICanteenSettingService
}
public async Task<Dictionary<CanteenSettingItemEnumType, string>> GetUserSettingAsync(string userNo)
public async Task<Dictionary<CanteenSettingItemEnumType, string>> GetUserSettingAsync(string userNo, string tenantId)
{
var settings = await _context.Queryable<CanteenSettingEntity>()
.Where(x => x.Enable)
.Where(x => (x.UniqueType == CanteenSettingUnqiueEnumType.Person && x.UniqueValue == userNo)
.Where(x => x.TenantId == tenantId)
.Where(x =>
(x.UniqueType == CanteenSettingUnqiueEnumType.Person && x.UniqueValue == userNo)
|| x.UniqueType == CanteenSettingUnqiueEnumType.Tenant)
.ToListAsync();