diff --git a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs index 91fb7c2c..bada78bd 100644 --- a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs +++ b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs @@ -1,4 +1,5 @@ using System.ComponentModel.DataAnnotations; +using System.Data; using Dlhis.Canteen.Order.Request; using Dlhis.Canteen.Order.Response; using Dlhis.Canteen.Order.Services; @@ -29,7 +30,7 @@ public class BalancesController : ControllerBase /// /// /// - [Authorize()] + [Authorize] [HttpGet] public async Task> GetPageAsync([FromQuery] BalanceRecordPageRequest request) { @@ -174,4 +175,18 @@ public class BalancesController : ControllerBase { await _balanceService.ManuallyImportBalanceAndReCalcAsync(requests); } + + + /// + /// 重算 + /// + /// + [Authorize(Roles = "admin")] + [HttpPost("manuallyRecalc")] + [IgnoreTenant] + [Transactional(IsolationLevel.ReadCommitted)] + public async Task ReCalcAsync(BalanceReCalcRequest request) + { + await _balanceService.ReCalcAsync(request); + } } \ No newline at end of file diff --git a/Src/Dlhis.Canteen/Order/Request/BalanceReCalcRequest.cs b/Src/Dlhis.Canteen/Order/Request/BalanceReCalcRequest.cs new file mode 100644 index 00000000..111b9a09 --- /dev/null +++ b/Src/Dlhis.Canteen/Order/Request/BalanceReCalcRequest.cs @@ -0,0 +1,9 @@ +using System.ComponentModel.DataAnnotations; + +namespace Dlhis.Canteen.Order.Request; + +public class BalanceReCalcRequest +{ + [Required] + public string UserCode { get; set; } +} \ No newline at end of file diff --git a/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs b/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs index f7466ac5..f89f6c86 100644 --- a/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs +++ b/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs @@ -36,4 +36,6 @@ public interface IBalanceService : IScopeDependency Task> HainingDownloadAsync(string userCode); Task ManuallyImportBalanceAndReCalcAsync(List requests); + + Task ReCalcAsync(BalanceReCalcRequest request); } \ No newline at end of file diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs index b65d67a7..088844f3 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs @@ -686,6 +686,45 @@ public class BalanceService : IBalanceService } } + + public async Task ReCalcAsync(BalanceReCalcRequest request) + { + await CommonHelper.RetryAsync(async () => + { + var gainfo = await _dbContext.Queryable().Where(x => x.Code == request.UserCode).SingleAsync(); + gainfo.ThrowIfNull("档案不存在"); + + var gainfoMeal = await _dbContext.Queryable().Where(x => x.UserCode == gainfo.Code).FirstAsync(); + if (gainfoMeal == null) + { + gainfoMeal = new GainfoMealEntity + { + UserNo = gainfo.No, + UserCode = gainfo.Code, + Balance = 0, + BalanceOfRecharge = 0, + BalanceOfSubsidies = 0, + Version = 0 + }; + + await _dbContext.InsertAsync(gainfoMeal); + } + + //重新核算 + var balance = await _dbContext.Queryable() + .Where(x => x.UserCode == gainfo.Code) + .Where(x => x.Status == BalanceRecordStatusEnumType.Valid) + .SumAsync(x => x.Amount); + + await _dbContext.Updateable() + .SetColumns(x => x.Version == x.Version + 1) + .SetColumns(x => x.Balance == balance) + .SetColumns(x => x.ModifiedTime == DateTime.Now) + .Where(x => x.UserCode == gainfoMeal.UserCode && x.Version == gainfoMeal.Version) + .ExecuteCommandThrowVersionAsync(); + }, 5); + } + /// /// 获取离线设备