fix 包装异常结果

This commit is contained in:
2024-04-07 17:43:04 +08:00
parent e7c0b929fb
commit beb8f3e5a1
4 changed files with 56 additions and 63 deletions

View File

@@ -4,6 +4,7 @@ using Dlhis.Canteen.Order.Response;
using Dlhis.Canteen.Order.Services; using Dlhis.Canteen.Order.Services;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop; using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop;
using Kurisu.Core.DataAccess.Dto; using Kurisu.Core.DataAccess.Dto;
using Kurisu.Core.Result;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@@ -33,7 +34,7 @@ public class OrdersController : ControllerBase
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
[IgnoreTenant] [IgnoreTenant]
public async Task<OrderResultResponse> AddAsync(OrderAddRequest request) public async Task<DefaultApiResult<OrderResultResponse>> AddAsync(OrderAddRequest request)
{ {
return await _orderService.AddAsync(request); return await _orderService.AddAsync(request);
} }
@@ -45,7 +46,7 @@ public class OrdersController : ControllerBase
/// <returns></returns> /// <returns></returns>
[HttpPost("device")] [HttpPost("device")]
[IgnoreTenant] [IgnoreTenant]
public async Task<OrderResultResponse> DeviceConsume(OrderAddRequest request) public async Task<DefaultApiResult<OrderResultResponse>> DeviceConsume(OrderAddRequest request)
{ {
return await _orderService.AddAsync(request); return await _orderService.AddAsync(request);
} }

View File

@@ -1,20 +1,21 @@
using Dlhis.Canteen.Order.Request; using Dlhis.Canteen.Order.Request;
using Dlhis.Canteen.Order.Response; using Dlhis.Canteen.Order.Response;
using Kurisu.Core.DataAccess.Dto; using Kurisu.Core.DataAccess.Dto;
using Kurisu.Core.Result;
namespace Dlhis.Canteen.Order.Services; namespace Dlhis.Canteen.Order.Services;
public interface IOrderService : IScopeDependency public interface IOrderService : IScopeDependency
{ {
Task<OrderResultResponse> AddAsync(OrderAddRequest request); Task<DefaultApiResult<OrderResultResponse>> AddAsync(OrderAddRequest request);
/// <summary> /// <summary>
/// 设备消费 /// 设备消费
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <returns></returns> /// <returns></returns>
Task<OrderResultResponse> DeviceConsume(OrderAddRequest request); Task<DefaultApiResult<OrderResultResponse>> DeviceConsume(OrderAddRequest request);
Task<Pagination<OrderAggregationResponse>> GetOrdersAggregationAsync(PageDto page); Task<Pagination<OrderAggregationResponse>> GetOrdersAggregationAsync(PageDto page);
} }

View File

@@ -569,13 +569,11 @@ public class BalanceService : IBalanceService
//金额 + //金额 +
canteenUser.Balance += Math.Abs(balanceRecord.Amount); canteenUser.Balance += Math.Abs(balanceRecord.Amount);
var effect = await _dbContext.Updateable<GainfoMealEntity>() await _dbContext.Updateable<GainfoMealEntity>()
.SetColumns(x => x.Balance == canteenUser.Balance) .SetColumns(x => x.Balance == canteenUser.Balance)
.SetColumns(x => x.Version == x.Version + 1) .SetColumns(x => x.Version == x.Version + 1)
.Where(x => x.UserNo == balanceRecord.UserNo && x.Version == canteenUser.Version) .Where(x => x.UserNo == balanceRecord.UserNo && x.Version == canteenUser.Version)
.ExecuteCommandAsync(); .ExecuteCommandThrowVersionAsync();
if (effect <= 0) throw new VersionExceptions("更新版本冲突");
await _dbContext.UpdateAsync(balanceRecord); await _dbContext.UpdateAsync(balanceRecord);

View File

