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>
public Guid BusinessPlaceCode { get; set; }
public Guid? BusinessPlaceCode { get; set; }
public string BusinessPlaceName { get; set; }
/// <summary>

View File

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

View File

@@ -64,8 +64,8 @@ public class BalanceRecordEntity : SugarBaseEntity, ITenantId
/// <summary>
/// 营业点
/// </summary>
[SugarColumn(ColumnDescription = "营业点")]
public Guid BusinessPlaceCode { get; set; }
[SugarColumn(ColumnDescription = "营业点" , IsNullable = true)]
public Guid? BusinessPlaceCode { get; set; }
/// <summary>
/// 餐次