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);
+ }
+
///
/// 获取离线设备