Beispiel #1
0
        /// <summary>
        /// 生成订单
        /// </summary>
        public string ProduceOrder(Guid policyId, PolicyType policyType, Guid publisher, string officeNo, string source, int choise, bool needAUTH, bool HasSubsidized,
                                   bool IsUsePatPrice, bool forbidChnagePNR)
        {
            var           orderView     = Session["OrderView"] as OrderView;
            var           flights       = Session["ReservedFlights"] as IEnumerable <FlightView>;
            MatchedPolicy matchedPolicy = MatchedPolicyCache.FirstOrDefault(p => p.Id == policyId);

            if (matchedPolicy == null)
            {
                throw new CustomException("政策选择超时");
            }
            if (flights.First().BunkType != null && orderView.Source == OrderSource.PlatformOrder &&
                (flights.First().BunkType == BunkType.Free || matchedPolicy.OriginalPolicy is SpecialPolicyInfo && ((SpecialPolicyInfo)matchedPolicy.OriginalPolicy).Type == SpecialProductType.LowToHigh))
            {
                SpecialPolicy policy = PolicyManageService.GetSpecialPolicy(policyId);
                //低打高返和集团票性质一样 不需要去订坐 2013-4-3 wangsl
                //if (policy != null && (policy.SynBlackScreen||policy.Type==SpecialProductType.LowToHigh))
                if (policy != null && policy.SynBlackScreen)
                {
                    PNRPair pnr = PNRHelper.ReserveSeat(flights, orderView.Passengers);
                    orderView.PNR = pnr;
                }
            }
            Order order = OrderProcessService.ProduceOrder(orderView, matchedPolicy, CurrentUser, BasePage.OwnerOEMId, forbidChnagePNR, (AuthenticationChoise)choise);

            FlightQuery.ClearFlightQuerySessions();
            if (order.Source == OrderSource.PlatformOrder && !PNRPair.IsNullOrEmpty(order.ReservationPNR) && !String.IsNullOrWhiteSpace(order.Product.OfficeNo))
            {
                if (needAUTH)
                {
                    authorize(order.ReservationPNR, officeNo, source, BasePage.OwnerOEMId);
                }
            }
            return(order.Id.ToString());
        }
Beispiel #2
0
        static bool OrderPaySuccess(decimal orderId, string payAccount, string payTradeNo, string channelTradeNo, DateTime payTime, PayInterface payInterface, PayAccountType payAccountType, string operatorAccount)
        {
            var result  = false;
            var request = string.Format("订单:{0} 支付账号:{1} 流水号:{2} 支付时间:{3} 支付接口:{4} 支付账号类型:{5} 操作员账号:{6} 通道流水号:{7} ",
                                        orderId, payAccount, payTradeNo, payTime, payInterface.GetDescription(), payAccountType.GetDescription(), operatorAccount, channelTradeNo);
            var response = string.Empty;

            try {
                OrderProcessService.PaySuccess(orderId, payAccount, payTradeNo, channelTradeNo, payTime, payInterface, payAccountType, operatorAccount);
                result   = true;
                response = "处理成功";
            } catch (Exception ex) {
                LogService.SaveExceptionLog(ex, "订单支付通知 " + request);
                response = "处理失败 " + ex.Message;
            }
            var tradementLog = new Log.Domain.TradementLog {
                OrderId  = orderId,
                Request  = request,
                Response = response,
                Time     = DateTime.Now,
                Remark   = "支付成功通知",
            };

            LogService.SaveTradementLog(tradementLog);
            return(result);
        }
