diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs index 4c9a18e0..cc5b0c85 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs @@ -96,51 +96,34 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService (menuDetail.Number < 0).ThrowIfTrue($"{menuDetail.DishesName}剩余数量不足"); - //餐补 //todo 餐补暂不入账 + //餐补 if (request.Source == BalanceRecordSourceEnumType.LocalTenantSubsidies) { - //var mealInfo = await DbContext.Queryable().Where(x => x.UserNo == order.UserNo).FirstAsync(); - //if (mealInfo == null) - //{ - // await DbContext.InsertAsync(new GainfoMealEntity - // { - // Balance = 0, - // BalanceOfRecharge = 0, - // BalanceOfSubsidies = 0, - // UserCode = gainfo.Code, - // UserNo = gainfo.No, - // Version = 0, - // }); + var mealInfo = await DbContext.Queryable().Where(x => x.UserNo == order.UserNo).FirstAsync(); + mealInfo.ThrowIfNull("余额不足,无法消费"); - // (mealInfo == null).ThrowIfTrue("余额不足,无法消费"); - //} - ////金额+- - //mealInfo.Balance += order.Amount; - //(mealInfo.Balance < 0).ThrowIfTrue("余额不足,无法消费"); + //金额+- + mealInfo.Balance += order.Amount; + (mealInfo.Balance < 0).ThrowIfTrue("余额不足,无法消费"); - //var effectMeal = await DbContext.Updateable() - // .SetColumns(x => x.Balance == mealInfo.Balance) - // .SetColumns(x => x.Version == x.Version + 1) - // .Where(x => x.UserNo == order.UserNo && x.Version == mealInfo.Version)//必须与查询时的version一致 - // .ExecuteCommandAsync(); - - //if (effectMeal <= 0) throw new VersionExceptions("更新版本冲突"); + await DbContext.Updateable() + .SetColumns(x => x.Balance == mealInfo.Balance) + .SetColumns(x => x.Version == x.Version + 1) + .Where(x => x.UserNo == order.UserNo && x.Version == mealInfo.Version)//必须与查询时的version一致 + .ExecuteCommandThrowVersionAsync(); } - - var effectMenu = await DbContext.Updateable() - .SetColumns(x => x.Number == menuDetail.Number) - .SetColumns(x => x.Version == x.Version + 1) - .SetColumns(x => x.ModifiedTime == now) - .Where(x => x.StartDate <= menuDetail.Date && menuDetail.Date <= x.EndDate - && x.ShiftType == request.ShiftType - && x.BusinessPlaceCode == request.BusinessPlaceCode - && x.DishesCode == request.DishesCode - && x.Version == menuDetail.Version - ) - .ExecuteCommandAsync(); - - if (effectMenu <= 0) throw new VersionExceptions("更新版本冲突"); + await DbContext.Updateable() + .SetColumns(x => x.Number == menuDetail.Number) + .SetColumns(x => x.Version == x.Version + 1) + .SetColumns(x => x.ModifiedTime == now) + .Where(x => x.StartDate <= menuDetail.Date && menuDetail.Date <= x.EndDate + && x.ShiftType == request.ShiftType + && x.BusinessPlaceCode == request.BusinessPlaceCode + && x.DishesCode == request.DishesCode + && x.Version == menuDetail.Version + ) + .ExecuteCommandThrowVersionAsync(); //写入记录 var balanceRecord = order.Adapt(); @@ -265,26 +248,20 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService .Where(x => x.No == request.No) .ExecuteCommandAsync(); - if (order.Source != BalanceRecordSourceEnumType.Cash) + if (order.Source == BalanceRecordSourceEnumType.LocalTenantSubsidies) { - //todo 餐补暂不入账 - //await ContinueUpdateAsync(async () => - //{ - // var mealInfo = await DbContext.Queryable().Where(x => x.UserNo == order.UserNo).FirstAsync(); - // var setBalance = mealInfo.Balance + Math.Abs(order.Amount); - // var effect = await DbContext.Updateable() - // .SetColumns(x => x.Balance == setBalance) - // .SetColumns(x => x.ModifiedTime == now) - // .SetColumns(x => x.ModifiedBy == userId) - // .Where(x => x.Id == mealInfo.Id && x.Version == mealInfo.Version) - // .ExecuteCommandAsync(); + await CommonHelper.RetryAsync(async () => + { + var mealInfo = await DbContext.Queryable().Where(x => x.UserNo == order.UserNo).FirstAsync(); + var setBalance = mealInfo.Balance + Math.Abs(order.Amount); + await DbContext.Updateable() + .SetColumns(x => x.Balance == setBalance) + .SetColumns(x => x.ModifiedTime == now) + .SetColumns(x => x.ModifiedBy == userId) + .Where(x => x.Id == mealInfo.Id && x.Version == mealInfo.Version) + .ExecuteCommandThrowVersionAsync(); - // if (effect <= 0) - // { - // throw new VersionExceptions("取消订单失败!"); - // } - - //}, 5); + }, 5); } }