Esempio n. 1
0
        public PaymentGEPPaymentProcessResultT PaymentExecuteOrder(
			PaymentOrderMultiParamT orderParam
			, PaymentOrderMultiParamEtcT orderParamEtc
			, PaymentInfoCheckT payMethodtInfo
			, List<PaymentDataOrderInfoT> paymentDataOrderInfoList
			, List<PaymentDataCostBasisInfoT> paymentDataCostBasisInfoList
			, List<PaymentOrderItemCostInfoT> paymentOrderItemCostInfoList)
        {
            PaymentGEPPaymentProcessResultT orderResult = new PaymentGEPPaymentProcessResultT();
            PaymentProcessQueryBiz biz = new PaymentProcessQueryBiz();

            orderResult.Result = new GEPBaseResultT();

            string acntNo = string.Empty;
            string cashpayWay = "M";
            int affectedRowCount = 0;

            #region 미리 처리할 것들

            #endregion

            #region 주문 중 수량 입력

            try
            {
                biz.UpdatePaymentOrderCountToOrderBufSell(orderParam.PackNo);
            }
            catch
            {
                throw new PaymentProcessBizException(-742, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
            }

            #endregion

            #region 결제 수단 처리

            // 현금 계좌 생성
            if (orderParam.AcntType.Equals("A3", StringComparison.InvariantCultureIgnoreCase))
            {
                if (orderParam.CardCash.Equals("CASH", StringComparison.InvariantCultureIgnoreCase))
                {
                    // 일반계좌 생성
                    if (string.IsNullOrEmpty(orderParam.Vaccount) || orderParam.Vaccount.Length < 3)
                    {
                        cashpayWay = "M";

                        if (orderParam.MemberWay.Equals("NON", StringComparison.InvariantCultureIgnoreCase))
                        {
                            acntNo = "300792725";
                        }
                        else
                        {
                            PaymentCashAccountInfoT customerCashAccountInfo = biz.GetCustomerCashAccountInfo(orderParam.CustNo, cashpayWay);

                            acntNo = customerCashAccountInfo != null ? customerCashAccountInfo.AcntNo : string.Empty;
                        }
                    }
                    else // 가상계좌 생성
                    {
                        cashpayWay = "V";

                        // 잘못된 가상계좌 튕겨내기
                        if (!biz.GetExistAccountMCash(orderParam.CustNo, orderParam.VacntNo, cashpayWay, orderParam.Vaccount).IsExist)
                        {
                            throw new PaymentProcessBizException(-334, "가상계좌 정보에 이상이 있습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                        }

                        acntNo = orderParam.Vaccount;

                    }

                    if (string.IsNullOrEmpty(acntNo))
                    {
                        throw new PaymentProcessBizException(-321, "온라인 입금을 위한 계좌 정보를 찾지 못했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                    }
                }
            }
            else if (orderParam.AcntType.Equals("I1", StringComparison.InvariantCultureIgnoreCase)) // Paypal 계좌 생성
            {
                if (orderParam.CardCash.Equals("GBANK_PAYPAL", StringComparison.InvariantCultureIgnoreCase))
                {
                    cashpayWay = "P";

                    try
                    {
                        PaymentGlobalAccountInfoT customerGlobalAccountInfo = biz.GetCustomerGlobalAccountInfo(orderParam.CustNo, cashpayWay);
                        acntNo = customerGlobalAccountInfo != null ? customerGlobalAccountInfo.AcntNo : string.Empty;

                        if (string.IsNullOrEmpty(acntNo) || acntNo.Length < 3)
                        {
                            string result = biz.MakePersonalAccount(orderParam.CustNo, orderParam.AcntType, orderParam.Gbank.ToString()
                                , string.Empty, string.Empty, string.Empty, 0, string.Empty, string.Empty
                                , string.Empty, string.Empty, string.Empty, string.Empty, orderParam.CardCash
                                , string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, 0, null
                                , string.Empty, "Y", 0, string.Empty);

                            acntNo = result;
                        }
                    }
                    catch
                    {
                        throw new PaymentProcessBizException(-333, "외화입금 계좌 생성중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                    }

                    if (string.IsNullOrEmpty(acntNo))
                    {
                        throw new PaymentProcessBizException(-322, "온라인 입금을 위한 계좌 정보를 찾지 못했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                    }
                    else if (acntNo == "-1")
                    {
                        throw new PaymentProcessBizException(-333, "외화입금 계좌 생성중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                    }

                }
            }
            else if (orderParam.AcntType.Equals("A2", StringComparison.InvariantCultureIgnoreCase)
                || orderParam.AcntType.Equals("A7", StringComparison.InvariantCultureIgnoreCase)) // 카드 계좌 생성
            {
                cashpayWay = "M";

                try
                {
                    decimal totalAcntMoney = paymentDataOrderInfoList.Sum(x => (decimal)(x.OrderPrice * x.OrderCnt) + x.SelItemPrice + x.DeliveryFee - x.CostPrice);

                    string result = biz.MakePersonalAccount(orderParam.CustNo, orderParam.AcntType, payMethodtInfo.MasterCard
                        , orderParam.CardNumber, orderParam.CardYear, orderParam.CardMonth, orderParam.Installmonth, orderParam.CardPwd, orderParam.SocialNo2
                        , orderParam.KVPCardCode, payMethodtInfo.SessionKey, payMethodtInfo.EncData, payMethodtInfo.AppType, string.Empty
                        , string.Empty, string.Empty, string.Empty, string.Empty, orderParam.Eci, 0, null
                        , orderParamEtc.OrderJaehuID, orderParamEtc.DirectYN, totalAcntMoney, orderParam.HalbuType);

                    acntNo = result;
                }
                catch
                {
                    throw new PaymentProcessBizException(-338, "카드 계좌 처리작업중 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }

                if (string.IsNullOrEmpty(acntNo) || acntNo == "-1")
                {
                    throw new PaymentProcessBizException(-328, "카드 계좌 생성중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }
            }
            else
            {
                throw new PaymentProcessBizException(-376, "결제 정보가 잘못 되었습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
            }

            // PayPal Express CheckOut
            if (orderParam.CardCash.Equals("GBANK_PAYPAL", StringComparison.InvariantCultureIgnoreCase)
                && orderParam.PaypalToken.Trim().Length != 0)
            {
                if (biz.GetExistPaypalPaymentInfo(orderParam.PaypalToken).IsExist)
                {
                    throw new PaymentProcessBizException(-727, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }

                try
                {

                    PaymentPaypalPaymentInfoT paypalPaymentInfo = biz.GetPaypalPaymentInfo(orderParam.PaypalToken);

                    biz.UpdatePaypalPaymentInfo(orderParam.PackNo, orderParam.PaypalToken, paypalPaymentInfo == null || string.IsNullOrEmpty(paypalPaymentInfo.CustNo) ? orderParam.CustNo : string.Empty);
                }
                catch
                {
                    throw new PaymentProcessBizException(-728, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }
            }

            // 카드 정보 기록
            if (orderParam.AcntType.Equals("A2", StringComparison.InvariantCultureIgnoreCase)
               || orderParam.AcntType.Equals("A7", StringComparison.InvariantCultureIgnoreCase))
            {
                try
                {
                    biz.InsertCardInfo(orderParam.PackNo, payMethodtInfo.SessionKey, payMethodtInfo.EncData, payMethodtInfo.AppType
                        , orderParam.Installmonth, orderParam.CardPwd, orderParam.RemoteAddr, orderParam.Eci
                        , (string.IsNullOrEmpty(orderParam.PaySaveCardYN) ? "N" : orderParam.PaySaveCardYN)
                        , orderParam.SocialNo2, orderParam.HalbuType, orderParam.KVPCardCode, orderParam.OrderDateTime);
                }
                catch
                {
                    throw new PaymentProcessBizException(-330, "주문카드 정보 기록중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }
            }

            #endregion

            #region 경품권 서비스 관련

            if (orderParam.MemberWay.Equals("MEM", StringComparison.InvariantCultureIgnoreCase)
                && !orderParam.OrderWayKind.Equals("BAR", StringComparison.InvariantCultureIgnoreCase))
            {
                try
                {
                    int insertedRowCount = biz.InsertSticketAccHistory(orderParam.PackNo, orderParam.CustNo, orderParam.LoginID);

                    if (insertedRowCount > 0)
                    {
                        if (biz.GetExistSticketAccount(orderParam.CustNo).IsExist)
                        {
                            biz.UpdateStickerAccount(orderParam.PackNo, orderParam.CustNo, orderParam.LoginID, orderParam.OrderDateTime);
                        }
                        else
                        {
                            biz.InsertStickerAccount(orderParam.PackNo, orderParam.CustNo, orderParam.LoginID);
                        }
                    }
                }
                catch
                {
                    throw new PaymentProcessBizException(-417, "경품권 서비스 관련 오류 발생.");
                }
            }

            #endregion

            #region 세금계산서 및 현금영수증 요청 처리

            if (orderParam.TaxRegNo.Length >= 9)
            {
                string cardKind = (orderParam.IsCorpCard.Equals("Y", StringComparison.InvariantCultureIgnoreCase) ? "Y" : (orderParam.IsCorpCard.Equals("N", StringComparison.InvariantCultureIgnoreCase) ? "N" : string.Empty));

                try
                {
                    biz.InsertRequestTaxCheck(orderParam.PackNo, orderParam.CustNo, orderParam.TaxRegNo
                        , orderParam.TaxCompanyNm, orderParam.TaxBoss, orderParam.TaxAddress, orderParam.TaxRcvAddress
                        , orderParam.TaxZipCode, orderParam.TaxCategory, orderParam.TaxKind, cardKind
                        , orderParam.TaxEmail, orderParam.TaxPhone, orderParam.TaxMemo
                        , orderParam.TaxChargeName, orderParam.TaxChargeName, orderParam.OrderDateTime);
                }
                catch
                {
                    throw new PaymentProcessBizException(-808, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다");
                }

                if (orderParam.CashRegNo.Length >= 9)
                {
                    if (paymentDataOrderInfoList
                        .Where(x => x.TaxIssueYn.Equals("N", StringComparison.InvariantCultureIgnoreCase) && x.CashIssueYn.Equals("Y", StringComparison.InvariantCultureIgnoreCase))
                        .Sum(x => (decimal)(x.OrderPrice * x.OrderCnt) + x.SelItemPrice + x.DeliveryFee - x.CostPrice) >= 10)
                    {
                        try
                        {
                            List<PaymentDataOrderInfoT> cashReceiptDataOrderList = paymentDataOrderInfoList.Where(x => x.TaxIssueYn.Equals("N", StringComparison.InvariantCultureIgnoreCase) && x.CashIssueYn.Equals("Y", StringComparison.InvariantCultureIgnoreCase)).ToList<PaymentDataOrderInfoT>();

                            foreach (PaymentDataOrderInfoT item in cashReceiptDataOrderList)
                            {
                                biz.InsertCashReceipt(orderParam.CashUseType, orderParam.CashRegNo, orderParam.CashName
                                    , item.OrderNo, item.ItemNo, orderParam.CashPhone, orderParam.CashEmail
                                    , (item.SelItemPrice + item.DeliveryFee - item.CostPrice), orderParam.CustNo
                                    , "Y", orderParam.IdFlag);
                            }
                        }
                        catch
                        {
                            throw new PaymentProcessBizException(-809, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다");
                        }
                    }
                }
            }
            else
            {
                if (orderParam.CashRegNo.Length >= 9)
                {
                    if (paymentDataOrderInfoList
                        .Where(x => x.CashIssueYn.Equals("Y", StringComparison.InvariantCultureIgnoreCase))
                        .Sum(x => (decimal)(x.OrderPrice * x.OrderCnt) + x.SelItemPrice + x.DeliveryFee - x.CostPrice) >= 10)
                    {
                        try
                        {
                            List<PaymentDataOrderInfoT> cashReceiptDataOrderList = paymentDataOrderInfoList.Where(x => x.CashIssueYn.Equals("Y", StringComparison.InvariantCultureIgnoreCase)).ToList<PaymentDataOrderInfoT>();

                            foreach (PaymentDataOrderInfoT item in cashReceiptDataOrderList)
                            {
                                biz.InsertCashReceipt(orderParam.CashUseType, orderParam.CashRegNo, orderParam.CashName
                                    , item.OrderNo, item.ItemNo, orderParam.CashPhone, orderParam.CashEmail
                                    , (item.SelItemPrice + item.DeliveryFee - item.CostPrice), orderParam.CustNo
                                    , "Y", orderParam.IdFlag);
                            }
                        }
                        catch
                        {
                            throw new PaymentProcessBizException(-810, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다");
                        }
                    }
                }
            }

            #endregion

            #region 공급원가 입력

            try
            {
                biz.InsertPaymentDsorderSttlData(paymentOrderItemCostInfoList);
            }
            catch
            {
                throw new PaymentProcessBizException(-741, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
            }

            #endregion

            #region 할인정보 입력

            if (paymentDataCostBasisInfoList.Count > 0)
            {
                try
                {
                    biz.InsertDsorderCostbasisInfo(orderParam.PackNo, orderParam.OrderDateTime);
                }
                catch
                {
                    throw new PaymentProcessBizException(-113, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }
            }

            #endregion

            #region 현금성 도용 예외처리

            if (biz.GetExistCashTypeGoods(orderParam.PackNo).IsExist)
            {
                if (orderParam.AcntType.Equals("AM", StringComparison.InvariantCultureIgnoreCase) ||
                    orderParam.AcntType.Equals("A8", StringComparison.InvariantCultureIgnoreCase) ||
                    (orderParam.AcntType.Equals("A3", StringComparison.InvariantCultureIgnoreCase) &&
                    cashpayWay.Equals("V", StringComparison.InvariantCultureIgnoreCase)))
                {
                    throw new PaymentProcessBizException(-10, "결제가 불가능 합니다.");
                }
            }

            #endregion

            #region 사자 주문 입력

            // dsorderindex 테이블에 입력하기
            affectedRowCount = 0;
            try
            {
                affectedRowCount = biz.InsertDsorderIndex(orderParam.PackNo, orderParam.OrderDateTime);
            }
            catch
            {
                throw new PaymentProcessBizException(-708, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
            }

            if (affectedRowCount != orderParam.ItemCount)
            {
                throw new PaymentProcessBizException(-708, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
            }

            // dsorder 테이블에 입력하기
            affectedRowCount = 0;
            try
            {
                affectedRowCount = biz.InsertDsorder(orderParam.PackNo, orderParam.CustNo, orderParam.TaxRegNo
                    , acntNo, orderParam.ReceiverName, orderParam.ReceiverZipCode, orderParam.ReceiverAddr1, orderParam.ReceiverAddr2
                    , orderParam.AcntType, orderParam.ReceiverPhoneNo, orderParam.ReceiverHpNo, orderParam.BuyerEmail
                    , orderParam.Gbank, orderParam.DepositNm, orderParam.OnCreditYN, orderParam.Vaccount
                    , orderParam.FreeInterestNo, orderParam.HalbuType, orderParam.AddressNo, cashpayWay, orderParam.OrderDateTime);
            }
            catch
            {
                throw new PaymentProcessBizException(-709, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
            }

            if (affectedRowCount != orderParam.ItemCount)
            {
                throw new PaymentProcessBizException(-709, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
            }

            // dsorder_sub 테이블에 입력하기
            try
            {
                biz.InsertDsorderSub(orderParam.PackNo);
            }
            catch
            {
                throw new PaymentProcessBizException(-720, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
            }

            #endregion

            #region 필수구성/선택옵션 정보 입력

            try
            {
                biz.InsertDsselorder(orderParam.BasketPID, orderParam.PackNo);
            }
            catch
            {
                throw new PaymentProcessBizException(-710, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
            }

            #endregion

            #region 필수구성/선택옵션 가격 조작 방지 체크

            PaymentCurrentSelPriceInfoT currentSelPriceInfo = biz.GetCurrentSelPriceInfo(orderParam.PackNo);

            if (currentSelPriceInfo != null)
            {
                if (currentSelPriceInfo.SelItemPriceDb != currentSelPriceInfo.SelItemPriceIn)
                {
                    throw new PaymentProcessBizException(-807, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }
            }

            #endregion

            #region G-Plus 카드 쿠폰 사용내용 기록

            if (paymentDataCostBasisInfoList.Any(x => x.BasisKind.Equals("PCP", StringComparison.InvariantCultureIgnoreCase)) && orderParam.PaymentCode.Equals("Po_HN_G", StringComparison.InvariantCultureIgnoreCase))
            {
                string useMonth;

                if (orderParam.OrderDateTime.Day < 5)
                {
                    useMonth = orderParam.OrderDateTime.AddMonths(-1).Year.ToString() + orderParam.OrderDateTime.AddMonths(-1).Month.ToString().PadLeft(2, '0');
                }
                else
                {
                    useMonth = orderParam.OrderDateTime.Year.ToString() + orderParam.OrderDateTime.Month.ToString().PadLeft(2, '0');
                }

                affectedRowCount = 0;
                int gplusCostBasisNo = 0;
            #if DEBUG || PAYMENT_DEBUG
                gplusCostBasisNo = 2238819;
            #else
                gplusCostBasisNo = 2238819;
            #endif
                try
                {
                    affectedRowCount = biz.InsertGlusUsedCouponInfo(orderParam.PackNo, orderParam.CustNo, orderParam.PaymentCode
                        , "SN", useMonth, gplusCostBasisNo, orderParam.OrderDateTime);
                }
                catch
                {
                    throw new PaymentProcessBizException(-118, "배송비 할인쿠폰 적용 에러입니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }

                if (affectedRowCount > 0)
                {
                    try
                    {
                        biz.UpdateUsedCouponSum(orderParam.CustNo, orderParam.LoginID, useMonth, affectedRowCount, orderParam.OrderDateTime);
                    }
                    catch
                    {
                        throw new PaymentProcessBizException(-119, "배송비 할인쿠폰 적용 에러입니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                    }
                }
            }

            #endregion

            #region 위약금 정보 입력

            if (paymentDataOrderInfoList.Any(x => x.PolicyNo != 0))
            {
                try
                {
                    biz.InsertChargeOffOrder(orderParam.PackNo, orderParam.CustNo, orderParam.OrderDateTime);
                }
                catch
                {
                    throw new PaymentProcessBizException(-504, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }
            }

            #endregion

            #region 외화입금 정보 입력

            if (orderParam.CardCash.Equals("GBANK_PAYPAL", StringComparison.InvariantCultureIgnoreCase))
            {
                int gubunMethod;
                string paymentMthd;
                decimal gExchangeRate;

                if (orderParam.GbankGubun.Equals("citibank", StringComparison.InvariantCultureIgnoreCase))
                {
                    gubunMethod = 2000;
                    paymentMthd = "02";
                }
                else if (orderParam.GbankGubun.Equals("resonabank", StringComparison.InvariantCultureIgnoreCase))
                {
                    gubunMethod = 30000;
                    paymentMthd = "03";
                }
                else if (orderParam.GbankGubun.Equals("paypal_express", StringComparison.InvariantCultureIgnoreCase))
                {
                    gubunMethod = 110000;
                    paymentMthd = "01";
                }
                else
                {
                    gubunMethod = 10000;
                    paymentMthd = "01";
                }

                try
                {
                    gExchangeRate = biz.GetExchangeRate(paymentMthd, orderParam.OrderDateTime);
                    biz.InsertDsgbankorder(orderParam.PackNo, gubunMethod, paymentMthd, gExchangeRate, orderParam.ForeignMoney, orderParam.OrderDateTime);
                }
                catch
                {
                    throw new PaymentProcessBizException(-335, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }

            }

            #endregion

            #region 개인별 할인쿠폰 사용여부 변경

            if (paymentDataCostBasisInfoList.Any(x => x.BasisKind.Equals("PCP", StringComparison.InvariantCultureIgnoreCase)))
            {
                // 쿠폰 사용내역 업데이트
                try
                {
                    biz.UpdateDcouponDetail(orderParam.PackNo, orderParam.CustNo, orderParam.LoginID, orderParam.OrderDateTime);
                }
                catch
                {
                    throw new PaymentProcessBizException(-114, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }

                // 쿠폰 사용 히스토리 입력
                try
                {
                    biz.InsertOrderCouponHistory(orderParam.PackNo, orderParam.CustNo, orderParam.LoginID, orderParam.OrderDateTime);
                }
                catch
                {
                    throw new PaymentProcessBizException(-115, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }
            }

            #endregion

            #region 복수구매 할인 정보 기록

            if (paymentDataOrderInfoList.Any(x => x.BundCondNo > 0))
            {
                try
                {
                    biz.InsertBundKeysProc(orderParam.PackNo, orderParam.OrderDateTime);
                }
                catch
                {
                    throw new PaymentProcessBizException(-116, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }
            }

            #endregion

            #region 세트구매 할인 정보 기록

            if (paymentDataOrderInfoList.Any(x => x.SetCostNo > 0))
            {
                try
                {
                    biz.InsertDsSetCostOrder(orderParam.PackNo, orderParam.LoginID, orderParam.OrderDateTime);
                }
                catch
                {
                    throw new PaymentProcessBizException(-129, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }
            }

            #endregion

            #region 묶음구매 할인 정보 기록

            if (paymentDataOrderInfoList.Any(x => x.PackCostNo > 0))
            {
                try
                {
                    biz.InsertDsSetCostOrder(orderParam.PackNo, orderParam.LoginID, orderParam.OrderDateTime);
                }
                catch
                {
                    throw new PaymentProcessBizException(-133, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }
            }

            #endregion

            #region 결제에 따른 코드 추가

            if (!string.IsNullOrEmpty(orderParam.PaymentCode) && orderParam.PaymentCode.Length > 0)
            {
                try
                {
                    biz.UpdateDscontrPolicySttlCode(orderParam.PackNo, orderParam.PaymentCode);
                }
                catch
                {
                    throw new PaymentProcessBizException(-133, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }
            }

            #endregion

            #region 현금잔고 주문시 장바구니 번호 입력

            if (orderParam.AcntType.Equals("A3", StringComparison.InvariantCultureIgnoreCase)
                && orderParam.CardCash.Equals("CASH", StringComparison.InvariantCultureIgnoreCase)
                && orderParam.Gbank == 60000)
            {
                try
                {
                    biz.InsertBuySttlBalancePackNo(orderParam.PackNo);
                }
                catch
                {
                    throw new PaymentProcessBizException(-744, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }
            }

            #endregion

            #region 해외PG 한도 제한 관련 기록

            if (!string.IsNullOrEmpty(orderParam.SettleLimitKey) && orderParam.SettleLimitKey.Length > 12)
            {
                if (orderParam.AcntType.Equals("I1", StringComparison.InvariantCultureIgnoreCase))
                {
                    orderParam.AcntType = "I2";
                }

                decimal totalOrderPeice = paymentDataOrderInfoList.Sum(x => x.OrderPrice * (decimal)x.OrderCnt);
                try
                {
                    biz.InsertLimitOrderSettleLog(orderParam.PackNo, orderParam.CustNo, orderParam.LoginID
                        , orderParam.SettleLimitKey, totalOrderPeice, orderParam.AcntType, orderParam.OrderDateTime);
                }
                catch
                {
                    throw new PaymentProcessBizException(-748, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }
            }

            #endregion

            #region 주문 유입경로 기록

            try
            {
                biz.InsertOrderFlowLog(orderParam.PackNo, orderParamEtc.PolicyOrderSrc, orderParam.PrimaryCheckValue, orderParam.OrderDateTime);
            }
            catch
            {
                throw new PaymentProcessBizException(-812, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
            }

            #endregion

            #region 북캐시 적립 정책 기록

            if (biz.GetExistBookCashInfo(orderParam.PackNo).IsExist)
            {
                try
                {
                    biz.InsertDsOrderBookCash(orderParam.PackNo, orderParam.LoginID, orderParam.OrderDateTime);
                }
                catch
                {
                    throw new PaymentProcessBizException(-814, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }

                try
                {
                    PaymentBookCashPolicyT bookCashPolicy = biz.GetBookCashPolicy("A", orderParam.OrderDateTime);

                    if (bookCashPolicy != null)
                    {
                        if (bookCashPolicy.BcashPNo != 0 && bookCashPolicy.BasisMoney > 0)
                        {
                            biz.InsertDsOrderBookCashPack(orderParam.PackNo, orderParam.LoginID, bookCashPolicy.BcashPNo, bookCashPolicy.PHistNo, bookCashPolicy.BasisMoney, orderParam.OrderDateTime);
                        }
                    }
                }
                catch
                {
                    throw new PaymentProcessBizException(-815, "주문 접수중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
                }
            }

            #endregion

            #region 쇼핑지원금 차감 처리

            if (paymentDataCostBasisInfoList.Any(x => x.BasisKind.Equals("SSD", StringComparison.InvariantCultureIgnoreCase)))
            {
                decimal remainSSCash = biz.GetRemainShoppingSupportCash(orderParam.CustNo, orderParam.OrderDateTime);
                decimal deductSSCash = paymentDataCostBasisInfoList.Where(x => x.BasisKind.Equals("SSD", StringComparison.InvariantCultureIgnoreCase)).Sum(x => x.CostPrice);

                if (remainSSCash < deductSSCash || remainSSCash <= 0)
                {
                    throw new PaymentProcessBizException(-157, "쇼핑지원금이 부족합니다.");
                }

                // 주문건별로 쇼핑지원금 차감 처리
                try
                {
                    var costSSInfo = (from x in paymentDataCostBasisInfoList
                                      where x.BasisKind.Equals("SSD", StringComparison.InvariantCultureIgnoreCase)
                                      group x by new { x.PackNo, x.ItemNo, x.BuyOrderNo } into g
                                      select new { PackNo = g.Key.PackNo, ItemNo = g.Key.ItemNo, OrderNo = g.Key.BuyOrderNo, ShoppingSupportCash = g.Sum(p => p.CostPrice) }
                                        ).ToList();

                    List<PaymentCostShoppingSupportInfoT> costSSInfoList = new List<PaymentCostShoppingSupportInfoT>();
                    foreach (var item in costSSInfo)
                    {
                        costSSInfoList.Add(new PaymentCostShoppingSupportInfoT
                        {
                            PackNo = item.PackNo,
                            ItemNo = item.ItemNo,
                            OrderNo = item.OrderNo,
                            ShoppingSupportCash = item.ShoppingSupportCash
                        });
                    }

                    if (costSSInfoList != null && costSSInfoList.Count > 0)
                    {

                        if (costSSInfoList.Count == 1)
                        {
                            int retCode = 0;

                            try
                            {
                                retCode = biz.SetShoppingSupportCash(orderParam.CustNo, "D1", costSSInfoList[0].ShoppingSupportCash, costSSInfoList[0].PackNo, costSSInfoList[0].ItemNo
                                    , costSSInfoList[0].OrderNo, null, null, 0, orderParam.LoginID, 0, "N", 0);
                            }
                            catch
                            {
                                throw new PaymentProcessBizException(-155, "쇼핑지원금 처리에 문제가 발생했습니다.");
                            }

                            if (retCode != 0)
                            {
                                throw new PaymentProcessBizException(-155, "쇼핑지원금 처리에 문제가 발생했습니다.");
                            }
                        }
                        else
                        {
                            try
                            {
                                biz.SetShoppingSupportCash(costSSInfoList, orderParam.CustNo, orderParam.LoginID, "D1");
                            }
                            catch (PaymentProcessBizException pEx)
                            {
                                throw pEx;
                            }
                            catch
                            {
                                throw new PaymentProcessBizException(-156, "쇼핑지원금 처리에 문제가 발생했습니다.");
                            }
                        }
                    }
                }
                catch (PaymentProcessBizException pEx)
                {
                    throw pEx;
                }
                catch
                {
                    throw new PaymentProcessBizException(-817, "쇼핑지원금 회원권 처리에 문제가 발생하였습니다. 다시 주문해 주시기 바랍니다.");
                }

            }

            #endregion

            #region 주문 유입 채널 정보 기록

            try
            {
                //string siteCode = string.Empty;
                string siteCode = "P";

                switch (orderParam.PrimaryCheckValue.ToUpper())
                {
                    case "ENG":
                        siteCode = "E";
                        break;
                    case "BRA":
                        siteCode = "B";
                        break;
                    case "SOH":
                        siteCode = "S";
                        break;
                    case "GIR":
                        siteCode = "G";
                        break;
                    case "GEP":
                        siteCode = "P";
                        break;
                }

                biz.InsertDsOrderChannelInfo(paymentDataOrderInfoList, siteCode, orderParamEtc.OrderJaehuID);
            }
            catch
            {
                throw new PaymentProcessBizException(-760, "채널 정보 기록 중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
            }

            #endregion

            #region 외부 주문 번호 저장

            try
            {
                biz.InsertOutContrList(orderParam.PackNo);
            }
            catch
            {
                throw new PaymentProcessBizException(-764, "외부 주문 정보 기록 중에 문제가 발생했습니다. 다시 주문해 주세요. 주문은 접수되지 않았습니다.");
            }

            #endregion

            #region GEP의 통합주문 목록에 주문 정보 Update

            #if (!PAYMENT_DEBUG && !PAYMENT_RELEASE)
            try
            {
                List<PaymentGepOrderUpdateInfoT> gepOrderUpdateInfoList = new List<PaymentGepOrderUpdateInfoT>();

                foreach (PaymentDataOrderInfoT item in paymentDataOrderInfoList)
                {
                    gepOrderUpdateInfoList.Add(new PaymentGepOrderUpdateInfoT
                    {
                        GepOrderNo = item.GepOrderNo,
                        ItemNo = item.ItemNo,
                        OrderNo = (long)item.OrderNo,
                        PackNo = item.PackNo
                    });
                }

                new PaymentProcessQueryBiz().UpdateGepOrderList(gepOrderUpdateInfoList, orderParam.OrderDateTime);
            }
            catch (PaymentProcessBizException pEx)
            {
                throw pEx;
            }
            catch
            {
                throw new PaymentProcessBizException(-1104, "GEP 주문 정보 기록 중 오류가 발생하였습니다");
            }
            #endif
            #endregion

            return orderResult;
        }