Beispiel #3
0
        /// <summary>
        /// 申请退/废票
        /// </summary>
        /// <param name="orderId">订单号</param>
        /// <param name="pnrCode">编码(小编码|大编码)</param>
        /// <param name="passengers">乘机人(乘机人id,以','隔开)</param>
        /// <param name="voyages">航段(航段id,以','隔开)</param>
        /// <param name="refundType">退票类型(当日作废:-1,升舱全退:0,自愿按客规退票:1,非自愿退票:2,特殊原因退票:3)</param>
        /// <param name="reason">退/废票原因</param>
        /// <param name="DelegageCancelPNR">是否委托平台取消编码</param>
        public string ApplyRefund(decimal orderId, string pnrCode, string passengers, string voyages, int refundType, string reason, bool DelegageCancelPNR, string filePath)
        {
            try
            {
                RefundOrScrapApplyformView applyformView = null;
                if (refundType == -1)
                {
                    applyformView = new ScrapApplyformView();
                }
                else
                {
                    applyformView = new RefundApplyformView();
                    var view = applyformView as RefundApplyformView;
                    view.RefundType = (RefundType)refundType;
                    if (!string.IsNullOrEmpty(filePath) && (view.RefundType == RefundType.SpecialReason || view.RefundType == RefundType.Involuntary))
                    {
                        var       bytes     = FileService.GetFileBytes(filePath);
                        Thumbnail thumbnail = new Thumbnail();
                        view.ApplyAttachmentView = new List <ApplyAttachmentView>();
                        view.ApplyAttachmentView.Add(new ApplyAttachmentView {
                            FilePath  = filePath,
                            Thumbnail = thumbnail.MakeThumb(100, bytes)
                        });
                        //view.Thumbnail = thumbnail.MakeThumb(100, "");
                    }
                    applyformView = view;
                }
                applyformView.PNR               = getPNRPair(pnrCode);
                applyformView.Passengers        = getPassengers(passengers);
                applyformView.Reason            = reason;
                applyformView.DelegageCancelPNR = DelegageCancelPNR;
                foreach (var item in getRefundVoyages(voyages))
                {
                    applyformView.AddVoyage(item);
                }
                if (Session["NeedPlatformCancelPNR"] != null && Session["NeedPlatformCancelPNR"].ToString() == orderId.ToString())
                {
                    applyformView.NeedPlatfromCancelPNR = true;
                }
                var applyform = OrderProcessService.Apply(orderId, applyformView, CurrentUser, BasePage.OwnerOEMId) as RefundOrScrapApplyform;
                releaseLock(orderId);
                //if (applyform.Status == RefundApplyformStatus.AppliedForProvider && (applyform.Order.Source == OrderSource.ContentImport || applyform.Order.Source == OrderSource.CodeImport || applyform.Order.Source == OrderSource.InterfaceOrder))
                //{
                //    var pnr = CommandService.GetReservedPnr(applyformView.PNR, Guid.Empty);
                //    if (!pnr.Success || pnr.Success && !pnr.Result.HasCanceled)
                //    {
                //        return "OK1";
                //    }
                //}

                return(OK);
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }
        }
        protected void btnGetPayInfo_Click(object sender, EventArgs e)
        {
            var order = OrderProcessService.QueryExternalPlatformPaymentStatus(decimal.Parse(this.lblInternalOrderId.Text));

            if (order != null)
            {
                bindOrder(order);
            }
        }
Beispiel #5
0
        protected override string ExecuteCore()
        {
            var flights    = Context.GetParameterValue("flights");
            var passengers = Context.GetParameterValue("passengers");
            var contact    = Context.GetParameterValue("contact");
            var policyType = Context.GetParameterValue("policyType");

            Vaild(flights, passengers, contact, policyType, InterfaceSetting);

            DataTransferObject.Order.OrderView orderView = new DataTransferObject.Order.OrderView();
            bindOrderView(flights, passengers, contact, orderView);
            var pnrh = new PNRHelper();

            try
            {
                if ((PolicyType)byte.Parse(policyType) != PolicyType.Special)
                {
                    PNRPair pnr = pnrh.ReserveSeat(loadFlightView(flights, passengers), orderView.Passengers, Employee, Company);
                    orderView.PNR = pnr;
                }
                if (pnrh.RequirePat(loadFlightView(flights, passengers), (PolicyType)byte.Parse(policyType)))
                {
                    orderView.PATPrice = pnrh.Pat(orderView.PNR, loadFlightView(flights, passengers), PassengerType.Adult);
                }
                MatchedPolicy policy = QueryPolicies((PolicyType)byte.Parse(policyType), flights, passengers, orderView);
                if (policy != null)
                {
                    if (policy.PolicyType == PolicyType.Special)
                    {
                        var p = PolicyManageService.GetSpecialPolicy(policy.Id);
                        if (p != null && p.SynBlackScreen)
                        {
                            PNRPair pnr = pnrh.ReserveSeat(loadFlightView(flights, passengers), orderView.Passengers, Employee, Company);
                            orderView.PNR = pnr;
                        }
                    }
                    orderView.IsTeam = false;
                    orderView.Source = OrderSource.InterfaceReservaOrder;
                    Order order = OrderProcessService.ProduceOrder(orderView, policy, Employee, Guid.Empty, false);
                    if (order.Source == OrderSource.InterfaceReservaOrder && !PNRPair.IsNullOrEmpty(order.ReservationPNR) && !String.IsNullOrWhiteSpace(order.Product.OfficeNo))
                    {
                        if (policy.NeedAUTH && !string.IsNullOrEmpty(policy.OfficeNumber))
                        {
                            authorize(order.ReservationPNR, policy.OfficeNumber);
                        }
                    }
                    return("<id>" + order.Id + "</id><payable>" + (policy.ConfirmResource ? 0 : 1) + "</payable>" + ReturnStringUtility.GetOrder(order));
                }
            }
            catch (Exception ex)
            {
                InterfaceInvokeException.ThrowCustomMsgException(ex.Message);
            }
            InterfaceInvokeException.ThrowCustomMsgException("生成订单失败,没有对应直达航班!");
            return("");
        }
