fix 统计,消费明细

This commit is contained in:
2024-08-15 16:49:50 +08:00
parent 83a6c0e8bb
commit 173ede9222
23 changed files with 342 additions and 175 deletions

View File

@@ -410,40 +410,9 @@ public class OrderService : BaseOrderService, IOrderService
/// <returns></returns>
private async Task ConsumeAsync(ConsumeRequest request, GainfoEntity gainfo)
{
var registry = await DbContext.Queryable<DeviceRegistryEntity>().Where(x => x.DeviceUniqueNo == request.DeviceUniqueNo).SingleAsync();
registry.ThrowIfNull("设备尚未登记");
var checkData = await PreCheckAsync(request.DeviceUniqueNo, request.CostDateTime);
var device = await DbContext.Queryable<DeviceEntity>().Where(x => x.UniqueNo == request.DeviceUniqueNo).SingleAsync();
device.ThrowIfNull("设备尚未登记");
device.Enable.ThrowIfFalse("设备已被停用");
var businessPlaceInfo = await DbContext.Queryable<BusinessPlaceEntity>()
.LeftJoin<BusinessPlaceShiftRelationshipEntity>((x, sr) => x.Code == sr.PlaceCode)
.Where(x => x.Code == registry.BusinessPlaceCode)
.Select((x, sr) => new
{
x.Code,
sr.ShiftCode,
x.TenantId
})
.SingleAsync();
businessPlaceInfo.ThrowIfNull("设备尚未登记营业点");
//获取当前消费餐次
var shifts = await DbContext.Queryable<BusinessShiftMealRelationshipEntity>().Where(x => x.ShiftCode == businessPlaceInfo.ShiftCode).ToListAsync();
shifts.ThrowIfEmpty("营业点餐次尚未设置");
var shift = shifts.FirstOrDefault(x => new TimePeriod
{
Start = x.Start,
End = x.End
}.IsPresent(request.CostDateTime));
shift.ThrowIfNull("非就餐时间,无法消费");
var costDate = await GetCostDateAsync(shift, request.CostDateTime);
(request.Source == BalanceRecordSourceEnumType.QrCode && businessPlaceInfo.TenantId != gainfo.Factory).ThrowIfTrue("禁止跨厂区消费");
(request.Source == BalanceRecordSourceEnumType.QrCode && checkData.BusinessPlaceTenantId != gainfo.Factory).ThrowIfTrue("禁止跨厂区消费");
var order = new CanteenOrderEntity
{
@@ -456,30 +425,28 @@ public class OrderService : BaseOrderService, IOrderService
UserNo = gainfo.No,
UserCode = gainfo.Code,
Amount = request.Amount,
BusinessPlaceCode = businessPlaceInfo?.Code,
BusinessShiftCode = shift?.ShiftCode,
ShiftType = shift?.ShiftType,
CostDate = costDate.Date,
BusinessPlaceCode = checkData.BusinessPlaceCode,
BusinessShiftCode = checkData.BusinessShiftCode,
ShiftType = checkData.Shift.ShiftType,
CostDate = checkData.CostDate,
CostId = gainfo.CostId,
DepartmentNo = gainfo.DepartmentNo,
DeviceUniqueNo = request.DeviceUniqueNo,
No = SnowFlakeHelper.Instance.NextId().ToString(),
IsOffline = request.IsOffline,
IsCostCrossTenant = gainfo.Factory != businessPlaceInfo!.TenantId,
IsCostCrossTenant = gainfo.Factory != checkData.BusinessPlaceTenantId,
OriginTenantId = gainfo.Factory,
Werks = gainfo.Werks,
//餐别异常处理
Status = shift == null ? BalanceRecordStatusEnumType.Doubtful : BalanceRecordStatusEnumType.Valid,
Status = BalanceRecordStatusEnumType.Valid,
OrderStatus = CanteenOrderStatusEnumType.Wait,
CostDateTime = request.CostDateTime,
//标识当前消费的基地
TenantId = businessPlaceInfo.TenantId,
TenantId = checkData.BusinessPlaceTenantId
};
var orderId = await DbContext.InsertReturnIdentityAsync(order);
@@ -714,7 +681,7 @@ public class OrderService : BaseOrderService, IOrderService
.Where(x => x.No == no && x.IdNo == idNo).SingleAsync();
(nowDate >= current.Start && nowDate <= current.End).ThrowIfFalse("餐券已过期");
var time = DateTimeOffset.FromUnixTimeMilliseconds(Convert.ToInt64(ts.Reverse().Join(string.Empty))).ToLocalTime().DateTime;
(time.AddMinutes(60) >= DateTime.Now).ThrowIfFalse("二维码已过期");
(time.AddMinutes(60) >= DateTime.Now).ThrowIfFalse("餐券二维码已过期");
var eMealVoucher = await DbContext.Queryable<EMealVoucherEntity>().Where(x => x.No == no).SingleAsync();