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

@@ -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<OrderResultResponse> DeviceConsume(OrderAddRequest request)
public async Task<DefaultApiResult<OrderResultResponse>> DeviceConsume(OrderAddRequest request)
{
return await AddAsync(request);
}
public async Task<OrderResultResponse> AddAsync(OrderAddRequest request)
public async Task<DefaultApiResult<OrderResultResponse>> 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<GainfoMealEntity>()
.Where(x => x.UserNo == gainfo.No)
.AnyAsync())
var message = string.Empty;
try
{
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,
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<ConsumeRequest>(), gainfo);
}
//充值
else
{
await RechargeAsync(request.Adapt<RechargeRequest>(), gainfo);
}
}
//消费
if (request.Type == BalanceRecordTypeEnumType.Out)
catch (Exception ex)
{
await ConsumeAsync(request.Adapt<ConsumeRequest>(), gainfo);
}
//充值
else
{
await RechargeAsync(request.Adapt<RechargeRequest>(), gainfo);
message = ex.Message;
}
//获取人员余额
return await DbContext.Queryable<GainfoEntity>()
.LeftJoin<DepartmentEntity>((ga, department) => ga.DepartmentNo == department.No)
.LeftJoin<GainfoMealEntity>((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<GainfoEntity>()
.LeftJoin<DepartmentEntity>((ga, department) => ga.DepartmentNo == department.No)
.LeftJoin<GainfoMealEntity>((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<OrderResultResponse>
{
Code = message.IsPresent() ? ApiStateCode.Error : ApiStateCode.Success,
Data = data,
Msg = message,
};
}
/// <summary>
@@ -366,7 +363,7 @@ public class OrderService : BaseOrderService, IOrderService
var balanceRecords = await DbContext.Queryable<BalanceRecordEntity>()
.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<GainfoMealEntity>()
await DbContext.Updateable<GainfoMealEntity>()
.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<BalanceRecordEntity>();
@@ -471,21 +466,19 @@ public class OrderService : BaseOrderService, IOrderService
{
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;
if (canteenUser.Balance < 0)
gainfoMeal.Balance += order.Amount;
if (gainfoMeal.Balance < 0)
{
throw new UserFriendlyException("余额不足,无法消费");
}
var effect = await DbContext.Updateable<GainfoMealEntity>()
.SetColumns(x => x.Balance == canteenUser.Balance)
await DbContext.Updateable<GainfoMealEntity>()
.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();
}
//写入记录