Beispiel #6
0
        public void ProduceOrderTest()
        {
            var flight = new MockX <FlightView>();

            flight.SetupAllProperties();
            MockOption.SetReturnsDefault(flight.Object);
            MockOption.SetReturnsDefault <IEnumerable <FlightView> >(new List <FlightView>()
            {
                flight.Object, flight.Object, flight.Object
            });
            var passenger = new MockX <PassengerView>();

            passenger.SetupAllProperties();
            MockOption.SetReturnsDefault(passenger.Object);
            MockOption.SetReturnsDefault <IEnumerable <PassengerView> >(new List <PassengerView>()
            {
                passenger.Object, passenger.Object, passenger.Object
            });
            var contract = new MockX <Contact>();

            contract.SetupAllProperties();
            MockOption.SetReturnsDefault(contract.Object);

            var role = new MockX <PermissionRoleInfo>();

            role.SetupAllProperties();
            MockOption.SetReturnsDefault(role);
            MockOption.SetReturnsDefault <IEnumerable <PermissionRoleInfo> >(new List <PermissionRoleInfo>()
            {
                role.Object, role.Object
            });


            var ovP = new MockX <OrderView>();

            ovP.SetupAllProperties();
            var emp = new MockX <EmployeeDetailInfo>();

            emp.SetupAllProperties();

            OrderView          orderView = ovP.Object;
            Guid               publisher = new Guid("74ae6725-654e-444f-abcc-29b1568db845");
            Guid               policy    = new Guid(); // TODO: 初始化为适当的值
            EmployeeDetailInfo employee  = emp.Object;
            Order              expected  = null;       // TODO: 初始化为适当的值
            Order              actual;

            actual = OrderProcessService.ProduceOrder(orderView, publisher, policy, employee);
            Assert.AreNotEqual(expected, actual);
        }
Beispiel #7
0
        /// <summary>
        /// 检查PNR信息;
        /// </summary>
        private void CheckPNR()
        {
            // 读取配置文件中的查询时间范围;
            decimal range = decimal.Parse(ConfigurationManager.AppSettings["Range"]);

            // 这里查询到所有状态为1的,
            IEnumerable <PNRHistory> histories = HistoryService.QueryBooking(DateTime.Now.AddHours(-(double)range));

            runtimeLog.Debug("Start Process.");
            foreach (var item in histories)
            {
                runtimeLog.InfoFormat("编码:{0}, 状态:{1}", item.PNRCode, item.Status == 1 ? "未取消" : "已取消");

                // 判断编码是否需要取消;
                if (item.Status == 1)
                {
                    bool needCancel = OrderProcessService.RequireCancelPNR(item.PNRCode, item.GenerateTime.AddMinutes(-5));
                    if (needCancel)
                    {
                        var isSucceeded = CommandService.CancelPNR(new PNRPair(item.PNRCode, null));
                        if (isSucceeded)
                        {
                            item.Status = 0;
                            HistoryService.Update(item);
                            runtimeLog.InfoFormat("编码{0}已被成功取消。", item.PNRCode);
                        }
                        else
                        {
                            runtimeLog.InfoFormat("编码{0}未被成功取消。", item.PNRCode);
                            exceptionLog.ErrorFormat("编码{0}未被成功取消。", item.PNRCode);
                        }
                    }
                    else
                    {
                        runtimeLog.InfoFormat("编码{0}不需要被取消。", item.PNRCode);
                    }
                }
                else
                {
                    runtimeLog.InfoFormat("编码{0}已处于取消状态。", item.PNRCode);
                }

                runtimeLog.Info("");
                Thread.Sleep(500);
            }

            runtimeLog.Debug("End Process.");
        }
Beispiel #8
0
 protected void CancleThisOrder(object sender, EventArgs e)
 {
     try
     {
         if (orderId == 0)
         {
             return;
         }
         OrderProcessService.CancelOrder(orderId, CurrentUser.UserName);
         RegisterJavaScript(this, "alert('取消成功!');location.href='/PurchaseDefault.aspx'");
     }
     catch (Exception ex)
     {
         ShowExceptionMessage(ex, "取消订单");
     }
 }
Beispiel #9
0
 protected void DealOrder(object source, RepeaterCommandEventArgs e)
 {
     try {
         var orderId = Guid.Parse(e.CommandArgument.ToString());
         OrderProcessService.HandlingCredentialsForUpdateFailed(orderId, CurrentUser.UserName, BasePage.OwnerOEMId);
         ShowMessage("处理完成!");
         var pagination = new Pagination {
             PageSize    = pager.PageSize,
             PageIndex   = pager.CurrentPageIndex,
             GetRowCount = true
         };
         QueryApplyForm(pagination);
     } catch (Exception ex) {
         ShowExceptionMessage(ex, "查询");
     }
     btnQuery_Click(this, null);
 }
