コード例 #1
0
        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));
        }
コード例 #2
0
        /// <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);
        }