예제 #1
0
    /// <summary>
    /// 取消订单
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnCancelOrder_Click(object sender, EventArgs e)
    {
        string showMsg = "";


        try
        {
            //扩展参数
            ParamEx pe = new ParamEx();
            pe.UsePIDChannel = this.KongZhiXiTong != null && this.KongZhiXiTong.Contains("|48|") ? 2 : 0;
            //发送指令管理类
            SendInsManage SendIns = new SendInsManage(mUser.LoginName, mCompany.UninCode, pe, configparam);

            string          id    = Hid_id.Value; //订单id
            Tb_Ticket_Order Order = new Tb_Ticket_OrderBLL().GetTicketOrderById(id);

            if (Order != null)  ////判断订单状态
            {
                bool restult = true;
                //白屏预订 新订单等待支付 并且开启退废票(分离、取消)编码的权限 才取消编码
                if (Order.OrderSourceType == 1 && Order.OrderStatusCode == 1 && KongZhiXiTong.Contains("|32|"))
                {
                    #region 1.白屏预订2.新订单等待支付3.开启退废票(分离、取消)编码的权限  判断是否需要取消编码

                    if (Hid_isCancelPnr.Value == "1") // 取消编码
                    {
                        Hid_isCancelPnr.Value = "0";

                        if (Order.PNR != "")
                        {
                            string ErrMsg = "";
                            PnrAnalysis.PnrModel pnrModel = SendIns.GetPnr(Order.PNR, out ErrMsg);
                            //编码状态不是已经出票的PNR
                            if (pnrModel != null && !pnrModel.PnrStatus.Contains("RR"))
                            {
                                //调用取消编码的方法
                                restult = SendIns.CancelPnr(Order.PNR, Order.Office);
                            }
                        }
                        showMsg = restult == true ? "取消编码成功!" : showMsg;
                    }
                    else
                    {
                        showMsg = "取消订单,用户需要保留编码!";
                    }

                    #endregion
                }
                else
                {
                    showMsg = "取消订单";
                }



                //取消订单
                restult = new PbProject.Logic.Order.Tb_Ticket_OrderBLL().CancelOrder(Order, mUser, mCompany, showMsg);

                if (restult)
                {
                    OrderListDataBind();

                    showMsg = "取消订单成功!";
                }
                else
                {
                    showMsg = "取消订单失败!";
                }
            }
            else
            {
                showMsg = "该订单不能取消!!!";
            }
        }
        catch (Exception ex)
        {
            showMsg = "操作失败";
        }

        ScriptManager.RegisterStartupScript(this, GetType(), DateTime.Now.Ticks.ToString(), "showdialog('" + showMsg + "');", true);
    }