Beispiel #10
0
        void checkPublisherIsWorking()
        {
            var company      = this.Supplier == null ? this.Provider.CompanyId : this.Supplier.CompanyId;
            var workingHours = CompanyService.GetWorkinghours(company);

            Izual.Time startTime, endTime;
            bool       isWeekend = DateTime.Today.IsWeekend();

            if (!IsB3BOrder)
            {
                var externalPolicy = OrderProcessService.LoadExternalPolicy(Id);
                if (externalPolicy == null)
                {
                    startTime = new Izual.Time(8, 0, 0);
                    endTime   = new Izual.Time(18, 0, 0);
                }
                else if (!isWeekend)
                {
                    startTime = externalPolicy.WorkTimeStart;
                    endTime   = externalPolicy.WorkTimeEnd;
                }
                else
                {
                    startTime = externalPolicy.RestWorkTimeStart;
                    endTime   = externalPolicy.RestWorkTimeEnd;
                }
            }
            else
            {
                if (isWeekend)
                {
                    startTime = workingHours.RestdayWorkStart;
                    endTime   = workingHours.RestdayWorkEnd;
                }
                else
                {
                    startTime = workingHours.WorkdayWorkStart;
                    endTime   = workingHours.WorkdayWorkEnd;
                }
            }
            if (Izual.Time.Now < startTime || Izual.Time.Now > endTime)
            {
                throw new CustomException("供应商已下班");
            }
        }
Beispiel #11
0
 protected void btnSubmit_Click(object sender, EventArgs e)
 {
     try
     {
         decimal applyformId;
         if (decimal.TryParse(Request.QueryString["id"], out applyformId))
         {
             RefundOrScrapApplyform applyform = ApplyformQueryService.QueryRefundOrScrapApplyform(applyformId);
             var remark = this.txtErrorRemork.Text;
             OrderProcessService.Apply(applyform.OrderId, new BalanceRefundApplyView(applyform.Flights.Select(f => f.OriginalFlight.Id), applyformId, remark), CurrentUser, OwnerOEMId);
             ReleaseLock(applyform.OrderId);
             RegisterScript(this, "alert('差错退款申请成功!');location.href='" + ReturnUrl + "'", true);
         }
     }
     catch (Exception ex)
     {
         ShowExceptionMessage(ex, "差错退款");
     }
 }
Beispiel #12
0
        /// <summary>
        /// 生成申请单
        /// </summary>
        public string ProduceApplyform(Guid policyId, PolicyType policyType, string officeNo, decimal orderId, string source, int choise, bool needAUTH, bool IsUsePatPrice)
        {
            var           applyformView = Session["ApplyformView"] as UpgradeApplyformView;
            MatchedPolicy matchedPolicy = MatchedPolicyCache.FirstOrDefault(p => p.Id == policyId);

            if (matchedPolicy == null)
            {
                throw new CustomException("政策选择超时");
            }
            decimal newOrderId = OrderProcessService.Apply(orderId, applyformView, matchedPolicy, CurrentUser, BasePage.OwnerOEMId);

            FlightQuery.ClearFlightQuerySessions();
            if (needAUTH)
            {
                authorize(applyformView.NewPNR, officeNo, source, BasePage.OwnerOEMId);
            }
            BasePage.ReleaseLock(orderId);
            return(newOrderId.ToString());
        }
Beispiel #13
0
 public void ProcessRequest(HttpContext context)
 {
     try
     {
         ExternalPlatformNotifyView notifyInfo = NotifyService._517NaNotify(context);
         lock (notifyLocker)
         {
             if (notifyInfo is PaySuccessNotifyView)
             {
                 var paymentResult = notifyInfo as PaySuccessNotifyView;
                 OrderProcessService.ExternalPaySucess(paymentResult);
             }
             else if (notifyInfo is ETDZFailedNotifyView)
             {
                 var etdzResult = notifyInfo as ETDZFailedNotifyView;
                 OrderProcessService.ExternalOrderDenyETDZ(etdzResult.Reason, etdzResult.Id);
             }
             else if (notifyInfo is ETDZSuccessNotifyView)
             {
                 var etdzResult = notifyInfo as ETDZSuccessNotifyView;
                 if (etdzResult.Valid && etdzResult.Ticket.TicketNos.Any())
                 {
                     OrderProcessService.ExternalPlatformETDZ(etdzResult.Ticket.NewPNR, etdzResult.Id,
                                                              etdzResult.Ticket.TicketNos, etdzResult.Ticket.SettleCode, BasePage.OwnerOEMId);
                 }
             }
             else if (notifyInfo is CancelOrderNotifyView)
             {
             }
         }
         context.Response.Write(notifyInfo.Response);
     }
     catch (CustomException)
     {
         context.Response.Write("FAIL");
     }
     catch (Exception ex)
     {
         context.Response.Write("FAIL");
         LogService.SaveExceptionLog(ex);
     }
 }
