From 4969717c928eebe646b506e9e73bd3e1b60aa2f2 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Wed, 10 Apr 2024 18:03:53 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E5=A2=9E=E5=8A=A0=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/Implements/BalanceService.cs | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) 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); - }