예제 #2
0
        /// <summary>
        /// 分离或者取消编码
        /// </summary>
        /// <returns></returns>
        private string PnrHandle(Tb_Ticket_Order Order, SendInsManage SendIns, StringBuilder sbLog, List <HashObject> selList, int INFCount)
        {
            string ErrMsg = "";

            try
            {
                if (Order != null && Order.PNR != "" && Order.PNR.Trim().Length == 6)
                {
                    PnrAnalysis.PnrModel pnrMode = SendIns.GetPnr(Order.PNR.Trim(), out ErrMsg);
                    if (pnrMode != null)
                    {
                        if (ErrMsg.Contains("授权"))
                        {
                            string[] strAuthArr = ErrMsg.Split('#')[1].Split('|');
                            ErrMsg = "";
                            foreach (string item in strAuthArr)
                            {
                                ErrMsg += "RMK TJ AUTH " + item + "<br/>";
                            }
                            ErrMsg = "需要授权,授权指令:<br />" + ErrMsg;
                            sbLog.Append("提取编码信息失败," + ErrMsg);
                        }
                        else
                        {
                            if (!pnrMode.PnrStatus.Contains("XX"))
                            {
                                if (pnrMode.PnrStatus.Contains("NO"))
                                {
                                    ErrMsg = "编码(" + Order.PNR + ")状态为NO,系统取消编码失败!";
                                    sbLog.Append(ErrMsg);
                                }
                                else if (pnrMode.PnrStatus.Contains("RR"))
                                {
                                    ErrMsg = "编码(" + Order.PNR + ")状态为RR,该编码已出票,不能取消!";
                                    sbLog.Append(ErrMsg);
                                }
                                else
                                {
                                    string TicketNumber = "";
                                    string Cmd = "", Office = "", RecvData = "";
                                    //用于分离编码的乘客姓名 不含婴儿
                                    List <string> pnameList = new List <string>();
                                    //循环选择的乘机人
                                    foreach (HashObject hashParam in selList)
                                    {
                                        if (hashParam["pasPType"].ToString() != "3")
                                        {
                                            pnameList.Add(hashParam["pasName"].ToString());
                                        }
                                        TicketNumber = hashParam["pasTicketNum"].ToString();
                                        if (TicketNumber != "" && !KongZhiXiTong.Contains("|69|"))
                                        {
                                            Office   = hashParam["office"].ToString();
                                            Cmd      = "DETR:TN/" + TicketNumber;
                                            RecvData = SendIns.Send(Cmd, ref Office, 0);
                                            if (!RecvData.Contains("OPEN FOR USE"))
                                            {
                                                ErrMsg = "票号(" + TicketNumber + ")状态异常,不能提交申请!";
                                                sbLog.Append(ErrMsg);
                                                break;
                                            }
                                        }
                                    }
                                    //没有出错时
                                    if (ErrMsg == "")
                                    {
                                        if (INFCount > 0)
                                        {
                                            //编码状态不是已经出票的PNR
                                            if (pnrMode != null && !pnrMode.PnrStatus.Contains("RR"))
                                            {
                                                //有婴儿直接提交
                                                SendIns.CancelPnr(Order.PNR, Order.Office);
                                            }
                                        }
                                        else
                                        {
                                            //编码状态不是已经出票的PNR
                                            if (pnrMode != null)
                                            {
                                                if (!pnrMode.PnrStatus.Contains("RR"))
                                                {
                                                    //取消编码
                                                    if (SendIns.CancelPnr(Order.PNR, Order.Office))
                                                    {
                                                        ErrMsg = "";
                                                    }
                                                    else
                                                    {
                                                        ErrMsg = "取消编码(" + Order.PNR + ")失败!";
                                                    }
                                                }
                                                else
                                                {
                                                    ErrMsg = "编码状态为RR的编码,不能取消!";
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        sbLog.Append("提取编码信息失败,系统取消编码失败!");
                    }
                }
                else
                {
                    sbLog.Append("订单不存在!");
                }
            }
            catch (Exception ex)
            {
                ErrMsg = ex.Message;
            }
            finally
            {
            }
            return(ErrMsg);
        }
예제 #3
0
    /// <summary>
    /// 机票支付
    /// </summary>
    /// <param name="id">订单</param>
    /// <param name="payWay">支付方式</param>
    /// <param name="code">网银银行代码</param>
    private void TicketOrderPay(string id, string payWay, string code)
    {
        string msgShow = "";
        string url     = string.Empty;

        try
        {
            bool   result     = false;
            string payDetails = "";//分账明细

            #region 获取订单信息

            //PayWay 支付方式:1支付宝、2快钱、3汇付、4财付通、5支付宝网银、6快钱网银 、7汇付网银、8财付通网银、
            //9支付宝pos、10快钱pos、11汇付pos、12财付通pos、13易宝pos、14账户支付、15收银
            //string tempSqlWhere = " OrderId='" + id + "'";

            string tempSqlWhere = " id='" + id + "'";
            List <Tb_Ticket_Order> bParametersList = new PbProject.Logic.Order.Tb_Ticket_OrderBLL().GetListBySqlWhere(tempSqlWhere);
            Tb_Ticket_Order        mOrder          = null;

            if (bParametersList != null && bParametersList.Count == 1)
            {
                mOrder = bParametersList[0];

                #region 判断PNR状态是否取消等,取消就不能支付
                if (mOrder.OrderStatusCode != 1 && mOrder.OrderStatusCode != 9)
                {
                    msgShow = "订单异常,不能支付!";
                }
                #endregion

                if (this.KongZhiXiTong.Contains("|101|"))
                {
                    //超过 1 小时后的订单能支付
                }
                else
                {
                    #region  超过1个小时不能支付
                    if (mOrder.OrderStatusCode == 1)
                    {
                        DateTime dtTime = DateTime.Now;
                        if (dtTime.CompareTo(mOrder.CreateTime.AddHours(1)) > 0)
                        {
                            // 超过1个小时不能支付
                            msgShow = "超过1个小时的订单不能支付,请重新生成订单进行支付!";
                        }
                    }
                    #endregion
                }

                #region 判断PNR状态是否取消等,取消就不能支付

                //扩展参数
                ParamEx pe = new ParamEx();
                pe.UsePIDChannel = this.KongZhiXiTong != null && this.KongZhiXiTong.Contains("|48|") ? 2 : 0;
                SendInsManage sendins = new SendInsManage(mUser.LoginName, mCompany.UninCode, pe, this.configparam);
                string        ErrMsg;

                if (mOrder.OrderSourceType == 1 && mOrder.A9 != "1")
                {
                    PnrAnalysis.PnrModel PnrModel = sendins.GetPnr(mOrder.PNR, mOrder.Office, out ErrMsg);

                    if (ErrMsg.IndexOf("已被取消") != -1)
                    {
                        msgShow = "此PNR(" + mOrder.PNR + ")状态为异常,请检查PNR状态后再试!";
                    }
                    else if (PnrModel != null && ErrMsg == "")
                    {
                        if (PnrModel.PassengerNameIsCorrent)
                        {
                            if (KongZhiXiTong != null && KongZhiXiTong.Contains("|23|"))
                            {
                                if ((PnrModel._OldPnrContent.Contains("THIS PNR WAS ENTIRELY CANCELLED") && PnrModel._OldPnrContent.ToUpper().Contains(mOrder.PNR.ToUpper())))
                                {
                                    msgShow = "此PNR(" + mOrder.PNR + ")状态为异常,请检查PNR状态后再试!";
                                }
                                else
                                {
                                    string PnrStatus = PnrModel.PnrStatus;
                                    if (string.IsNullOrEmpty(PnrStatus))
                                    {
                                        msgShow = "此PNR(" + mOrder.PNR + ")数据异常,请检查PNR状态后再试!";
                                    }
                                    else
                                    {
                                        if (!PnrStatus.Contains("HK") && !PnrStatus.Contains("DK") && !PnrStatus.Contains("RR") && !PnrStatus.Contains("KK"))
                                        {
                                            msgShow = "此PNR(" + mOrder.PNR + ")状态为:" + PnrStatus + ",请检查PNR状态后再试!";
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            msgShow = "此PNR(" + mOrder.PNR + ")中乘机人名字:" + string.Join(",", PnrModel.ErrorPassengerNameList.ToArray()) + " 不正确!";
                        }
                    }
                }

                #endregion 判断PNR状态是否取消等,取消就不能支付

                if (msgShow == "")
                {
                    mOrder.PayWay = int.Parse(payWay);

                    // 切换支付方式:修改订单账单明细数据
                    result = new PbProject.Logic.Pay.Bill().UpdateOrderAndTicketPayDetail(mOrder);

                    if (result == true)
                    {
                        //获取分账明细
                        payDetails = new PbProject.Logic.Pay.Bill().PayDetails(payWay, mOrder.OrderId);
                        result     = string.IsNullOrEmpty(payDetails) ? false : result;
                    }
                }
            }

            #endregion

            if (result)
            {
                #region 支付

                if (payWay == "1" || payWay == "5")//支付宝
                {
                    #region 支付参数赋值

                    AliPayParam aliPayParam = new AliPayParam();

                    aliPayParam.Body               = "机票订单";
                    aliPayParam.DefaultBank        = code;
                    aliPayParam.Extra_common_param = mUser.id.ToString(); //自定义:操作人id
                    aliPayParam.Out_trade_no       = mOrder.OrderId;
                    aliPayParam.Royalty_parameters = payDetails;          //分账明细
                    aliPayParam.Subject            = "机票订单";
                    aliPayParam.Total_fee          = mOrder.PayMoney.ToString("f2");


                    if ((!string.IsNullOrEmpty(mOrder.A9) && mOrder.A9 == "1") || string.IsNullOrEmpty(mOrder.PNR))
                    {
                        //不检查编码

                        OnErrorNew("不检查编码,PNR:" + mOrder.PNR, false);
                    }
                    else
                    {
                        //需要检查编码
                        #region 判断PNR

                        tempSqlWhere = " PNR='" + mOrder.PNR + "' and OrderStatusCode=4 and (PayWay=1 or PayWay=5)";
                        List <Tb_Ticket_Order> orderListNew = new PbProject.Logic.Order.Tb_Ticket_OrderBLL().GetListBySqlWhere(tempSqlWhere);

                        if (orderListNew == null || orderListNew.Count == 0)
                        {
                            //先看该订单支付已经支付过
                            aliPayParam.Extend_param = "PNR^" + mOrder.PNR;
                        }
                        else
                        {
                            OnErrorNew("该编码已经有支付记录,PNR:" + mOrder.PNR, false);
                        }

                        #endregion
                    }

                    #endregion

                    msgShow = new PbProject.Logic.Pay.AliPay().GetPay(aliPayParam);
                }
                else if (payWay == "2" || payWay == "6")//快钱
                {
                    PbProject.Logic.Pay.DataAction d = new PbProject.Logic.Pay.DataAction();
                    decimal tempMoney = d.FourToFiveNum(mOrder.PayMoney * 0.001M, 2) * 100; //手续费

                    #region 支付参数赋值
                    _99BillParam billParam = new _99BillParam();
                    billParam.Bankcode = code;
                    billParam.Detail   = payDetails;               //分账明细
                    billParam.Ext      = mUser.id.ToString();      //操作人id
                    billParam.Money    = tempMoney.ToString("f0"); //供应商收款
                    billParam.Orderid  = mOrder.OrderId;
                    //billParam.Payid = "*****@*****.**";
                    billParam.Payid   = "";
                    billParam.Paytype = (string.IsNullOrEmpty(code)) ? "00" : "10";
                    billParam.Pname   = "机票订单";
                    billParam.Price   = (mOrder.PayMoney * 100).ToString("f0"); //供应商收款
                    billParam.Ptype   = "1";

                    #endregion

                    msgShow = new PbProject.Logic.Pay._99Bill().GetPay(billParam);
                }
                else if (payWay == "3" || payWay == "7")//汇付天下
                {
                    #region 支付参数赋值

                    ChinaPnrParam chinaPnrParam = new ChinaPnrParam();
                    chinaPnrParam.Orderid = mOrder.OrderId;                 //订单号
                    chinaPnrParam.Price   = mOrder.PayMoney.ToString("f2"); //订单总价
                    chinaPnrParam.Merpriv = mUser.id.ToString();            //自定义字段
                    chinaPnrParam.Details = payDetails;                     //分账明细
                    chinaPnrParam.Pnr     = mOrder.PNR;

                    #endregion

                    msgShow = new PbProject.Logic.Pay.ChinaPnr().Buy(chinaPnrParam);
                }
                else if (payWay == "4" || payWay == "8" || payWay == "40")// 财付通
                {
                    string queryParam = string.Format("orderid={0}&total_tee={1}&userhostaddress={2}&attach={3}&busargs={4}&busdesc={5}&banktype={6}",
                                                      mOrder.OrderId, (mOrder.PayMoney * 100).ToString("F0"), Request.UserHostAddress, mUser.id.ToString(), payDetails, string.Format("{0}^{1}^{2}^{3}^{4}^{5}", mOrder.PNR, mOrder.Travel, mOrder.PassengerNumber, mUser.id.ToString(), mOrder.CreateUserName, "13800000000"), code);
                    url = string.Format("http://lzh.mypb.cn/Pay/TenPay.aspx?{0}", queryParam);
                    // url = string.Format("TenPay.aspx?{0}", queryParam);
                }

                #endregion
            }
            else
            {
                OnErrorNew("支付错误:" + payDetails, false);

                msgShow = string.IsNullOrEmpty(msgShow) ? "支付错误" : msgShow;
            }
        }
        catch (Exception ex)
        {
            msgShow = "支付异常";

            OnErrorNew(msgShow + ex.ToString(), false);
        }
        if (!string.IsNullOrEmpty(url))
        {
            Response.Redirect(url);
        }
        else
        {
            OnErrorNew(msgShow, false);
            Response.Write(msgShow);
        }
    }