Beispiel #14
0
 public void ProcessRequest(HttpContext context)
 {
     try
     {
         PayNotifyProcessor processor = new PayNotifyProcessor(context.Request);
         if (processor.Execute())
         {
             var result     = false;
             var paramArray = processor.ExtraParams.Split('|');
             var request    = string.Format("订单:{0} 支付账号:{1} 流水号:{2} 支付时间:{3} 支付接口:{4} 支付账号类型:{5} 操作员账号:{6} 通道流水号:{7} ",
                                            processor.BusinessId, processor.PayAccount, processor.PoolPayTradeNo, processor.PayTime, processor.PayChannel.GetDescription(), processor.PayAccountType.GetDescription(), paramArray[2], processor.ChannelTradeNo);
             var response = string.Empty;
             try
             {
                 OrderProcessService.PaySuccess(processor.BusinessId, processor.PayAccount, processor.PoolPayTradeNo,
                                                processor.ChannelTradeNo, processor.PayTime, processor.PayChannel, processor.PayAccountType,
                                                paramArray[2]);
                 result   = true;
                 response = "处理成功";
             }
             catch (Exception ex)
             {
                 LogService.SaveExceptionLog(ex, "订单支付通知 " + request);
                 response = "处理失败 " + ex.Message;
             }
             var tradementLog = new TradementLog
             {
                 OrderId  = processor.BusinessId,
                 Request  = request,
                 Response = response,
                 Time     = DateTime.Now,
                 Remark   = "支付成功通知",
             };
             LogService.SaveTradementLog(tradementLog);
             context.Response.Write(string.Format(NotifyProcessor.ResponseFormat, "T", string.Empty));
         }
     }
     catch (Exception ex)
     {
         context.Response.Write(string.Format(NotifyProcessor.ResponseFormat, "F", ex.Message));
     }
 }
 /// <summary>
 /// 确认价格信息修改
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected void SurePrice(object sender, EventArgs e)
 {
     try
     {
         decimal applyformId;
         if (decimal.TryParse(Request.QueryString["id"], out applyformId))
         {
             RefundOrScrapApplyform applyform = ApplyformQueryService.QueryRefundOrScrapApplyform(applyformId);
             var priceView = new List <PriceView>();
             foreach (RepeaterItem item in ListVoyage.Items)
             {
                 if (item.ItemType == ListItemType.Header || item.ItemType == ListItemType.Footer)
                 {
                     continue;
                 }
                 var releasePriceCtl = item.FindControl("ReleasePrice") as TextBox;
                 var airportFeeCtl   = item.FindControl("AirPortFee") as TextBox;
                 var Departure       = item.FindControl("VoyageStart") as HiddenField;
                 var Arrival         = item.FindControl("VoyageEnd") as HiddenField;
                 var ReleasePrice    = float.Parse(releasePriceCtl.Text.Trim());
                 var AirPortFee      = float.Parse(airportFeeCtl.Text.Trim());
                 priceView.Add(new PriceView
                 {
                     AirportPair = new AirportPair(Departure.Value, Arrival.Value),
                     AirportFee  = (decimal)AirPortFee,
                     Fare        = (decimal)ReleasePrice
                 });
             }
             OrderProcessService.RevisePrice(applyform.OrderId, priceView, CurrentUser.UserName);
             ReleaseLock(applyform.OrderId);
             RegisterScript(this, "alert('价格修改成功!');location.href='/OrderModule/Operate/ChangeProcessList.aspx'", true);
         }
     }
     catch (Exception ex)
     {
         ShowExceptionMessage(ex, "修改价格");
     }
 }
