fix 优化参数值数据
This commit is contained in:
@@ -155,7 +155,7 @@ public class OrderService : IOrderService
|
||||
DeviceInfo = request.DeviceUniqueNo,
|
||||
|
||||
No = "O" + SnowFlakeHelper.Instance.NextId(),
|
||||
SubsidiesFromMonth = DateTime.Now.ToString("yyyyMM"),
|
||||
SubsidiesFromMonth = request.CostDateTime.ToString("yyyyMM"),
|
||||
IsOffline = request.IsOffline,
|
||||
IsCostCrossTenant = GetSetting<bool>(settings, CanteenSettingItemEnumType.AllowCrossTenant),
|
||||
|
||||
@@ -173,24 +173,25 @@ public class OrderService : IOrderService
|
||||
};
|
||||
|
||||
var orderId = await _dbContext.InsertReturnIdentityAsync(order);
|
||||
//await _dbContext.Client.Ado.BeginTranAsync();
|
||||
try
|
||||
{
|
||||
await GenerateConsumeRecordAsync(orderId, settings, shifts, request.CostDateTime);
|
||||
order.OrderStatus = CanteenOrderStatusEnumType.Successful;
|
||||
|
||||
//await _dbContext.Client.Ado.CommitTranAsync();
|
||||
}
|
||||
catch (Exception)
|
||||
catch (Exception ex)
|
||||
{
|
||||
order.OrderStatus = CanteenOrderStatusEnumType.Failure;
|
||||
//await _dbContext.Client.Ado.RollbackTranAsync();
|
||||
await _dbContext.Updateable<CanteenOrderEntity>()
|
||||
.SetColumns(x => x.OrderStatus == CanteenOrderStatusEnumType.Failure)
|
||||
.SetColumns(x => x.Result == ex.Message)
|
||||
.Where(x => x.Id == orderId)
|
||||
.ExecuteCommandAsync();
|
||||
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
await _dbContext.UpdateAsync(order);
|
||||
}
|
||||
|
||||
await _dbContext.Updateable<CanteenOrderEntity>()
|
||||
.SetColumns(x => x.OrderStatus == CanteenOrderStatusEnumType.Successful)
|
||||
.Where(x => x.Id == orderId)
|
||||
.ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -206,14 +207,15 @@ public class OrderService : IOrderService
|
||||
var order = new CanteenOrderEntity
|
||||
{
|
||||
RequestJson = request.ToJson(),
|
||||
IsOffline = false,
|
||||
ThirdNo = request.ThirdNo,
|
||||
Type = BalanceRecordTypeEnumType.Out,
|
||||
Type = BalanceRecordTypeEnumType.In,
|
||||
Name = gainfo.Name,
|
||||
Source = request.Source,
|
||||
UserNo = gainfo.No,
|
||||
UserCode = gainfo.Code,
|
||||
Amount = request.Amount,
|
||||
BusinessPlaceCode = Guid.Empty,
|
||||
BusinessPlaceCode = null,
|
||||
BusinessShiftCode = null,
|
||||
CostDate = DateTime.Now.Date,
|
||||
CostId = gainfo.CostId,
|
||||
@@ -221,8 +223,7 @@ public class OrderService : IOrderService
|
||||
DeviceInfo = string.Empty,
|
||||
|
||||
No = "O" + SnowFlakeHelper.Instance.NextId(),
|
||||
SubsidiesFromMonth = DateTime.Now.ToString("yyyyMM"),
|
||||
IsOffline = false,
|
||||
SubsidiesFromMonth = request.CostDateTime.ToString("yyyyMM"),
|
||||
IsCostCrossTenant = GetSetting<bool>(settings, CanteenSettingItemEnumType.AllowCrossTenant),
|
||||
|
||||
OriginTenantId = gainfo.Werks,//人员可能跨基地消费
|
||||
@@ -241,17 +242,22 @@ public class OrderService : IOrderService
|
||||
try
|
||||
{
|
||||
await GenerateRechargeRecordAsync(orderId);
|
||||
order.OrderStatus = CanteenOrderStatusEnumType.Successful;
|
||||
}
|
||||
catch (Exception)
|
||||
catch (Exception ex)
|
||||
{
|
||||
order.OrderStatus = CanteenOrderStatusEnumType.Failure;
|
||||
await _dbContext.Updateable<CanteenOrderEntity>()
|
||||
.SetColumns(x => x.OrderStatus == CanteenOrderStatusEnumType.Failure)
|
||||
.SetColumns(x => x.Result == ex.Message)
|
||||
.Where(x => x.Id == orderId)
|
||||
.ExecuteCommandAsync();
|
||||
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
await _dbContext.UpdateAsync(order);
|
||||
}
|
||||
|
||||
await _dbContext.Updateable<CanteenOrderEntity>()
|
||||
.SetColumns(x => x.OrderStatus == CanteenOrderStatusEnumType.Successful)
|
||||
.Where(x => x.Id == orderId)
|
||||
.ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
|
||||
@@ -343,8 +349,11 @@ public class OrderService : IOrderService
|
||||
var dayMarketCostMax = GetSetting<decimal>(settings, CanteenSettingItemEnumType.DayMarketCostMax);
|
||||
if (dayMarketCostMax != default)
|
||||
{
|
||||
var businessPlaceCodes = await _dbContext.Queryable<CanteenBusinessPlaceEntity>().Where(x => x.Catalog == CanteenBusinessPlaceCatalogEnumType.Supermarket).Select(x => x.Code).ToListAsync();
|
||||
var cost = balanceRecords.Where(x => businessPlaceCodes.Contains(x.BusinessPlaceCode)).Sum(x => x.Amount);
|
||||
var businessPlaceCodes = await _dbContext.Queryable<CanteenBusinessPlaceEntity>()
|
||||
.Where(x => x.Catalog == CanteenBusinessPlaceCatalogEnumType.Supermarket)
|
||||
.Select(x => x.Code).ToListAsync();
|
||||
|
||||
var cost = balanceRecords.Where(x => businessPlaceCodes.Contains(x.BusinessPlaceCode.Value)).Sum(x => x.Amount);
|
||||
if (cost + Math.Abs(order.Amount) > dayMarketCostMax)
|
||||
{
|
||||
throw new UserFriendlyException($"超出当天超市消费限制({dayMarketCostMax}),无法消费");
|
||||
@@ -403,7 +412,7 @@ public class OrderService : IOrderService
|
||||
var effect = await _dbContext.Updateable<CanteenUserEntity>()
|
||||
.SetColumns(x => x.Balance == canteenUser.Balance)
|
||||
.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 == canteenUser.Version)
|
||||
.ExecuteCommandAsync();
|
||||
|
||||
if (effect <= 0) throw new VersionExceptions("更新版本冲突");
|
||||
@@ -425,10 +434,7 @@ public class OrderService : IOrderService
|
||||
/// <returns></returns>
|
||||
/// <exception cref="UserFriendlyException"></exception>
|
||||
/// <exception cref="VersionExceptions"></exception>
|
||||
private async Task GenerateConsumeRecordAsync(long orderId,
|
||||
Dictionary<CanteenSettingItemEnumType, string> settings,
|
||||
List<CanteenBusinessShiftEntity> shifts,
|
||||
DateTime costDateTime)
|
||||
private async Task GenerateConsumeRecordAsync(long orderId, Dictionary<CanteenSettingItemEnumType, string> settings, List<CanteenBusinessShiftEntity> shifts, DateTime costDateTime)
|
||||
{
|
||||
var order = await _dbContext.Queryable<CanteenOrderEntity>().Where(x => x.Id == orderId).FirstAsync();
|
||||
//校验
|
||||
@@ -455,6 +461,7 @@ public class OrderService : IOrderService
|
||||
//写入记录
|
||||
var balanceRecord = order.Adapt<BalanceRecordEntity>();
|
||||
await _dbContext.InsertAsync(balanceRecord);
|
||||
|
||||
}, 5);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user