public CardPaymentRequestStatus ProcessCardPaymentRequest(CardPayment cardPayment, int retryCount)
        {
            var result = CardPaymentRequestStatus.NotRequest;
            // SZXResult szxResult = PaymentsService.YeepayCardPayments(cardPayment); //卡内金额全部充值
            SZXResult szxResult = PaymentsService.YeepayCardPartialPayments(cardPayment); //部分充值


            LogHelper.WriteInfo(string.Format("Processing card payment with OrderNo : {0}, request result : {1}", cardPayment.OrderNo, szxResult == null ? "null" : szxResult.R1_Code));
            if (szxResult == null || string.IsNullOrEmpty(szxResult.R1_Code)) // retry
            {
                if (retryCount == -1)
                {
                    result = CardPaymentRequestStatus.RequestFailed;
                }
                else
                {
                    cardPayment.RequestDateTime = DateTime.Now;
                    retryCount++;
                    result = CardPaymentRequestStatus.RequestFailed;

                    if (retryCount <= retryTimesLimitation)
                    {
                        RedisService.AddItemToQueue <CardPayment>(BillingConsts.KEY_CARD_PAYMENT_REQUEST_RETRY_QUEUE + retryCount, cardPayment);
                    }
                    else // final failed
                    {
                        Order currentOrder = oracleRepo.Single <Order>(cardPayment.OrderID);
                        SetFailedOrderStatus(CardPaymentRequestStatus.RequestFailed, currentOrder);
                        //record the info for retry manually
                        var cardPaymentInfoForRetry = EntityMapping.Auto <CardPayment, CardPaymentRetry>(cardPayment);
                        var AddRes = oracleRepo.Add <CardPaymentRetry>(cardPaymentInfoForRetry);
                    }
                }
            }
            else
            {
                CardPaymentRequestStatus requestStatus = (CardPaymentRequestStatus)szxResult.R1_Code.ToInt32();
                Order currentOrder = oracleRepo.Single <Order>(cardPayment.OrderID);

                if (currentOrder != null)
                {
                    switch (requestStatus)
                    {
                    case CardPaymentRequestStatus.Success:
                        SetSuccessOrderStatus(currentOrder);
                        result = requestStatus;
                        break;

                    default:
                        SetFailedOrderStatus(requestStatus, currentOrder);
                        result = requestStatus;
                        break;
                    }
                }
            }
            return(result);
        }
        private void SetFailedOrderStatus(CardPaymentRequestStatus resultCode, Order currentOrder)
        {
            currentOrder.OrderStatus = OrderStatus.Failed;
            currentOrder.CardPaymentRequestStatus = resultCode;
            int updateRet = oracleRepo.Update <Order>(currentOrder);

            if (!string.IsNullOrEmpty(currentOrder.CallBackUrl))
            {
                RedisService.AddItemToQueue <PaymentNotification>(BillingConsts.KEY_CARD_PAYMENT_CALLBACK_PROCESSING_QUEUE,
                                                                  new PaymentNotification
                {
                    ResultCode      = (int)CardPaymentCallBackStatus.RequestError,
                    OrderNo         = currentOrder.OrderNo,
                    Description     = CardPaymentDataDict.CardPaymentRequestStatusDesc[((int)resultCode).ToString()],
                    RequestAmount   = currentOrder.Amount,
                    OutOrderNo      = currentOrder.OutOrderNo,
                    SuccessAmount   = 0.0f,
                    CallbackURL     = currentOrder.CallBackUrl,
                    LastRequestDate = DateTime.Now
                }
                                                                  );
            }
        }