Beispiel #16
0
 /// <summary>
 /// 申请改期
 /// </summary>
 /// <param name="orderId">订单号</param>
 /// <param name="pnrCode">编码(小编码|大编码)</param>
 /// <param name="passengers">乘机人(乘机人id,以','隔开)</param>
 /// <param name="voyages">航段(航段id|新航班号|新航班日期,以','隔开)</param>
 /// <param name="remark">改期备注</param>
 public string ApplyPostpone(decimal orderId, string pnrCode, string passengers, string voyages, string remark, string carrair)
 {
     try
     {
         var applyformView = new PostponeApplyformView()
         {
             PNR        = getPNRPair(pnrCode),
             Passengers = getPassengers(passengers),
             Reason     = remark
         };
         var flightChangeLimit = SystemDictionaryService.Query(SystemDictionaryType.FlightChangeLimit);
         var limit             = LimitItem.Parse(flightChangeLimit);
         foreach (var item in getPostponeVoyages(voyages))
         {
             bool isTodayFlight = DateTime.Today == item.NewFlightDate.Date;
             foreach (LimitItem l in limit)
             {
                 if (carrair.ToUpper() != l.Carrair.ToUpper())
                 {
                     continue;
                 }
                 if (item.NewFlightDate >= l.LimitFrom && item.NewFlightDate <= l.LimitTo && (!isTodayFlight || !l.ToTodayEnable))
                 {
                     var aline = FoundationService.Airlines.FirstOrDefault(p => p.Code.Value == l.Carrair);
                     throw new CustomException("由于[" + aline.ShortName + "]原因,该客票已被航空公司限制改期,无法改期,请让乘机人自行致电航空公司或到航空公司直营柜台办理改期");
                 }
             }
             applyformView.AddItem(item);
         }
         var applyform = OrderProcessService.Apply(orderId, applyformView, CurrentUser, BasePage.OwnerOEMId) as PostponeApplyform;
         releaseLock(orderId);
         return(OK);
     }
     catch (Exception ex)
     {
         return(ex.Message);
     }
 }
Beispiel #17
0
        protected void CheckInRefundingTimeOfProvider()
        {
            var workingHours = Service.Organization.CompanyService.GetWorkinghours(this.Order.Provider.CompanyId);

            Izual.Time startTime, endTime;
            if (this.Order.IsB3BOrder)
            {
                if (DateTime.Today.IsWeekend())
                {
                    startTime = workingHours.RestdayRefundStart;
                    endTime   = workingHours.RestdayRefundEnd;
                }
                else
                {
                    startTime = workingHours.WorkdayRefundStart;
                    endTime   = workingHours.WorkdayRefundEnd;
                }
            }
            else
            {
                var externalPolicy = OrderProcessService.LoadExternalPolicy(Order.Id);
                if (DateTime.Today.IsWeekend())
                {
                    startTime = externalPolicy.RestRefundTimeStart;
                    endTime   = externalPolicy.RestRefundTimeEnd;
                }
                else
                {
                    startTime = externalPolicy.WorkRefundTimeStart;
                    endTime   = externalPolicy.WorkRefundTimeEnd;
                }
            }
            if (Izual.Time.Now < startTime || Izual.Time.Now > endTime)
            {
                throw new CustomException("供应商已下班");
            }
        }
Beispiel #18
0
        public static ExternalOrder QueryExternalOrderTicket(decimal orderId, Guid oemId)
        {
            var extOrder    = QueryExternalOrder(orderId);
            var queryResult = ExternalPlatform.OrderService.QueryTicketNo(extOrder.Platform, orderId, extOrder.ExternalOrderId);
            var pnrInfo     = extOrder.PNRInfos.FirstOrDefault();

            if (pnrInfo == null)
            {
                throw new CustomException("编码不存在!");
            }
            if (queryResult.Success && queryResult.Result.TicketNos.Any())
            {
                var ticketNoView = new TicketNoView()
                {
                    ETDZPNR       = queryResult.Result.NewPNR,
                    Mode          = ETDZMode.Manual,
                    Items         = queryResult.Result.TicketNos,
                    NewSettleCode = queryResult.Result.SettleCode
                };
                var setting = ExternalPlatform.Processor.PlatformBase.GetPlatform(extOrder.Platform);
                OrderProcessService.ETDZ(ticketNoView, setting.Setting.ProviderAccount, extOrder.Platform.GetDescription(), extOrder, oemId);
            }
            return(extOrder);
        }
Beispiel #19
0
        private void payOrder(decimal orderId)
        {
            string source = Request.QueryString["source"];
            Order  order  = OrderQueryService.QueryOrder(orderId);

            if (order == null)
            {
                showErrorMessage("订单 [" + orderId + "] 不存在");
            }
            else
            {
                if (order.Source != OrderSource.PlatformOrder)
                {
                    orderIsImport.Value = "1";
                }
                flights = order.PNRInfos.FirstOrDefault().Flights.ToList();
                PNRInfo pnr = order.PNRInfos.First();
                ShowTicketPrice.Value = pnr.Flights.First().Bunk is FreeBunk ||
                                        pnr.Passengers.First().Price.Fare != 0
                                            ? "1"
                                            : "0";

                // 状态是待申请的,则仅显示订单信息和提示信息
                if (order.Status == OrderStatus.Applied)
                {
                    bindOrder(order, source);
                    divOperations.Visible = false;
                }
                else
                {
                    // 内部机构订单不需要支付
                    if (order.IsInterior)
                    {
                        Response.Redirect("OrderDetail.aspx?id=" + orderId + "&returnUrl=OrderList.aspx");
                    }
                    // 其他情况,均要检查是否能支付和状态
                    string errorMessage;

                    if (OrderProcessService.Payable(orderId, out errorMessage))
                    {
                        string lockErrorMsg;
                        if (Lock(orderId, LockRole.Purchaser, "订单支付", out lockErrorMsg))
                        {
                            bindOrder(order, source);
                            bindPayTypes();
                        }
                        else
                        {
                            showErrorMessage("锁定订单失败。原因:" + lockErrorMsg);
                        }
                        if (!string.IsNullOrEmpty(errorMessage))
                        {
                            showErrorMessage(errorMessage);
                        }
                    }
                    else
                    {
                        showErrorMessage(errorMessage);
                    }
                }
            }
        }