@@ -17,6 +17,7 @@ using SqlSugar;
using Dlhis.Canteen.Order.Response; using Dlhis.Canteen.Order.Response;
using Dlhis.Canteen.Dishes; using Dlhis.Canteen.Dishes;
using Dlhis.Canteen.Order.Request; using Dlhis.Canteen.Order.Request;
using Kurisu.Core.Result;
namespace Dlhis.Canteen.Order.Services.Implements; namespace Dlhis.Canteen.Order.Services.Implements;
@@ -31,12 +32,12 @@ public class OrderService : BaseOrderService, IOrderService
{ {
} }
public async Task<OrderResultResponse> DeviceConsume(OrderAddRequest request) public async Task<DefaultApiResult<OrderResultResponse>> DeviceConsume(OrderAddRequest request)
{ {
return await AddAsync(request); return await AddAsync(request);
} }
public async Task<OrderResultResponse> AddAsync(OrderAddRequest request) public async Task<DefaultApiResult<OrderResultResponse>> AddAsync(OrderAddRequest request)
{ {
//尝试匹配userId //尝试匹配userId
_ = long.TryParse(request.UserUniqueNo, out var userId); _ = long.TryParse(request.UserUniqueNo, out var userId);
@@ -50,52 +51,48 @@ public class OrderService : BaseOrderService, IOrderService
//消费权限控制 //消费权限控制
await CheckPermissionAsync(gainfo.No, request.DeviceUniqueNo); await CheckPermissionAsync(gainfo.No, request.DeviceUniqueNo);
if (!await DbContext.Queryable<GainfoMealEntity>() var message = string.Empty;
.Where(x => x.UserNo == gainfo.No) try
.AnyAsync())
{ {
await DbContext.InsertAsync(new GainfoMealEntity (await DbContext.Queryable<GainfoMealEntity>().Where(x => x.UserNo == gainfo.No).AnyAsync()).ThrowIfFalse("余额不足,无法消费");
//消费
if (request.Type == BalanceRecordTypeEnumType.Out)
{ {
UserNo = gainfo.No, await ConsumeAsync(request.Adapt<ConsumeRequest>(), gainfo);
UserCode = gainfo.Code, }
Balance = 0, //充值
BalanceOfRecharge = 0, else
BalanceOfSubsidies = 0, {
TenantId = gainfo.Factory, await RechargeAsync(request.Adapt<RechargeRequest>(), gainfo);
Version = 0, }
CreatedBy = 1,
CreateTime = DateTime.Now,
ModifiedBy = 1,
ModifiedTime = DateTime.Now,
});
} }
catch (Exception ex)
//消费
if (request.Type == BalanceRecordTypeEnumType.Out)
{ {
await ConsumeAsync(request.Adapt<ConsumeRequest>(), gainfo); message = ex.Message;
}
//充值
else
{
await RechargeAsync(request.Adapt<RechargeRequest>(), gainfo);
} }
//获取人员余额 //获取人员余额
return await DbContext.Queryable<GainfoEntity>() var data = await DbContext.Queryable<GainfoEntity>()
.LeftJoin<DepartmentEntity>((ga, department) => ga.DepartmentNo == department.No) .LeftJoin<DepartmentEntity>((ga, department) => ga.DepartmentNo == department.No)
.LeftJoin<GainfoMealEntity>((ga, department, mealUser) => ga.No == mealUser.UserNo) .LeftJoin<GainfoMealEntity>((ga, department, mealUser) => ga.No == mealUser.UserNo)
.Where(ga => ga.Id == gainfo.Id) .Where(ga => ga.Id == gainfo.Id)
.Select((ga, department, mealUser) => new OrderResultResponse .Select((ga, department, mealUser) => new OrderResultResponse
{ {
UserCode = ga.Code, UserCode = ga.Code,
UserName = ga.Name, UserName = ga.Name,
DepartmentNo = ga.DepartmentNo, DepartmentNo = ga.DepartmentNo,
DepartmentName = department.Name, DepartmentName = department.Name,
CurrentBalance = mealUser.Balance CurrentBalance = mealUser.Balance
}) })
.SingleAsync(); .SingleAsync();
return new DefaultApiResult<OrderResultResponse>
{
Code = message.IsPresent() ? ApiStateCode.Error : ApiStateCode.Success,
Data = data,
Msg = message,
};
} }
/// <summary> /// <summary>
@@ -366,7 +363,7 @@ public class OrderService : BaseOrderService, IOrderService
var balanceRecords = await DbContext.Queryable<BalanceRecordEntity>() var balanceRecords = await DbContext.Queryable<BalanceRecordEntity>()
.Where(x => x.UserNo == order.UserNo) .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) //今天消费记录 .Where(x => x.CreateTime >= beginOfDay && x.CreateTime <= endOfDay) //今天消费记录
.ToListAsync(); .ToListAsync();
@@ -435,13 +432,11 @@ public class OrderService : BaseOrderService, IOrderService
//金额+- //金额+-
canteenUser.Balance += order.Amount; canteenUser.Balance += order.Amount;
var effect = await DbContext.Updateable<GainfoMealEntity>() await DbContext.Updateable<GainfoMealEntity>()
.SetColumns(x => x.Balance == canteenUser.Balance) .SetColumns(x => x.Balance == canteenUser.Balance)
.SetColumns(x => x.Version == x.Version + 1) .SetColumns(x => x.Version == x.Version + 1)
.Where(x => x.UserNo == order.UserNo && x.Version == canteenUser.Version) .Where(x => x.UserNo == order.UserNo && x.Version == canteenUser.Version)
.ExecuteCommandAsync(); .ExecuteCommandThrowVersionAsync();
if (effect <= 0) throw new VersionExceptions("更新版本冲突");
//写入记录 //写入记录
var balanceRecord = order.Adapt<BalanceRecordEntity>(); var balanceRecord = order.Adapt<BalanceRecordEntity>();
@@ -471,21 +466,19 @@ public class OrderService : BaseOrderService, IOrderService
{ {
if (!allowNoBalance) if (!allowNoBalance)
{ {
var canteenUser = await DbContext.Queryable<GainfoMealEntity>().Where(x => x.UserNo == order.UserNo).FirstAsync(); var gainfoMeal = await DbContext.Queryable<GainfoMealEntity>().Where(x => x.UserNo == order.UserNo).FirstAsync();
//金额+- //金额+-
canteenUser.Balance += order.Amount; gainfoMeal.Balance += order.Amount;
if (canteenUser.Balance < 0) if (gainfoMeal.Balance < 0)
{ {
throw new UserFriendlyException("余额不足,无法消费"); throw new UserFriendlyException("余额不足,无法消费");
} }
var effect = await DbContext.Updateable<GainfoMealEntity>() await DbContext.Updateable<GainfoMealEntity>()
.SetColumns(x => x.Balance == canteenUser.Balance) .SetColumns(x => x.Balance == gainfoMeal.Balance)
.SetColumns(x => x.Version == x.Version + 1) .SetColumns(x => x.Version == x.Version + 1)
.Where(x => x.UserNo == order.UserNo && x.Version == canteenUser.Version)//必须与查询时的version一致 .Where(x => x.UserNo == order.UserNo && x.Version == gainfoMeal.Version)//必须与查询时的version一致
.ExecuteCommandAsync(); .ExecuteCommandThrowVersionAsync();
if (effect <= 0) throw new VersionExceptions("更新版本冲突");
} }
//写入记录 //写入记录