/// <summary>
        /// 验证单个订单数据
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public DataValidResult ValidDataForOrderSingleCreateRequest(
            OrderSingleCreateRequest request,
            Tbl_OTABusiness business,
            Tbl_Ticket tbl_Ticket,
            OrderSingleCreateResponse response)
        {
            var result = new DataValidResult {
                Status = false
            };
            var ticket = request.Body.OrderInfo.Ticket;

            if (tbl_Ticket == null)
            {
                result.Code    = "113019";
                result.Message = "创建订单失败,选择的游玩日期超出选购产品的有效期或者选购的产品无效";
                return(result);
            }
            var existence = _otaTicketRelationService.CheckIsTicketId(business.Id, tbl_Ticket.TicketId);

            if (!existence)
            {
                result.Code    = "113019";
                result.Message = "创建订单失败,选择的游玩日期超出选购产品的有效期或者选购的产品无效";
                return(result);
            }
            if (tbl_Ticket.SalePrice != ticket.SellPrice)
            {
                result.Code    = "113020";
                result.Message = "创建订单失败,价格不一致";
                return(result);
            }
            //日销售限额为空或者0  为不限制
            if (tbl_Ticket.StockCount.HasValue && tbl_Ticket.StockCount.Value > 0)
            {
                if (!tbl_Ticket.LastUpdateTime.HasValue || tbl_Ticket.LastUpdateTime.Value.Date != DateTime.Now.Date)
                {
                    tbl_Ticket.SellCount = 0;
                }
                var sellCount = tbl_Ticket.SellCount.HasValue ? tbl_Ticket.SellCount.Value : 0;//库存
                response.Body.Inventory = tbl_Ticket.StockCount.Value - sellCount;
                if (sellCount + ticket.Quantity > tbl_Ticket.StockCount.Value)
                {
                    //开启了库存限制,购买数量超过了库存
                    result.Code    = "113026";
                    result.Message = "创建订单失败,库存不足";
                    return(result);
                }
            }
            else
            {
                response.Body.Inventory = 50000;
            }

            result.Status = true;
            return(result);
        }
 /// <summary>
 /// 更新票的日售票数
 /// </summary>
 /// <param name="tickets"></param>
 /// <param name="orderDetails"></param>
 public void UpdateTicketBySellCount(Tbl_Ticket ticket, Tbl_OrderDetail orderDetail)
 {
     //日销售限额为空或者0  为不限制
     if (ticket.StockCount.HasValue && ticket.StockCount.Value > 0)
     {
         if (ticket.LastUpdateTime.HasValue && ticket.LastUpdateTime.Value.Date == DateTime.Now.Date)
         {
             ticket.SellCount = ticket.SellCount.HasValue ? ticket.SellCount + orderDetail.Quantity : 1;
         }
         ticket.LastUpdateTime = DateTime.Now;
         ticket.SellCount      = 1;
         _ticketRepository.Update(ticket);
     }
 }
