diff --git a/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs b/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs
index 2d9152be..658096dd 100644
--- a/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs
+++ b/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs
@@ -39,6 +39,13 @@ public class OrdersController : ControllerBase
return await _orderService.AddAsync(request);
}
+ [IgnoreTenant]
+ [HttpPost("ReCalcOffline")]
+ public async Task ReCalcOfflineAsync(ReCalcOfflineRequest request)
+ {
+ await _orderService.ReCalcOfflineAsync(request);
+ }
+
///
/// 设备发起订单
///
diff --git a/Src/Dlhis.Canteen/Order/Request/ReCalcOfflineRequest.cs b/Src/Dlhis.Canteen/Order/Request/ReCalcOfflineRequest.cs
new file mode 100644
index 00000000..00d6e10b
--- /dev/null
+++ b/Src/Dlhis.Canteen/Order/Request/ReCalcOfflineRequest.cs
@@ -0,0 +1,10 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace Dlhis.Canteen.Order.Request
+{
+ public class ReCalcOfflineRequest
+ {
+ [Required]
+ public string UserCode { get; set; }
+ }
+}
diff --git a/Src/Dlhis.Canteen/Order/Services/IOrderService.cs b/Src/Dlhis.Canteen/Order/Services/IOrderService.cs
index 2af40c66..a1aa9446 100644
--- a/Src/Dlhis.Canteen/Order/Services/IOrderService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/IOrderService.cs
@@ -10,6 +10,9 @@ public interface IOrderService : IScopeDependency
Task> AddAsync(OrderAddRequest request);
+
+ Task ReCalcOfflineAsync(ReCalcOfflineRequest request);
+
///
/// 设备消费
///
diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
index dc05e08b..4f7f9c08 100644
--- a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
@@ -675,5 +675,63 @@ public class OrderService : BaseOrderService, IOrderService
}, 5);
}
+ public async Task ReCalcOfflineAsync(ReCalcOfflineRequest request)
+ {
+ var gainfo = await DbContext.Queryable().Where(x => x.Code == request.UserCode).FirstAsync();
+ var nos = await DbContext.Queryable().Where(x => x.UserCode == request.UserCode).Select(x => x.No).ToListAsync();
+ var orders = await DbContext.Queryable().Where(x => x.IsOffline)
+ .Where(x => nos.Contains(x.No))
+ .Where(x => x.UserCode == request.UserCode)
+ .ToListAsync();
+
+
+ var gainfoMeal = await DbContext.Queryable().Where(x => x.UserNo == gainfo.No).FirstAsync();
+ if (gainfoMeal == null)
+ {
+ gainfoMeal = new GainfoMealEntity
+ {
+ Balance = 0,
+ BalanceOfRecharge = 0,
+ BalanceOfSubsidies = 0,
+ Version = 0,
+ TenantId = gainfo.Factory,
+ UserNo = gainfo.No,
+ UserCode = gainfo.Code,
+
+ CreatedBy = 1,
+ CreateTime = DateTime.Now,
+ ModifiedBy = 1,
+ ModifiedTime = DateTime.Now,
+ };
+
+ await DbContext.InsertAsync(gainfoMeal);
+ }
+
+ var allowNoBalance = await GetSettingAsync(CanteenSettingItemEnumType.AllowNoBalance);
+ foreach (var order in orders)
+ {
+ await CommonHelper.RetryAsync(async () =>
+ {
+ if (!allowNoBalance)
+ {
+ var gainfoMeal = await DbContext.Queryable().Where(x => x.UserNo == order.UserNo).FirstAsync();
+ //金额+-
+ gainfoMeal.Balance += order.Amount;
+
+ await DbContext.Updateable()
+ .SetColumns(x => x.Balance == gainfoMeal.Balance)
+ .SetColumns(x => x.Version == x.Version + 1)
+ .Where(x => x.UserNo == order.UserNo && x.Version == gainfoMeal.Version)//必须与查询时的version一致
+ .ExecuteCommandThrowVersionAsync();
+ }
+
+ //写入记录
+ var balanceRecord = order.Adapt();
+ balanceRecord.Id = 0;
+ await DbContext.InsertAsync(balanceRecord);
+
+ }, 5);
+ }
+ }
}