/// <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); } }
/// <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); }
/// <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); }
/// <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); }
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); }