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(); } //写入记录