public MobileResponseWrapper GetSavedOptions([FromUri] PickUpRequestViewModel request)
        {
            if (request == null)
            {
                throw CreateException(HttpStatusCode.BadRequest, "Location not found, request Null", "300404");
            }
            string obj = JsonConvert.SerializeObject(request);

            request.Locale = Thread.CurrentThread.CurrentCulture.Name;
            var result = _iMobilePickUpProvider.GetSavedDeliveryOptions(request.MemberId, request.Locale);

            if (result != null)
            {
                var mobileResponseWrapper = new MobileResponseWrapper
                {
                    Data = new PickUpListResponseViewModel {
                        Pickup = result
                    }
                };
                JObject json = JObject.Parse(obj);
                MobileActivityLogProvider.ActivityLog(json, mobileResponseWrapper, request.MemberId, true,
                                                      this.Request.RequestUri.ToString(),
                                                      this.Request.Headers.ToString(),
                                                      this.Request.Headers.UserAgent.ToString(),
                                                      request.Locale);

                return(mobileResponseWrapper);
            }
            return(new MobileResponseWrapper
            {
                Data = null,
                //Error = new ErrorViewModel {Code = "0404", Message = "No Data Available"}
            });
        }
        public MobileResponseWrapper Get(string memberId, string orderNumber, string paymentMethodName, Guid id)
        {
            var response = new MobileResponseWrapper
            {
                Data = new WechatQueryOrderResponseViewModel {
                    Status = false
                },
            };
            var paymentResponse = PaymentGatewayInvoker.CheckOrderStatus(paymentMethodName, orderNumber);

            if (paymentResponse != null && paymentResponse.Status == PaymentGatewayRecordStatusType.OrderSubmitted)
            {
                response = new MobileResponseWrapper
                {
                    Data = new WechatQueryOrderResponseViewModel {
                        Status = true
                    },
                };
                return(response);
            }
            if (paymentResponse != null && paymentResponse.Status == PaymentGatewayRecordStatusType.Unknown)
            {
                var approved = false;
                _mobileOrderProvider.CancelOrder(memberId, orderNumber, Thread.CurrentThread.CurrentCulture.Name, paymentMethodName,
                                                 ref approved, id);
                response = new MobileResponseWrapper
                {
                    Data = new WechatQueryOrderResponseViewModel {
                        Status = approved
                    },
                };
                return(response);
            }
            return(response);
        }
        public MobileResponseWrapper Get([FromUri] PreferredCustomerRequestViewModel request)
        {
            try
            {
                string obj      = JsonConvert.SerializeObject(request);
                var    response = new MobileResponseWrapper
                {
                    Data = _mobileCustomersProvider.GetPreferredCustomers(request)
                };
                JObject json = JObject.Parse(obj);
                MobileActivityLogProvider.ActivityLog(json, response, request.MemberId, true,
                                                      this.Request.RequestUri.ToString(),
                                                      this.Request.Headers.ToString(),
                                                      this.Request.Headers.UserAgent.ToString(),
                                                      request.Locale);

                return(response);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            throw new Exception("Method Get on MobileCustomersController not return values.");
        }
        public MobileResponseWrapper Get([FromUri] PickUpRequestViewModel request)
        {
            if (request == null)
            {
                throw CreateException(HttpStatusCode.BadRequest, "Location not found, request Null", "300404");
            }
            string obj = JsonConvert.SerializeObject(request);

            request.Locale = Thread.CurrentThread.CurrentCulture.Name;
            var result = _iMobilePickUpProvider.GetDeliveryOptions(request.Locale,
                                                                   new AddressViewModel
            {
                StateProvinceTerritory = request.State,
                City           = request.City,
                Country        = request.Country,
                PostalCode     = request.PostalCode,
                CountyDistrict = request.District
            });

            if (result != null)
            {
                if (request.City != null && !string.IsNullOrEmpty(request.City) &&
                    !string.IsNullOrWhiteSpace(request.City))
                {
                    result = result.FindAll(x => !string.IsNullOrEmpty(x.Address.City) ? x.Address.City.Trim() == request.City :
                                            x.Address.City == request.City);
                }
                if (request.State != null && !string.IsNullOrEmpty(request.State) &&
                    !string.IsNullOrWhiteSpace(request.State))
                {
                    result = result.FindAll(x => !string.IsNullOrEmpty(x.Address.StateProvinceTerritory) ?  x.Address.StateProvinceTerritory.Trim() == request.State :
                                            x.Address.StateProvinceTerritory == request.State);
                }
                if (request.District != null && !string.IsNullOrEmpty(request.District) &&
                    !string.IsNullOrWhiteSpace(request.District))
                {
                    result = result.FindAll(x => !string.IsNullOrEmpty(x.Address.CountyDistrict) ? x.Address.CountyDistrict.Trim() == request.District :
                                            x.Address.CountyDistrict == request.District);
                }

                var mobileListResponseWrapper = new MobileResponseWrapper
                {
                    Data = new PickUpListResponseViewModel {
                        Pickup = result
                    }
                };
                JObject json = JObject.Parse(obj);
                MobileActivityLogProvider.ActivityLog(json, mobileListResponseWrapper, request.MemberId, true,
                                                      this.Request.RequestUri.ToString(),
                                                      this.Request.Headers.ToString(),
                                                      this.Request.Headers.UserAgent.ToString(),
                                                      request.Locale);

                return(mobileListResponseWrapper);
            }

            throw CreateException(HttpStatusCode.InternalServerError, "Location not found", "300404");
        }
Exemple #5
0
        public MobileResponseWrapper Get([FromUri] ExpireCatalogCacheRequestViewModel request)
        {
            if (request == null)
            {
                throw CreateException(HttpStatusCode.BadRequest, "request is null", 500404);
            }
            request.Locale = Thread.CurrentThread.CurrentCulture.Name;

            var response = new MobileResponseWrapper
            {
                Data = _expireCatalogCacheProvider.ExpireCatalogCache(request.cacheName, request.inputCacheKey, request.Locale)
            };

            return(response);
        }
Exemple #6
0
        public MobileResponseWrapper Get([FromUri] OrderTrackingRequestViewModel request)
        {
            try
            {
                request.Locale = Thread.CurrentThread.CurrentCulture.Name;
                if (request == null || request.MemberId == null || string.IsNullOrEmpty(request.MemberId) ||
                    string.IsNullOrWhiteSpace(request.MemberId) ||
                    request.Locale == null || string.IsNullOrEmpty(request.Locale) ||
                    string.IsNullOrWhiteSpace(request.Locale))
                {
                    throw CreateException(HttpStatusCode.BadRequest, "Get Order Tracking incomplete/invalid information sended", 210416);
                }
                string obj    = JsonConvert.SerializeObject(request);
                var    result = _iMobileOrderTrackingProvider.Get(request);

                if (result != null)
                {
                    var response = new MobileResponseWrapper
                    {
                        Data =
                            new OrderTrackingResponseViewModel
                        {
                            ExpressInfo = result,
                            Locale      = request.Locale,
                            OrderId     = request.OrderId,
                            MemberId    = request.MemberId
                        }
                    };

                    Object json = JObject.Parse(obj);
                    MobileActivityLogProvider.ActivityLog(json, string.Empty, request.MemberId, true,
                                                          this.Request.RequestUri.ToString(),
                                                          this.Request.Headers.ToString(),
                                                          this.Request.Headers.UserAgent.ToString(),
                                                          request.Locale);

                    return(response);
                }
            }
            catch (Exception ex)
            {
                LoggerHelper.Error(ex.ToString());
                throw CreateException(HttpStatusCode.InternalServerError, "Internal server errror searching for Get Order Tracking Express Info" + ex.Message, 166767);
            }

            throw CreateException(HttpStatusCode.InternalServerError, "Internal server errror searching for Get Order Tracking Express Info", 210416);
        }
        public MobileResponseWrapper Put(OrderRequestViewModel request)
        {
            if (request == null)
            {
                throw CreateException(HttpStatusCode.BadRequest, "request is null", 166767);
            }
            string obj = JsonConvert.SerializeObject(request);

            SetOrderMemberId(request.Data);
            request.Data.Locale = Thread.CurrentThread.CurrentCulture.Name;
            var orderNumber      = string.Empty;
            var isOrderSubmitted = false;

            if (_mobileQuoteHelper.CheckIfAnyOrderInProcessing(request.Data.MemberId, request.Data.Locale, ref orderNumber, ref isOrderSubmitted, request.Data.OrderNumber))
            {
                throw CreateException(HttpStatusCode.NotAcceptable,
                                      "order still processing", 110406, orderNumber);
            }

            //If SR Pricing an order for PC then check whether the PC is expired or not.
            if (request.Data.Locale == "zh-CN" && !string.IsNullOrEmpty(request.Data.CustomerId) && request.Data.CustomerId != request.Data.MemberId && _mobileQuoteHelper.IsPCExpired(request))
            {
                throw CreateException(HttpStatusCode.NotAcceptable,
                                      "PC membership is expired", 110421);
            }

            List <ValidationErrorViewModel> errors = null;
            var data = _iMobileQuoteProvider.Quote(request.Data, ref errors);
            var mobileResponseWrapper = new MobileResponseWrapper
            {
                Data             = data,
                ValidationErrors = null != errors && errors.Any() ? errors : null
            };
            JObject json = JObject.Parse(obj);

            MobileActivityLogProvider.ActivityLog(json, mobileResponseWrapper, request.Data.MemberId, true,
                                                  this.Request.RequestUri.ToString(),
                                                  this.Request.Headers.ToString(),
                                                  this.Request.Headers.UserAgent.ToString(),
                                                  request.Data.Locale);

            return(mobileResponseWrapper);
        }
Exemple #8
0
        public MobileResponseWrapper Get([FromUri] OrderSummaryRequestViewModel request)
        {
            if (request == null)
            {
                throw CreateException(HttpStatusCode.BadRequest, "request is null", 500);
            }
            string obj = JsonConvert.SerializeObject(request);

            request.Locale = Thread.CurrentThread.CurrentCulture.Name;
            var mobileResponseWrapper = new MobileResponseWrapper {
                Data = _mobileSummaryProvider.GetOrderList(request)
            };
            JObject json = JObject.Parse(obj);

            MobileActivityLogProvider.ActivityLog(json, mobileResponseWrapper, request.MemberId, true,
                                                  this.Request.RequestUri.ToString(),
                                                  this.Request.Headers.ToString(),
                                                  this.Request.Headers.UserAgent.ToString(),
                                                  request.Locale);

            return(mobileResponseWrapper);
        }
Exemple #9
0
        public MobileResponseWrapper Get(Guid id, string memberId)
        {
            try
            {
                var locale = Thread.CurrentThread.CurrentCulture.Name;
                if (id == null || string.IsNullOrEmpty(memberId))
                {
                    throw CreateException(HttpStatusCode.BadRequest, "Get Addresses incomplete/invalid information sended", 210416);
                }

                var result = _iMobileAddressProvider.GetShippingMethods(memberId, id, locale);

                if (result != null)
                {
                    var mobileResponseWrapper = new MobileResponseWrapper
                    {
                        Data = new ShippingMethodsResponseViewModel {
                            ShippingMethods = result
                        },
                    };

                    MobileActivityLogProvider.ActivityLog(string.Empty, mobileResponseWrapper, memberId, true,
                                                          this.Request.RequestUri.ToString(),
                                                          this.Request.Headers.ToString(),
                                                          this.Request.Headers.UserAgent.ToString(),
                                                          locale);

                    return(mobileResponseWrapper);
                }
            }
            catch (Exception ex)
            {
                LoggerHelper.Error(ex.ToString());
                throw CreateException(HttpStatusCode.InternalServerError, "Internal server errror searching for Get shippingMethods" + ex.Message, 166767);
            }

            throw CreateException(HttpStatusCode.InternalServerError, "Internal server errror searching for Get shippingMethods", 210416);
        }
Exemple #10
0
        public MobileResponseWrapper Get([FromUri] PayByPhoneRequestViewModel request)
        {
            if (request == null)
            {
                throw CreateException(HttpStatusCode.BadRequest, "request is null", 500404);
            }
            string obj = JsonConvert.SerializeObject(request);

            request.Locale = Thread.CurrentThread.CurrentCulture.Name;

            var response = new MobileResponseWrapper
            {
                Data = _mobilePayByPhoneProvider.IsEligible(request.MemberId, request.Locale.Substring(3, 2))
            };
            JObject json = JObject.Parse(obj);

            MobileActivityLogProvider.ActivityLog(json, response, request.MemberId ?? string.Empty, true,
                                                  this.Request.RequestUri.ToString(),
                                                  this.Request.Headers.ToString(),
                                                  this.Request.Headers.UserAgent.ToString(),
                                                  request.Locale);

            return(response);
        }
Exemple #11
0
        public MobileResponseWrapper Get([FromUri] AnnouncementRequestViewModel request)
        {
            if (request == null)
            {
                throw CreateException(HttpStatusCode.BadRequest, "request is null", 500404);
            }
            string obj = JsonConvert.SerializeObject(request);

            request.Locale = Thread.CurrentThread.CurrentCulture.Name;

            var response = new MobileResponseWrapper
            {
                Data = _IMobileAnnouncementProvider.GetAnnouncement(request)
            };
            JObject json = JObject.Parse(obj);

            MobileActivityLogProvider.ActivityLog(json, response, string.Empty, true,
                                                  this.Request.RequestUri.ToString(),
                                                  this.Request.Headers.ToString(),
                                                  this.Request.Headers.UserAgent.ToString(),
                                                  request.Locale);

            return(response);
        }
Exemple #12
0
        public MobileResponseWrapper Get([FromUri] FavouriteSKUItemViewModel query)
        {
            try
            {
                List <FavouriteSKUItemResponseViewModel> result = null;

                if (query == null)
                {
                    throw CreateException(HttpStatusCode.BadRequest, "Invalid or Incomplete GetFavouriteSKU information", 999999);
                }
                string obj = JsonConvert.SerializeObject(query);

                query.Locale = Thread.CurrentThread.CurrentCulture.Name != null ? Thread.CurrentThread.CurrentCulture.Name : null;

                if (string.IsNullOrEmpty(query.MemberId) || string.IsNullOrEmpty(query.Locale))
                {
                    return(new MobileResponseWrapper {
                        Data = new FavouriteSKUResponseViewModel {
                            FavouriteSKUs = null, RecordCount = 0
                        }
                    });
                }

                GetFavouriteParam request = new GetFavouriteParam {
                    DistributorID = query.MemberId, Locale = query.Locale
                };

                result = _mobileFavouriteProvider.GetFavouriteSKUs(request);
                if (result != null)
                {
                    var response = new MobileResponseWrapper
                    {
                        Data =
                            new FavouriteSKUResponseViewModel
                        {
                            FavouriteSKUs = result,
                            RecordCount   = result.Count()
                        }
                    };
                    JObject json = JObject.Parse(obj);
                    MobileActivityLogProvider.ActivityLog(json, response, query.DistributorID, true,
                                                          this.Request.RequestUri.ToString(),
                                                          this.Request.Headers.ToString(),
                                                          this.Request.Headers.UserAgent.ToString(),
                                                          query.Locale);

                    return(response);
                }
            }
            catch (Exception ex)
            {
                LoggerHelper.Error(ex.ToString() + query.MemberId);
                throw CreateException(HttpStatusCode.InternalServerError,
                                      "Internal server errror searching for Get Favourite SKUs" + ex.Message, 404);
            }
            var responseWrapper = new MobileResponseWrapper
            {
                Data = new FavouriteSKUResponseViewModel {
                    FavouriteSKUs = null, RecordCount = 0
                }
            };

            MobileActivityLogProvider.ActivityLog(query, responseWrapper, query.MemberId, true,
                                                  this.Request.RequestUri.ToString(),
                                                  this.Request.Headers.ToString(),
                                                  this.Request.Headers.UserAgent.ToString(),
                                                  query.Locale);

            return(responseWrapper);
        }
Exemple #13
0
        public MobileResponseWrapper GetBindedCards(string disID)
        {
            var result      = new List <BindedCardswithBanklist>();
            var phoneNumber = DistributorOrderingProfileProvider.GetPhoneNumberForCN(disID).Trim();
            var cn99BillQuickPayProvider = new CN_99BillQuickPayProvider();
            var tins = DistributorOrderingProfileProvider.GetTinList(disID, true);
            var tin  = tins.Find(t => t.ID == "CNID");

            PaymentInformation bindedCard = null;

            List <PaymentInformation> bindedCards = cn99BillQuickPayProvider.LoadStorableDataQuick(phoneNumber, disID);

            var usageDebit = BankUsage.UsedByQPDebit;
            var debitCards = BankInfoProvider.GetAvailableBanks(usageDebit);

            var usageCredit = BankUsage.UsedByQPCredit;
            var creditCards = BankInfoProvider.GetAvailableBanks(usageCredit);

            //QD
            if (debitCards != null && debitCards.Count > 0)
            {
                foreach (BankInformation item in debitCards)
                {
                    if (bindedCards != null && bindedCards.Count > 0)
                    {
                        bindedCard = (from a in bindedCards where a.CardType.Trim() == "QD" && a.Alias.Trim() == item.BankCode.Trim() select a).FirstOrDefault();
                    }

                    var currentBindedCard = new BindedCardswithBanklist()
                    {
                        BankCode = item.BankCode,
                        BankName = item.BankName,
                        CardType = "QD",
                    };

                    if (bindedCard != null && bindedCard.CardHolder != null)
                    {
                        currentBindedCard.BindedCard = new BindedCardViewModel();
                        currentBindedCard.BindedCard.CardHolderName = bindedCard.CardHolder.First;
                        currentBindedCard.BindedCard.CardNumber     = bindedCard.CardNumber;
                    }

                    result.Add(currentBindedCard);
                    bindedCard = null;
                }
            }

            //QC
            if (creditCards != null && creditCards.Count > 0)
            {
                foreach (BankInformation item in creditCards)
                {
                    if (bindedCards != null && bindedCards.Count > 0)
                    {
                        bindedCard = (from a in bindedCards where a.CardType.Trim() == "QC" && a.Alias.Trim() == item.BankCode.Trim() select a).FirstOrDefault();
                    }

                    var currentBindedCard = new BindedCardswithBanklist()
                    {
                        BankCode = item.BankCode,
                        BankName = item.BankName,
                        CardType = "QC",
                    };

                    if (bindedCard != null && bindedCard.CardHolder != null)
                    {
                        currentBindedCard.BindedCard = new BindedCardViewModel();
                        currentBindedCard.BindedCard.CardHolderName = bindedCard.CardHolder.First;
                        currentBindedCard.BindedCard.CardNumber     = bindedCard.CardNumber;
                    }

                    result.Add(currentBindedCard);
                    bindedCard = null;
                }
            }

            var response = new MobileResponseWrapper
            {
                Data = new BindedCardswithBanklistResponseVewModel {
                    BankList = result, PhoneNumber = phoneNumber, CNID = tin.IDType.Key.Trim()
                },
            };

            return(response);
        }
        public MobileResponseWrapper Get([FromUri] OrderSearchParameter query)
        {
            try
            {
                if (query == null)
                {
                    throw CreateException(HttpStatusCode.BadRequest, "Invalid or Incomplete Order information", 101416);
                }
                string obj = JsonConvert.SerializeObject(query);
                query.Locale = Thread.CurrentThread.CurrentCulture.Name;

                var result = _mobileOrderSummaryProvider.GetOrders(query);
                if (result != null)
                {
                    if (!string.IsNullOrEmpty(query.OrderNumber))
                    {
                        result = result.FindAll(r => r.OrderNumber == query.OrderNumber);
                    }
                    var response = new MobileResponseWrapper
                    {
                        Data =
                            new OrdersResponseViewModel
                        {
                            Orders      = result,
                            RecordCount = result != null && result.Any() ? result.Count : 0
                        }
                    };
                    JObject json = JObject.Parse(obj);
                    MobileActivityLogProvider.ActivityLog(json, response, query.MemberId, true,
                                                          this.Request.RequestUri.ToString(),
                                                          this.Request.Headers.ToString(),
                                                          this.Request.Headers.UserAgent.ToString(),
                                                          query.Locale);

                    return(response);
                }

                if (!string.IsNullOrEmpty(query.OrderNumber))
                {
                    var cartId         = 0;
                    var orderViewModel = _iMobileOrderProvider.GetOrderByOrderNumber(query.OrderNumber, query.MemberId,
                                                                                     query.Locale, ref cartId);

                    if (null != orderViewModel)
                    {
                        var mobResponseWrapper = new MobileResponseWrapper
                        {
                            Data =
                                new OrdersResponseViewModel
                            {
                                Orders = new List <OrderViewModel> {
                                    orderViewModel
                                },
                                RecordCount = 1
                            }
                        };
                        JObject json1 = JObject.Parse(obj);
                        MobileActivityLogProvider.ActivityLog(json1, mobResponseWrapper, query.MemberId, true,
                                                              this.Request.RequestUri.ToString(),
                                                              this.Request.Headers.ToString(),
                                                              this.Request.Headers.UserAgent.ToString(),
                                                              query.Locale);

                        return(mobResponseWrapper);
                    }
                }
            }
            catch (Exception ex)
            {
                LoggerHelper.Error(ex.ToString());
                throw CreateException(HttpStatusCode.InternalServerError,
                                      "Internal server errror searching for Get Orders" + ex.Message, 404);
            }
            var responseWrapper = new MobileResponseWrapper
            {
                Data = new OrdersResponseViewModel {
                    Orders = null, RecordCount = 0
                }
            };

            MobileActivityLogProvider.ActivityLog(query, responseWrapper, query.MemberId, true,
                                                  this.Request.RequestUri.ToString(),
                                                  this.Request.Headers.ToString(),
                                                  this.Request.Headers.UserAgent.ToString(),
                                                  query.Locale);

            return(responseWrapper);
        }
        public MobileResponseWrapper Get([FromUri] DiscontinuedSkuItemViewModel query)
        {
            try
            {
                if (query == null)
                {
                    throw CreateException(HttpStatusCode.BadRequest, "Invalid or Incomplete GetDiscontinuedSku information",
                                          999999);
                }
                if (string.IsNullOrEmpty(query.ShoppingCartId) && (query.OrderId == Guid.Empty || string.IsNullOrEmpty(query.OrderNumber)))
                {
                    return(new MobileResponseWrapper
                    {
                        Data = new DiscontinuedSkuResponseViewModel {
                            DiscontinuedSkus = null, RecordCount = 0
                        }
                    });
                }
                query.Locale = Thread.CurrentThread.CurrentCulture.Name;

                GetDiscontinuedSkuParam request = new GetDiscontinuedSkuParam
                {
                    DistributorId = query.DistributorId,
                    Locale        = query.Locale,
                };
                var result = _getDisconinuedSkuProvider.GetDiscontinuedSkuRequest(request);

                if (result != null)
                {
                    var response = new MobileResponseWrapper
                    {
                        Data =
                            new DiscontinuedSkuResponseViewModel
                        {
                            DiscontinuedSkus = result,
                            RecordCount      = result.Count
                        }
                    };

                    MobileActivityLogProvider.ActivityLog(query, response, query.DistributorId, true,
                                                          Request.RequestUri.ToString(),
                                                          Request.Headers.ToString(),
                                                          Request.Headers.UserAgent.ToString(),
                                                          query.Locale);

                    return(response);
                }
            }
            catch (Exception ex)
            {
                LoggerHelper.Error(ex.ToString());
                throw CreateException(HttpStatusCode.InternalServerError,
                                      "Internal server errror searching for Get Discontinued SKUs" + ex.Message, 404);
            }
            var responseWrapper = new MobileResponseWrapper
            {
                Data = new DiscontinuedSkuResponseViewModel {
                    DiscontinuedSkus = null, RecordCount = 0
                }
            };

            MobileActivityLogProvider.ActivityLog(query, responseWrapper, query.DistributorId, true,
                                                  Request.RequestUri.ToString(),
                                                  Request.Headers.ToString(),
                                                  Request.Headers.UserAgent.ToString(),
                                                  query.Locale);

            return(responseWrapper);
        }
        public MobileResponseWrapper Post(WechatPrepayIdRequestViewModel request, string memberId)
        {
            if (request == null || request.Data == null || request.Data.Prepay == null || request.Data.Order == null)
            {
                throw CreateException(HttpStatusCode.BadRequest, "request is null", 500404);
            }
            string obj = JsonConvert.SerializeObject(request);

            SetOrderMemberId(request.Data.Order);
            request.Data.Prepay.Locale   = Thread.CurrentThread.CurrentCulture.Name;
            request.Data.Prepay.MemberId = memberId;
            var authToken = Guid.Empty;

            if (null != Request && null != Request.Headers && Request.Headers.Any())
            {
                if (Request.Headers.Contains("X-HLUSER-TOKEN"))
                {
                    var authTokenValue = Request.Headers.GetValues("X-HLUSER-TOKEN").FirstOrDefault();
                    if (!string.IsNullOrEmpty(authTokenValue))
                    {
                        Guid.TryParse(authTokenValue, out authToken);
                    }
                }
            }

            WechatPrepayIdResponseViewModel result = null;
            var errors = new List <ValidationErrorViewModel>();

            if (null != request.Data.Order)
            {
                request.Data.Order.Locale = Thread.CurrentThread.CurrentCulture.Name;

                var amount = decimal.Zero;
                var id     = _mobileWechatProvider.InsertToPaymentGatewayRecord(request.Data.Order,
                                                                                authToken == Guid.Empty ? Guid.NewGuid() : authToken, ref amount);
                if (id == 0)
                {
                    errors.Add(new ValidationErrorViewModel
                    {
                        Code   = 101416,
                        Reason = "InsertToPaymentGatewayRecord failed"
                    });
                }

                if (!string.IsNullOrEmpty(request.Data.Order.OrderNumber) && amount > 0)
                {
                    bool   isLockedeach = true;
                    bool   isLocked     = true;
                    string lockfailed   = string.Empty;


                    if (request.Data.Order.pcLearningPointOffSet > 0M && request.Data.Order.CategoryType != "ETO")
                    {
                        isLockedeach = OrderProvider.LockPCLearningPoint(request.Data.Prepay.MemberId, request.Data.Order.OrderNumber,
                                                                         request.Data.Order.OrderMonth,
                                                                         request.Data.Order.pcLearningPointOffSet, HLConfigManager.Platform);
                        if (!isLockedeach)
                        {
                            lockfailed = "PC Learning Point";
                            isLocked   = false;
                        }
                    }
                    else if (request.Data.Order.pcLearningPointOffSet > 0M)
                    {
                        isLockedeach = OrderProvider.LockETOLearningPoint(
                            request.Data.Order.OrderItems.Select(s => s.Sku),
                            request.Data.Prepay.MemberId,
                            request.Data.Order.OrderNumber,
                            request.Data.Order.OrderMonth,
                            request.Data.Order.pcLearningPointOffSet,
                            HLConfigManager.Platform);

                        if (!isLockedeach)
                        {
                            lockfailed = "ETO Learning Point";
                            isLocked   = false;
                        }
                    }
                    var shoppingcart = ShoppingCartProvider.GetShoppingCart(request.Data.Prepay.MemberId, request.Data.Prepay.Locale, true, false);
                    if (shoppingcart.HastakenSrPromotion)
                    {
                        isLockedeach = ChinaPromotionProvider.LockSRPromotion(shoppingcart, request.Data.Order.OrderNumber);
                        if (!isLockedeach)
                        {
                            lockfailed = lockfailed + ", SR Promotion";
                            isLocked   = false;
                        }
                    }
                    if (shoppingcart.HastakenSrPromotionGrowing)
                    {
                        isLockedeach = ChinaPromotionProvider.LockSRQGrowingPromotion(shoppingcart, request.Data.Order.OrderNumber);
                        if (!isLockedeach)
                        {
                            lockfailed = lockfailed + ", SR Query Growing";
                            isLocked   = false;
                        }
                    }
                    if (shoppingcart.HastakenSrPromotionExcelnt)
                    {
                        isLockedeach = ChinaPromotionProvider.LockSRQExcellentPromotion(shoppingcart, request.Data.Order.OrderNumber);
                        if (!isLockedeach)
                        {
                            lockfailed = lockfailed + ", SR Query Excellent";
                            isLocked   = false;
                        }
                    }
                    if (shoppingcart.HastakenBadgePromotion)
                    {
                        isLockedeach = ChinaPromotionProvider.LockBadgePromotion(shoppingcart, request.Data.Order.OrderNumber);
                        if (!isLockedeach)
                        {
                            lockfailed = lockfailed + ", BadgePromotion";
                            isLocked   = false;
                        }
                    }
                    if (shoppingcart.HastakenNewSrpromotion)
                    {
                        isLockedeach = ChinaPromotionProvider.LockNewSRPromotion(shoppingcart, request.Data.Order.OrderNumber);
                        if (!isLockedeach)
                        {
                            lockfailed = lockfailed + ", NewSrPromotion";
                            isLocked   = false;
                        }
                    }

                    if (shoppingcart.HasBrochurePromotion)
                    {
                        isLockedeach = ChinaPromotionProvider.LockBrochurePromotion(shoppingcart, request.Data.Order.OrderNumber);
                        if (!isLockedeach)
                        {
                            lockfailed = lockfailed + ", BrochurePromotion";
                            isLocked   = false;
                        }
                    }

                    if (isLocked)
                    {
                        result = _mobileWechatProvider.GetPrepayId(request.Data.Prepay, request.Data.Order.OrderNumber, amount);
                    }
                    else
                    {
                        errors.Add(new ValidationErrorViewModel
                        {
                            Code   = 101417,
                            Reason = lockfailed.TrimStart(',') + " locking failed"
                        });
                    }
                }
            }

            var response = new MobileResponseWrapper
            {
                Data             = result,
                ValidationErrors = errors.Any() ? errors : null
            };

            JObject json = JObject.Parse(obj);

            MobileActivityLogProvider.ActivityLog(json, response, memberId ?? string.Empty, true,
                                                  Request.RequestUri.ToString(),
                                                  Request.Headers.ToString(),
                                                  Request.Headers.UserAgent.ToString(),
                                                  request.Data.Prepay.Locale);

            return(response);
        }