Beispiel #3
0
        /// <summary>
        /// 创建订单余额支付
        /// </summary>
        /// <param name="orderCreateDto"></param>
        /// <returns></returns>
        private Tbl_Order AddOrderForBalancePay(OrderCreateDto orderCreateDto, Tbl_Ticket tbl_Ticket)
        {
            if (tbl_Ticket == null)
            {
                throw new SimplePromptException("门票未找到");
            }
            //创建订单号
            string orderNo = OrderHelper.GenerateOrderNo();
            //订单
            Tbl_Order tbl_Order = new Tbl_Order
            {
                OrderNo           = orderNo,
                OpenId            = orderCreateDto.OpenId,
                TicketSource      = 1,
                PayType           = (int)PayType.Balance,
                PayAccount        = "",
                PayTradeNo        = "",
                SellerId          = 0,
                Price             = 0,
                Linkman           = orderCreateDto.Linkman,
                Mobile            = orderCreateDto.Mobile,
                OrderStatus       = (int)OrderStatusType.Success,
                PayTime           = DateTime.Now,
                CreateTime        = DateTime.Now,
                ValidityDateStart = orderCreateDto.TravelTime,
                ValidityDateEnd   = orderCreateDto.TravelTime,
                BookCount         = orderCreateDto.BookCount,
                UsedQuantity      = 0,
                Remark            = "",
                IDCard            = "",
                CreateUserId      = 0,
                OrderType         = (int)OrderType.Ticket,
            };
            var ticketNames = tbl_Ticket.TicketName;

            if (ticketNames.Length > 50)
            {
                ticketNames = ticketNames.Substring(0, 50);
            }
            tbl_Order.TicketName  = ticketNames;
            tbl_Order.TotalAmount = tbl_Ticket.SalePrice * tbl_Order.BookCount;
            _orderRepository.Add(tbl_Order);
            return(tbl_Order);
        }
        /// <summary>
        /// 添加订单详情 余额支付
        /// </summary>
        /// <param name="order"></param>
        /// <param name="tbl_Order"></param>
        /// <returns></returns>
        public Tbl_OrderDetail AddForBalancePay(Tbl_Order tbl_Order, Tbl_Ticket tbl_Ticket)
        {
            if (tbl_Ticket == null)
            {
                throw new SimplePromptException("门票未找到");
            }
            Tbl_OrderDetail tbl_OrderDetail = new Tbl_OrderDetail
            {
                Number           = Guid.NewGuid(),
                OrderNo          = tbl_Order.OrderNo,
                OrderType        = tbl_Order.OrderType,
                SellerId         = 0,
                SellerType       = 1,
                OtaOrderDetailId = 0,
                OrderSource      = 1,
                TicketSource     = 1,
                TicketCategory   = 1,
                UsedQuantity     = 0,
                TicketId         = tbl_Ticket.TicketId,
                TicketName       = tbl_Ticket.TicketName,
                Price            = tbl_Ticket.SalePrice,
                Quantity         = tbl_Order.BookCount,
                BarCode          = "",
                Stub             = "",
                CertificateNO    = "",
                OrderStatus      = (int)OrderDetailStatusType.Success,

                CreateTime        = DateTime.Now,
                ValidityDateStart = tbl_Order.ValidityDateStart,
                ValidityDateEnd   = tbl_Order.ValidityDateEnd,
                QRcodeUrl         = "",
                QRcode            = "",
                Mobile            = tbl_Order.Mobile,
                IDCard            = "",
                Linkman           = tbl_Order.Linkman,
                BuyUserId         = tbl_Order.BuyUserId,
                CanModify         = true,
                CanRefund         = true,
            };

            _orderDetailRepository.Add(tbl_OrderDetail);
            return(tbl_OrderDetail);
        }
Beispiel #5
0
        /// <summary>
        /// 更新订单详情的可退款时间和可修改时间
        /// </summary>
        /// <param name="order"></param>
        /// <param name="ticket"></param>
        /// <param name="tbl_OrderDetail"></param>
        private static void UpdateOrderDetailRefundTimeAndModifyTime(DateTime visitDate, Tbl_Ticket ticket, Tbl_OrderDetail tbl_OrderDetail, Tbl_TicketRule ticketRule)
        {
            //是否支持退款
            if (ticketRule.CanRefund)
            {
                int refundDay    = ticketRule.RefundDay == null ? 0 : ticketRule.RefundDay.Value;
                int refundHour   = ticketRule.RefundHour == null ? 0 : ticketRule.RefundHour.Value;
                int refundMinute = ticketRule.RefundMinute == null ? 0 : ticketRule.RefundMinute.Value;
                if (ticketRule.IsAnytimeRefund)//随时退
                {
                    tbl_OrderDetail.CanRefundTime = null;
                }
                else
                {
                    var canRefundTime = visitDate.Date.AddDays(1).AddSeconds(-1);
                    if (refundDay == 0 && refundHour == 0 && refundMinute == 0)
                    {
                        tbl_OrderDetail.CanRefundTime = canRefundTime;
                    }
                    else
                    {
                        canRefundTime = canRefundTime.AddDays(refundDay);
                        if (refundDay >= 0)
                        {
                            canRefundTime = canRefundTime.AddHours(refundHour);
                            canRefundTime = canRefundTime.AddMinutes(refundMinute);
                        }
                        else
                        {
                            canRefundTime = canRefundTime.AddHours(-refundHour);
                            canRefundTime = canRefundTime.AddMinutes(-refundMinute);
                        }
                        tbl_OrderDetail.CanRefundTime = canRefundTime;
                    }
                }
            }
            //是否支持修改已支付订单
            if (ticketRule.CanModify)
            {
                int modifyDay    = ticketRule.ModifyDay == null ? 0 : ticketRule.ModifyDay.Value;
                int modifyHour   = ticketRule.ModifyHour == null ? 0 : ticketRule.ModifyHour.Value;
                int modifyMinute = ticketRule.ModifyMinute == null ? 0 : ticketRule.ModifyMinute.Value;
                if (modifyDay == 0 && modifyHour == 0 && modifyMinute == 0)
                {
                    tbl_OrderDetail.CanModifyTime = null;
                }
                else
                {
                    var canModifyTime = visitDate.AddDays(modifyDay);
                    if (modifyDay >= 0)
                    {
                        canModifyTime = canModifyTime.AddHours(modifyHour);
                        canModifyTime = canModifyTime.AddMinutes(modifyMinute);
                    }
                    else
                    {
                        canModifyTime = canModifyTime.AddHours(-modifyHour);
                        canModifyTime = canModifyTime.AddMinutes(-modifyMinute);
                    }
                    tbl_OrderDetail.CanModifyTime = canModifyTime;
                }
            }
            //延时验票时间
            double delayCheckMinutes = Convert.ToDouble(ticketRule.DelayCheck);

            tbl_OrderDetail.DelayCheckTime = tbl_OrderDetail.CreateTime.AddMinutes(delayCheckMinutes);
        }
