fix 优化参数值数据

This commit is contained in:
2024-01-12 17:02:22 +08:00
parent cb2562c8b8
commit 583e63707b
3 changed files with 40 additions and 33 deletions

View File

@@ -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>

View File

@@ -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);
} }
} }

View File

@@ -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>
/// 餐次 /// 餐次