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