diff --git a/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs b/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs
index 4f684d96..07734136 100644
--- a/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs
+++ b/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs
@@ -56,7 +56,7 @@ public class BalanceRecordResponse
///
/// 营业点
///
- public Guid BusinessPlaceCode { get; set; }
+ public Guid? BusinessPlaceCode { get; set; }
public string BusinessPlaceName { get; set; }
///
diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
index 44aaa029..c9d921f8 100644
--- a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
@@ -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(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()
+ .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()
+ .SetColumns(x => x.OrderStatus == CanteenOrderStatusEnumType.Successful)
+ .Where(x => x.Id == orderId)
+ .ExecuteCommandAsync();
}
///
@@ -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(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()
+ .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()
+ .SetColumns(x => x.OrderStatus == CanteenOrderStatusEnumType.Successful)
+ .Where(x => x.Id == orderId)
+ .ExecuteCommandAsync();
}
@@ -343,8 +349,11 @@ public class OrderService : IOrderService
var dayMarketCostMax = GetSetting(settings, CanteenSettingItemEnumType.DayMarketCostMax);
if (dayMarketCostMax != default)
{
- var businessPlaceCodes = await _dbContext.Queryable().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()
+ .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()
.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
///
///
///
- private async Task GenerateConsumeRecordAsync(long orderId,
- Dictionary settings,
- List shifts,
- DateTime costDateTime)
+ private async Task GenerateConsumeRecordAsync(long orderId, Dictionary settings, List shifts, DateTime costDateTime)
{
var order = await _dbContext.Queryable().Where(x => x.Id == orderId).FirstAsync();
//校验
@@ -455,6 +461,7 @@ public class OrderService : IOrderService
//写入记录
var balanceRecord = order.Adapt();
await _dbContext.InsertAsync(balanceRecord);
+
}, 5);
}
}
diff --git a/Src/Dlhis.Entity/Canteen/Entities/BalanceRecordEntity.cs b/Src/Dlhis.Entity/Canteen/Entities/BalanceRecordEntity.cs
index a34328e8..25aeaf29 100644
--- a/Src/Dlhis.Entity/Canteen/Entities/BalanceRecordEntity.cs
+++ b/Src/Dlhis.Entity/Canteen/Entities/BalanceRecordEntity.cs
@@ -64,8 +64,8 @@ public class BalanceRecordEntity : SugarBaseEntity, ITenantId
///
/// 营业点
///
- [SugarColumn(ColumnDescription = "营业点")]
- public Guid BusinessPlaceCode { get; set; }
+ [SugarColumn(ColumnDescription = "营业点" , IsNullable = true)]
+ public Guid? BusinessPlaceCode { get; set; }
///
/// 餐次