diff --git a/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs b/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs
index 8451b885..2d9152be 100644
--- a/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs
+++ b/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs
@@ -4,6 +4,7 @@ using Dlhis.Canteen.Order.Response;
using Dlhis.Canteen.Order.Services;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop;
using Kurisu.Core.DataAccess.Dto;
+using Kurisu.Core.Result;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
@@ -33,7 +34,7 @@ public class OrdersController : ControllerBase
///
[HttpPost]
[IgnoreTenant]
- public async Task AddAsync(OrderAddRequest request)
+ public async Task> AddAsync(OrderAddRequest request)
{
return await _orderService.AddAsync(request);
}
@@ -45,7 +46,7 @@ public class OrdersController : ControllerBase
///
[HttpPost("device")]
[IgnoreTenant]
- public async Task DeviceConsume(OrderAddRequest request)
+ public async Task> DeviceConsume(OrderAddRequest request)
{
return await _orderService.AddAsync(request);
}
diff --git a/Src/Dlhis.Canteen/Order/Services/IOrderService.cs b/Src/Dlhis.Canteen/Order/Services/IOrderService.cs
index 029f951d..2af40c66 100644
--- a/Src/Dlhis.Canteen/Order/Services/IOrderService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/IOrderService.cs
@@ -1,20 +1,21 @@
using Dlhis.Canteen.Order.Request;
using Dlhis.Canteen.Order.Response;
using Kurisu.Core.DataAccess.Dto;
+using Kurisu.Core.Result;
namespace Dlhis.Canteen.Order.Services;
public interface IOrderService : IScopeDependency
{
- Task AddAsync(OrderAddRequest request);
+ Task> AddAsync(OrderAddRequest request);
///
/// 设备消费
///
///
///
- Task DeviceConsume(OrderAddRequest request);
+ Task> DeviceConsume(OrderAddRequest request);
Task> GetOrdersAggregationAsync(PageDto page);
}
diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs
index 9e412456..0f22848b 100644
--- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs
@@ -569,13 +569,11 @@ public class BalanceService : IBalanceService
//金额 +
canteenUser.Balance += Math.Abs(balanceRecord.Amount);
- var effect = await _dbContext.Updateable()
+ await _dbContext.Updateable()
.SetColumns(x => x.Balance == canteenUser.Balance)
.SetColumns(x => x.Version == x.Version + 1)
.Where(x => x.UserNo == balanceRecord.UserNo && x.Version == canteenUser.Version)
- .ExecuteCommandAsync();
-
- if (effect <= 0) throw new VersionExceptions("更新版本冲突");
+ .ExecuteCommandThrowVersionAsync();
await _dbContext.UpdateAsync(balanceRecord);
diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
index f8f80e15..2084043f 100644
--- a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
@@ -17,6 +17,7 @@ using SqlSugar;
using Dlhis.Canteen.Order.Response;
using Dlhis.Canteen.Dishes;
using Dlhis.Canteen.Order.Request;
+using Kurisu.Core.Result;
namespace Dlhis.Canteen.Order.Services.Implements;
@@ -31,12 +32,12 @@ public class OrderService : BaseOrderService, IOrderService
{
}
- public async Task DeviceConsume(OrderAddRequest request)
+ public async Task> DeviceConsume(OrderAddRequest request)
{
return await AddAsync(request);
}
- public async Task AddAsync(OrderAddRequest request)
+ public async Task> AddAsync(OrderAddRequest request)
{
//尝试匹配userId
_ = long.TryParse(request.UserUniqueNo, out var userId);
@@ -50,52 +51,48 @@ public class OrderService : BaseOrderService, IOrderService
//消费权限控制
await CheckPermissionAsync(gainfo.No, request.DeviceUniqueNo);
- if (!await DbContext.Queryable()
- .Where(x => x.UserNo == gainfo.No)
- .AnyAsync())
+ var message = string.Empty;
+ try
{
- await DbContext.InsertAsync(new GainfoMealEntity
+ (await DbContext.Queryable().Where(x => x.UserNo == gainfo.No).AnyAsync()).ThrowIfFalse("余额不足,无法消费");
+
+ //消费
+ if (request.Type == BalanceRecordTypeEnumType.Out)
{
- UserNo = gainfo.No,
- UserCode = gainfo.Code,
- Balance = 0,
- BalanceOfRecharge = 0,
- BalanceOfSubsidies = 0,
- TenantId = gainfo.Factory,
- Version = 0,
-
- CreatedBy = 1,
- CreateTime = DateTime.Now,
- ModifiedBy = 1,
- ModifiedTime = DateTime.Now,
- });
+ await ConsumeAsync(request.Adapt(), gainfo);
+ }
+ //充值
+ else
+ {
+ await RechargeAsync(request.Adapt(), gainfo);
+ }
}
-
- //消费
- if (request.Type == BalanceRecordTypeEnumType.Out)
+ catch (Exception ex)
{
- await ConsumeAsync(request.Adapt(), gainfo);
- }
- //充值
- else
- {
- await RechargeAsync(request.Adapt(), gainfo);
+ message = ex.Message;
}
//获取人员余额
- return await DbContext.Queryable()
- .LeftJoin((ga, department) => ga.DepartmentNo == department.No)
- .LeftJoin((ga, department, mealUser) => ga.No == mealUser.UserNo)
- .Where(ga => ga.Id == gainfo.Id)
- .Select((ga, department, mealUser) => new OrderResultResponse
- {
- UserCode = ga.Code,
- UserName = ga.Name,
- DepartmentNo = ga.DepartmentNo,
- DepartmentName = department.Name,
- CurrentBalance = mealUser.Balance
- })
- .SingleAsync();
+ var data = await DbContext.Queryable()
+ .LeftJoin((ga, department) => ga.DepartmentNo == department.No)
+ .LeftJoin((ga, department, mealUser) => ga.No == mealUser.UserNo)
+ .Where(ga => ga.Id == gainfo.Id)
+ .Select((ga, department, mealUser) => new OrderResultResponse
+ {
+ UserCode = ga.Code,
+ UserName = ga.Name,
+ DepartmentNo = ga.DepartmentNo,
+ DepartmentName = department.Name,
+ CurrentBalance = mealUser.Balance
+ })
+ .SingleAsync();
+
+ return new DefaultApiResult
+ {
+ Code = message.IsPresent() ? ApiStateCode.Error : ApiStateCode.Success,
+ Data = data,
+ Msg = message,
+ };
}
///
@@ -366,7 +363,7 @@ public class OrderService : BaseOrderService, IOrderService
var balanceRecords = await DbContext.Queryable()
.Where(x => x.UserNo == order.UserNo)
- .Where(x=>x.Type == BalanceRecordTypeEnumType.Out)
+ .Where(x => x.Type == BalanceRecordTypeEnumType.Out)
.Where(x => x.CreateTime >= beginOfDay && x.CreateTime <= endOfDay) //今天消费记录
.ToListAsync();
@@ -435,13 +432,11 @@ public class OrderService : BaseOrderService, IOrderService
//金额+-
canteenUser.Balance += order.Amount;
- var effect = await DbContext.Updateable()
+ await DbContext.Updateable()
.SetColumns(x => x.Balance == canteenUser.Balance)
.SetColumns(x => x.Version == x.Version + 1)
.Where(x => x.UserNo == order.UserNo && x.Version == canteenUser.Version)
- .ExecuteCommandAsync();
-
- if (effect <= 0) throw new VersionExceptions("更新版本冲突");
+ .ExecuteCommandThrowVersionAsync();
//写入记录
var balanceRecord = order.Adapt();
@@ -471,21 +466,19 @@ public class OrderService : BaseOrderService, IOrderService
{
if (!allowNoBalance)
{
- var canteenUser = await DbContext.Queryable().Where(x => x.UserNo == order.UserNo).FirstAsync();
+ var gainfoMeal = await DbContext.Queryable().Where(x => x.UserNo == order.UserNo).FirstAsync();
//金额+-
- canteenUser.Balance += order.Amount;
- if (canteenUser.Balance < 0)
+ gainfoMeal.Balance += order.Amount;
+ if (gainfoMeal.Balance < 0)
{
throw new UserFriendlyException("余额不足,无法消费");
}
- var effect = await DbContext.Updateable()
- .SetColumns(x => x.Balance == canteenUser.Balance)
+ await DbContext.Updateable()
+ .SetColumns(x => x.Balance == gainfoMeal.Balance)
.SetColumns(x => x.Version == x.Version + 1)
- .Where(x => x.UserNo == order.UserNo && x.Version == canteenUser.Version)//必须与查询时的version一致
- .ExecuteCommandAsync();
-
- if (effect <= 0) throw new VersionExceptions("更新版本冲突");
+ .Where(x => x.UserNo == order.UserNo && x.Version == gainfoMeal.Version)//必须与查询时的version一致
+ .ExecuteCommandThrowVersionAsync();
}
//写入记录