diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs index cc7ceab7..24578a4c 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs @@ -163,14 +163,39 @@ public class BalanceService : IBalanceService public async Task SupplementBalanceAsync(BalanceSupplementRequest request) { var balanceInfo = await _dbContext.Queryable().Where(x => x.No == request.No).SingleAsync(); - (balanceInfo.Status != BalanceRecordStatusEnumType.Valid).ThrowIfTrue("消费明细状态有误"); + balanceInfo.ThrowIfNull("明细数据不存在"); + (balanceInfo.Status != BalanceRecordStatusEnumType.Valid && balanceInfo.Type != BalanceRecordTypeEnumType.Out).ThrowIfTrue("消费明细状态有误"); balanceInfo.Status = BalanceRecordStatusEnumType.Obsolute; + balanceInfo.Remark += request.Reason; + + + var newBalanceRecord = balanceInfo.Adapt(); + newBalanceRecord.Id = 0; + newBalanceRecord.No = SnowFlakeHelper.Instance.NextId().ToString(); + newBalanceRecord.Amount = request.Amount; + newBalanceRecord.Remark = balanceInfo.No + ":" + request.Reason; + newBalanceRecord.Status = BalanceRecordStatusEnumType.Valid; + + + await _dbContext.Client.Ado.BeginTranAsync(); + try + { + await _dbContext.UpdateAsync(balanceInfo); + await _dbContext.InsertAsync(newBalanceRecord); + + await _dbContext.Client.Ado.CommitTranAsync(); + } + catch (Exception) + { + await _dbContext.Client.Ado.RollbackTranAsync(); + throw; + } await CommonHelper.RetryAsync(async () => { var gainfoMeal = await _dbContext.Queryable().Where(x => x.UserCode == balanceInfo.UserCode).SingleAsync(); - var balance = gainfoMeal.Balance + balanceInfo.Amount + request.Amount; + var balance = gainfoMeal.Balance + Math.Abs(balanceInfo.Amount) + request.Amount; await _dbContext.Updateable() .SetColumns(x => x.Balance == balance) @@ -179,17 +204,6 @@ public class BalanceService : IBalanceService .Where(x => x.UserCode == balanceInfo.UserCode && x.Version == gainfoMeal.Version) .ExecuteCommandThrowVersionAsync(); }); - - var newBalanceRecord = balanceInfo.Adapt(); - newBalanceRecord.Id = 0; - newBalanceRecord.No = SnowFlakeHelper.Instance.NextId().ToString(); - newBalanceRecord.Amount = request.Amount; - newBalanceRecord.Remark = balanceInfo.No; - newBalanceRecord.Status = BalanceRecordStatusEnumType.Valid; - - await _dbContext.UpdateAsync(balanceInfo); - await _dbContext.InsertAsync(newBalanceRecord); - }