Beispiel #20
0
        protected override string ExecuteCore()
        {
            var orderId   = Context.GetParameterValue("id");
            var payType   = Context.GetParameterValue("payType");
            var orderType = Context.GetParameterValue("businessType");

            if (string.IsNullOrWhiteSpace(orderId))
            {
                InterfaceInvokeException.ThrowParameterMissException("id");
            }
            if (string.IsNullOrWhiteSpace(payType) || (payType != "0" && payType != "1"))
            {
                InterfaceInvokeException.ThrowParameterMissException("payType");
            }
            if (string.IsNullOrWhiteSpace(orderType) || (orderType != "0" && orderType != "1"))
            {
                InterfaceInvokeException.ThrowParameterMissException("businessType");
            }
            decimal oid;
            string  msg = "";

            if (decimal.TryParse(orderId, out oid))
            {
                decimal amount = 0M;
                if (orderType == "0")
                {
                    OrderProcessService.Payable(oid, out msg);
                    if (!string.IsNullOrEmpty(msg))
                    {
                        InterfaceInvokeException.ThrowCustomMsgException(msg);
                    }
                    var orderInfo = OrderQueryService.QueryOrder(oid);
                    if (orderInfo.Purchaser.CompanyId != Company.CompanyId)
                    {
                        InterfaceInvokeException.ThrowCustomMsgException("暂无此订单");
                    }
                    amount = orderInfo.Purchaser.Amount;
                }
                else if (orderType == "1")
                {
                    ApplyformProcessService.Payable(oid, out msg);
                    if (!string.IsNullOrEmpty(msg))
                    {
                        InterfaceInvokeException.ThrowCustomMsgException(msg);
                    }
                    var orderInfo = ApplyformQueryService.QueryPostponeApplyform(oid);
                    if (orderInfo.Purchaser.CompanyId != Company.CompanyId)
                    {
                        InterfaceInvokeException.ThrowCustomMsgException("暂无此订单");
                    }
                    amount = orderInfo.PayBill.Applier.Amount;
                }
                if (AutoPayService.QueryAuto(oid) != null)
                {
                    InterfaceInvokeException.ThrowCustomMsgException("存在重复的代扣记录");
                }
                var auto = AccountService.GetWithholding((WithholdingAccountType)byte.Parse(payType), Employee.Owner);
                if (auto == null || auto.Status == WithholdingProtocolStatus.Submitted)
                {
                    InterfaceInvokeException.ThrowCustomMsgException("该账户还没有进行代扣设置,请先登录平台进行设置!");
                }
                if (payType == "0" && amount > auto.Amount)
                {
                    InterfaceInvokeException.ThrowCustomMsgException("订单[ " + orderId + " ] 需要支付的金额超过的代扣金额上限!");
                }
                AutoPayService.InsertAutoPay(new ChinaPay.B3B.Service.Order.Domain.AutoPay.AutoPay()
                {
                    PayAccountNo = auto.AccountNo, PayType = (WithholdingAccountType)byte.Parse(payType), OrderId = oid, OrderType = (OrderType)byte.Parse(orderType), ProcessState = false, Success = false, Time = DateTime.Now
                });
            }
            else
            {
                InterfaceInvokeException.ThrowParameterMissException("orderId");
            }
            return("");
        }
