diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BaseOrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BaseOrderService.cs index c081c53c..b92f47de 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BaseOrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BaseOrderService.cs @@ -55,10 +55,11 @@ public abstract class BaseOrderService /// 获取参数配置 /// /// + /// /// /// /// - protected async Task GetSettingAsync(CanteenSettingItemEnumType item, T defaultValue = default) + protected async Task GetSettingAsync(string tenantId, CanteenSettingItemEnumType item, T defaultValue = default) { if (_settings == null) { @@ -69,7 +70,7 @@ public abstract class BaseOrderService { gainfo = await _dbContext.Queryable().Where(x => x.Code == jinkoCode).FirstAsync(); } - _settings = await _canteenSettingService.GetUserSettingAsync(gainfo.No); + _settings = await _canteenSettingService.GetUserSettingAsync(gainfo.No, tenantId); } diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs index cc5b0c85..e1d6ed97 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs @@ -41,7 +41,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService //预定时间 var now = DateTime.Now; - var bookingDeadline = await GetSettingAsync(CanteenSettingItemEnumType.BookingDeadline) ?? new TimeOnly(20, 30, 00); + var bookingDeadline = await GetSettingAsync(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(CanteenSettingItemEnumType.AllowCrossTenant), + IsCostCrossTenant = await GetSettingAsync(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(CanteenSettingItemEnumType.BookingDeadline) ?? new TimeOnly(20, 30, 00); + var order = await DbContext.Queryable().Where(x => x.No == request.No).FirstAsync(); + order.ThrowIfNull("订单不存在"); + + var bookingDeadline = await GetSettingAsync(order.TenantId, CanteenSettingItemEnumType.BookingDeadline) ?? 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 416d510a..47addce2 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs @@ -169,7 +169,7 @@ public class OrderService : BaseOrderService, IOrderService }.IsPresent1(request.CostDateTime)); - var switchTime = await GetSettingAsync(CanteenSettingItemEnumType.BusinessSwitchTime); + var switchTime = await GetSettingAsync(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(CanteenSettingItemEnumType.AllowCrossTenant), + IsCostCrossTenant = await GetSettingAsync(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(CanteenSettingItemEnumType.AllowNoBalance); + var allowNoBalance = await GetSettingAsync(businessPlaceInfo.TenantId, CanteenSettingItemEnumType.AllowNoBalance); await CommonHelper.RetryAsync(async () => { @@ -313,7 +313,7 @@ public class OrderService : BaseOrderService, IOrderService }.IsPresent1(request.CostDateTime)); - var switchTime = await GetSettingAsync(CanteenSettingItemEnumType.BusinessSwitchTime); + var switchTime = await GetSettingAsync(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(CanteenSettingItemEnumType.AllowCrossTenant), + IsCostCrossTenant = await GetSettingAsync(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(CanteenSettingItemEnumType.AllowCrossTenant), + IsCostCrossTenant = false, OriginTenantId = gainfo.Factory,//人员可能跨基地消费 @@ -560,7 +560,7 @@ public class OrderService : BaseOrderService, IOrderService .ToListAsync(); //一天消费金额 - var dayCostMax = await GetSettingAsync(CanteenSettingItemEnumType.DayCostMax); + var dayCostMax = await GetSettingAsync(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(CanteenSettingItemEnumType.OnceCostMax); + var onceCostMax = await GetSettingAsync(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(CanteenSettingItemEnumType.DayMarketCostMax); + var dayMarketCostMax = await GetSettingAsync(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(CanteenSettingItemEnumType.AllowNoBalance); + var allowNoBalance = await GetSettingAsync(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(CanteenSettingItemEnumType.AllowNoBalance); foreach (var order in orders) { await CommonHelper.RetryAsync(async () => { - if (!allowNoBalance) - { - var gainfoMeal = await DbContext.Queryable().Where(x => x.UserNo == order.UserNo).FirstAsync(); - //金额+- - gainfoMeal.Balance += order.Amount; - - await DbContext.Updateable() - .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().Where(x => x.UserNo == order.UserNo).FirstAsync(); + //金额+- + gainfoMeal.Balance += order.Amount; + await DbContext.Updateable() + .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(); balanceRecord.Id = 0; diff --git a/Src/Dlhis.Canteen/Setting/Controllers/SettingController.cs b/Src/Dlhis.Canteen/Setting/Controllers/SettingController.cs index 1bb4bd93..b9b89d8c 100644 --- a/Src/Dlhis.Canteen/Setting/Controllers/SettingController.cs +++ b/Src/Dlhis.Canteen/Setting/Controllers/SettingController.cs @@ -55,16 +55,4 @@ public class SettingController : ControllerBase { await _settingService.SetEnableAsync(request); } - - /// - /// 获取用户配置 - /// - /// - /// - [HttpGet("user")] - public async Task> GetUserSettingAsync(string userNo) - { - return await _settingService.GetUserSettingAsync(userNo); - } - } diff --git a/Src/Dlhis.Canteen/Setting/Services/ICanteenSettingService.cs b/Src/Dlhis.Canteen/Setting/Services/ICanteenSettingService.cs index 7b2a47cf..218ea68e 100644 --- a/Src/Dlhis.Canteen/Setting/Services/ICanteenSettingService.cs +++ b/Src/Dlhis.Canteen/Setting/Services/ICanteenSettingService.cs @@ -17,8 +17,9 @@ public interface ICanteenSettingService : IScopeDependency /// 获取人员的就餐配置信息 /// /// 就餐人员档案号 + /// /// - Task> GetUserSettingAsync(string userNo); + Task> GetUserSettingAsync(string userNo, string tenantId); } diff --git a/Src/Dlhis.Canteen/Setting/Services/Implements/CanteenSettingService.cs b/Src/Dlhis.Canteen/Setting/Services/Implements/CanteenSettingService.cs index 3e06e324..206eeb40 100644 --- a/Src/Dlhis.Canteen/Setting/Services/Implements/CanteenSettingService.cs +++ b/Src/Dlhis.Canteen/Setting/Services/Implements/CanteenSettingService.cs @@ -82,11 +82,13 @@ public class CanteenSettingService : ICanteenSettingService } - public async Task> GetUserSettingAsync(string userNo) + public async Task> GetUserSettingAsync(string userNo, string tenantId) { var settings = await _context.Queryable() .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();