public TPageResult <TblTicketViewModel> GetList(TblTicketQueryModel model) { var result = new TPageResult <TblTicketViewModel>(); if (model.PlayTime.Date < DateTime.Now.Date) { return(result.FailureResult(null)); } DateTime playTime = model.PlayTime.Date; int total = 0; var ticketList = _ticketTypeRepository.db.Queryable <Tbl_EnterpriseUserTicket, Tbl_Ticket>((a, b) => new object[] { JoinType.Left, a.TicketId == b.TicketId }). Where((a, b) => a.EnterpriseUserId == model.UserId && b.ScenicId == model.ScenicId && b.TypeId == model.TicketTypeId && b.DataStatus == 0 && b.TicketSource == (int)TicketSourceStatus.ScenicSpot && b.ExpiryDateStart <= playTime && b.ExpiryDateEnd >= playTime ). OrderBy((a, b) => b.CreateTime). Select((a, b) => new TblTicketViewModel { TicketName = b.TicketName, Id = b.TicketId, Price = b.SalePrice, MinOQ = b.MinOQ, MaxOQ = b.MaxOQ, RuleId = b.RuleId }).ToPageList(model.Page, model.PageSize, ref total); var ruleIds = ticketList.Select(a => a.RuleId).Distinct().ToList(); var ticketRuleList = _ticketRuleRepository.GetAllList(a => ruleIds.Contains(a.Id)); var scanTicketList = new List <TblTicketViewModel>(); DateTime nowTime = DateTime.Now.Date; foreach (var row in ticketList) { var ticketRule = ticketRuleList.FirstOrDefault(a => a.Id == row.RuleId); if (ticketRule != null && ticketRule.CanBookAdvance) { var playDataTime = playTime.AddHours(nowTime.Hour).AddMinutes(nowTime.Minute).AddSeconds(nowTime.Second); var nowDataTime = nowTime.Date.AddHours(nowTime.Hour).AddMinutes(nowTime.Minute).AddSeconds(nowTime.Second); var time = nowDataTime.AddDays(ticketRule.BookDay ?? 0).AddHours(ticketRule.BookHour ?? 0).AddMinutes(ticketRule.BookMinute ?? 0); if (time > playDataTime) { continue; } } scanTicketList.Add(new TblTicketViewModel { TicketName = row.TicketName, Id = row.Id, Price = row.Price, MinOQ = row.MinOQ, MaxOQ = row.MaxOQ }); } var ticketIds = scanTicketList.Select(a => a.Id).ToList(); var Tbl_TicketRelations = _ticketRelationRepository.GetAllList(p => p.ScenicId == model.ScenicId && ticketIds.Contains(p.TicketId)); DateTime endPay = playTime.AddDays(-1); //根据游玩日期,变动价格 foreach (var item in scanTicketList) { //根据orderId 顺序排列 取第一条 var tbl_TicketRelation = Tbl_TicketRelations.Where(p => p.TicketId == item.Id && p.Type == (int)TicketRelationEnum.TimeSlot && p.ExpiryDateStart <= nowTime && p.ExpiryDateEnd >= nowTime ).OrderBy(c => c.OrderId).FirstOrDefault(); if (tbl_TicketRelation != null) { item.Price = tbl_TicketRelation.SalePrice; continue; } //特殊时间段价格表为空 同时 游玩日期 是周末则启动周末价格策略 var dayOfWeek = playTime.DayOfWeek; if (dayOfWeek != DayOfWeek.Saturday && dayOfWeek != DayOfWeek.Sunday) { continue; } var ticketRelation = Tbl_TicketRelations.FirstOrDefault(p => p.TicketId == item.Id && p.Type == (int)TicketRelationEnum.Weekend); if (ticketRelation != null) { item.Price = ticketRelation.SalePrice; } } return(result.SuccessResult(scanTicketList, total)); }
/// <summary> /// 获取门票列表--扫一扫微信支付 /// </summary> /// <param name="scenicId">景区id</param> /// <param name="playTime">游玩日期</param> /// <returns></returns> public List <TVMTicketItem> GetScanTicketList(int scenicId, DateTime playTime) { //过滤掉已过期的产品 DateTime nowTime = DateTime.Now.Date; var tbl_TicketTypeList = _ticketTypeRepository.GetAllList(a => (a.TicketType == (int)TicketFirstType.散客票 || a.TicketType == (int)TicketFirstType.团体票) && a.ScenicId == scenicId).ToList(); if (tbl_TicketTypeList.Count <= 0) { return(new List <TVMTicketItem>()); } var typeIds = tbl_TicketTypeList.Select(a => a.Id).ToList(); var shelvesChannelType = ((int)ShelvesChannelEnum.MobileTicket).ToString();//上线渠道 var ticketList = _ticketRepository.GetAllList(p => p.ScenicId == scenicId && p.ShelvesChannel.Contains(shelvesChannelType) && typeIds.Contains(p.TypeId) && (p.DataStatus & (int)TicketDataStatus.IsStop) == 0 && p.TicketSource == 1 && p.ExpiryDateStart <= nowTime && p.ExpiryDateEnd >= nowTime); var ticketIds = ticketList.Select(a => a.TicketId).ToList(); var Tbl_TicketRelations = _ticketRelationRepository.GetAllList(p => p.ScenicId == scenicId && ticketIds.Any(a => a == p.TicketId)); DateTime endPay = playTime.AddDays(-1); //根据游玩日期,变动价格 foreach (var item in ticketList) { //根据orderId 顺序排列 取第一条 var tbl_TicketRelation = Tbl_TicketRelations.Where(p => p.TicketId == item.TicketId && p.Type == (int)TicketRelationEnum.TimeSlot && p.ExpiryDateStart <= nowTime && p.ExpiryDateEnd >= nowTime ).OrderBy(c => c.OrderId).FirstOrDefault(); if (tbl_TicketRelation != null) { item.SalePrice = tbl_TicketRelation.SalePrice; continue; } //特殊时间段价格表为空 同时 游玩日期 是周末则启动周末价格策略 var dayOfWeek = playTime.DayOfWeek; if (dayOfWeek != DayOfWeek.Saturday && dayOfWeek != DayOfWeek.Sunday) { continue; } var ticketRelation = Tbl_TicketRelations.FirstOrDefault(p => p.TicketId == item.TicketId && p.Type == (int)TicketRelationEnum.Weekend); if (ticketRelation != null) { item.SalePrice = ticketRelation.SalePrice; } } var ruleIds = ticketList.Select(a => a.RuleId).Distinct().ToList(); var ticketRuleList = _ticketRuleRepository.GetAllList(a => ruleIds.Contains(a.Id)); var scanTicketList = new List <TVMTicketItem>(); foreach (var row in ticketList) { var ticketRule = ticketRuleList.FirstOrDefault(a => a.Id == row.RuleId); if (ticketRule == null) { continue; } if (ticketRule.CanBookAdvance) { var playDataTime = playTime.AddHours(nowTime.Hour).AddMinutes(nowTime.Minute).AddSeconds(nowTime.Second); var nowDataTime = nowTime.Date.AddHours(nowTime.Hour).AddMinutes(nowTime.Minute).AddSeconds(nowTime.Second); var time = nowDataTime.AddDays(ticketRule.BookDay ?? 0).AddHours(ticketRule.BookHour ?? 0).AddMinutes(ticketRule.BookMinute ?? 0); if (time > playDataTime) { continue; } } scanTicketList.Add(new TVMTicketItem { TicketId = row.TicketId, TicketName = row.TicketName, TicketPrice = row.SalePrice, MinCount = row.MinOQ, MaxCount = row.MaxOQ }); } return(scanTicketList); }