Beispiel #21
0
        public object CheckRefundCondition(decimal orderId, string passenger, string voyages, int refundType, string pnr, bool DelegageCancelPNR)
        {
            var passgners = getPassengers(passenger);
            var _voyages  = getRefundVoyages(voyages);
            var pnrPair   = getPNRPair(pnr);
            var order     = OrderQueryService.QueryOrder(orderId);


            RefundOrScrapApplyformView applyformView = null;

            if (refundType == -1)
            {
                applyformView = new ScrapApplyformView();
            }
            else
            {
                applyformView = new RefundApplyformView();
                var view = applyformView as RefundApplyformView;
                view.RefundType = (RefundType)refundType;

                applyformView = view;
            }
            applyformView.PNR               = pnrPair;
            applyformView.Passengers        = passgners;
            applyformView.Reason            = "退票验证";
            applyformView.DelegageCancelPNR = DelegageCancelPNR;
            foreach (var item in getRefundVoyages(voyages))
            {
                applyformView.AddVoyage(item);
            }
            OrderProcessService.ApplyValidate(orderId, applyformView, CurrentUser, BasePage.OwnerOEMId);
            if (order == null)
            {
                throw new CustomException("订单不存在!");
            }
            if (!SystemParamService.ValidateRefundCondition)
            {
                return(new
                {
                    PNRCancled = true,
                    TicketUnUse = true,
                    IsNotPrinted = true,
                    IsSameName = true,
                    Successed = true,
                    NeedPlatfromDeal = false,
                    CheckCondition = false
                });
            }
            var result = OrderProcessService.CheckRefundCondition(order, passgners, _voyages, pnrPair, DelegageCancelPNR, BasePage.OwnerOEMId);

            if (result.Item5)
            {
                return(new
                {
                    PNRCancled = result.Item1,
                    TicketUnUse = result.Item2,
                    IsNotPrinted = result.Item3,
                    IsSameName = result.Item4,
                    Successed = result.Item1 && result.Item2 && result.Item3 && result.Item4,
                    NeedPlatfromDeal = false,
                    CheckCondition = true
                });
            }
            Session["NeedPlatformCancelPNR"] = orderId;
            return(new
            {
                PNRCancled = result.Item1,
                TicketUnUse = false,
                IsNotPrinted = false,
                IsSameName = false,
                Successed = true,
                NeedPlatfromDeal = true,
                CheckCondition = true
            });
        }
Beispiel #22
0
        private void process()
        {
            showMessage("开始下一批处理");
            var noPorcess = AutoPayService.QueryNoPorcess();
            //var str = Environment.CurrentDirectory;
            string msg = "";

            foreach (var item in noPorcess)
            {
                if (!_run)
                {
                    break;
                }
                AccountTradeDTO tradeView = null;
                //处理订单
                if (item.OrderType == OrderType.Order)
                {
                    OrderProcessService.Payable(item.OrderId, out msg);
                    if (string.IsNullOrEmpty(msg))
                    {
                        Order order = OrderQueryService.QueryOrder(item.OrderId);
                        tradeView = getPayTradeView(order, getPayAccountNo(item.PayType, order.Purchaser.Amount, order.Purchaser.CompanyId), "");
                    }
                }
                //处理申请单
                else if (item.OrderType == OrderType.Postpone)
                {
                    ApplyformProcessService.Payable(item.OrderId, out msg);
                    if (string.IsNullOrEmpty(msg))
                    {
                        PostponeApplyform applyform = ApplyformQueryService.QueryPostponeApplyform(item.OrderId);
                        if (applyform.PayBill.Tradement == null)
                        {
                            msg = "申请单:" + item.OrderId + " 不能进行代扣,无支付信息!";
                        }
                        tradeView = getPayTradeView(applyform, getPayAccountNo(item.PayType, Math.Abs(applyform.PayBill.Applier.Amount), applyform.PurchaserId), "");
                    }
                }
                if (item.PayType == WithholdingAccountType.Alipay)
                {
                    tradeView.BuyerEmail = item.PayAccountNo;
                }
                try
                {
                    if (string.IsNullOrEmpty(msg))
                    {
                        global::PoolPay.DomainModel.Trade.PayTrade pay = AutoPayService.AutoPay(tradeView, item.PayType);
                        if (item.PayType == WithholdingAccountType.Poolpay)
                        {
                            //如果是国付通代扣就直接修改订单状态
                            if (pay != null && pay.Status == global::PoolPay.DataTransferObject.PayStatus.PaySuccess)
                            {
                                NotifyService.PaySuccess(item.OrderId, pay.CustomParameter, pay.Id.ToString(), pay.FillChargeId.ToString(), pay.PayDate.Value, "", (pay.BuyerAccount.Character as global::PoolPay.DomainModel.Accounts.CreditAccount) == null ? "0" : "1", pay.BuyerAccount.AccountNo);
                            }
                        }
                        showMessage("处理成功");
                    }
                    else
                    {
                        showMessage("处理失败" + Environment.NewLine + "原因:" + msg);
                    }
                }
                catch (Exception ex)
                {
                    showMessage("处理失败" + Environment.NewLine + "原因:" + ex.Message);
                }
                AutoPayService.UpdateProcess(item.OrderId);
                System.Threading.Thread.Sleep(50);
            }
            showMessage("当前批次处理结束,共处理 " + noPorcess.Count + " 条");
        }