Beispiel #6
0
        /// <summary>
        /// 创建单个产品订单详情
        /// </summary>
        /// <param name="order"></param>
        /// <param name="tbl_Order"></param>
        /// <returns></returns>
        public Tbl_OrderDetail AddOrderDetail(OrderSingleInfo order, Tbl_Order tbl_Order, Tbl_Ticket tbl_Ticket)
        {
            var ticketRule = _ticketRuleRepository.FirstOrDefault(a => a.Id == tbl_Ticket.RuleId);
            //二维码票: 每种门票 一个订单详情,多个数量
            Tbl_OrderDetail tbl_OrderDetail = new Tbl_OrderDetail
            {
                Number            = Guid.NewGuid(),
                OrderNo           = tbl_Order.OrderNo,
                EnterpriseId      = tbl_Ticket.EnterpriseId,
                ScenicId          = tbl_Ticket.ScenicId,
                WindowId          = 0,
                SellerId          = 0,
                SellerType        = 1,
                OtaOrderDetailId  = 0,
                OrderSource       = (int)OrderSource.OTA,
                TicketSource      = (int)TicketSourceStatus.Ota,
                TicketCategory    = (int)TicketCategoryStatus.QrCodeElectronTicket,
                UsedQuantity      = 0,
                TicketId          = tbl_Ticket.TicketId,
                TicketName        = tbl_Ticket.TicketName,
                Price             = tbl_Ticket.SalePrice,
                SettlementPrice   = tbl_Ticket.SettlementPrice,
                Quantity          = order.Ticket.Quantity,
                BarCode           = "",
                Stub              = "",
                CertificateNO     = "",
                OrderStatus       = (int)OrderDetailsDataStatus.NoPay,
                CreateTime        = DateTime.Now,
                ValidityDateStart = order.VisitDate.ToDataTime(),
                ValidityDateEnd   = order.VisitDate.ToDataTime(),
                PrintCount        = 0,
                QRcodeUrl         = "",
                QRcode            = "",
                Mobile            = order.ContactPerson.Mobile,
                IDCard            = tbl_Order.IDCard,
                Linkman           = order.ContactPerson.Name,
                CanModify         = ticketRule.CanModify,
                CanRefund         = ticketRule.CanRefund
            };

            UpdateOrderDetailRefundTimeAndModifyTime(order.VisitDate.ToDataTime(), tbl_Ticket, tbl_OrderDetail, ticketRule);


            //修改订单信息
            tbl_Order.EnterpriseId = tbl_OrderDetail.EnterpriseId;
            tbl_Order.ScenicId     = tbl_OrderDetail.ScenicId;
            tbl_Order.TicketName   = tbl_OrderDetail.TicketName;
            tbl_Order.TotalAmount  = tbl_Ticket.SalePrice * order.Ticket.Quantity;
            tbl_Order.BookCount    = order.Ticket.Quantity;
            return(tbl_OrderDetail);
        }
Beispiel #7
0
        private static XJ_Order PopulateOTAOrder(OtaOrderModel row, Tbl_OTABusiness business, Tbl_Ticket ticket)
        {
            var orderInfo = new XJ_Order
            {
                OrderOtaId    = row.OrderNo,
                OTABusinessId = business.Id,
                OrderPrice    = row.ProductPrice,
                OrderQuantity = row.ProductCount,
                TicketList    = new List <XJ_ProductItem>(),
                VisitDate     = row.StartDate.ToDataTimeFormat(),
                ContactPerson = new XJ_ContactPerson
                {
                    BuyName  = row.LinkName,
                    Name     = row.LinkName,
                    Mobile   = row.LinkPhone,
                    CardType = "ID_CARD",
                    CardNo   = row.IdCard
                }
            };

            orderInfo.TicketList.Add(new XJ_ProductItem
            {
                ProductId     = ticket.TicketId,
                ProductName   = ticket.TicketName,
                SellPrice     = ticket.SalePrice,
                Quantity      = row.ProductCount,
                OrderNo       = row.OrderNo,
                OrderDetailId = row.OrderId,
                CodeStr       = row.Code,
                StartDate     = row.StartDate.ToDataTimeFormat(),
                EndDate       = row.EndDate.ToDataTimeFormat(),
                State         = StateAction.GetState(row.OrderState)
            });
            return(orderInfo);
        }