Example #1
0
 /// <summary>
 ///    加载基本配置
 /// </summary>
 public SFProvider(SFRateRequest _rateRequest)
 {
     Name        = "SF";
     rateRequest = _rateRequest;
 }
Example #2
0
        /// <summary>
        /// 计算顺丰物流费用
        /// </summary>
        /// <param name="ship"></param>
        /// <returns></returns>
        public ShipmentEx CalcSFCostAdv(FedExQueryAdv ship)
        {
            ShipmentEx result = null;

            try
            {
                SFRateRequest rateRequest = new SFRateRequest();
                string        countyCode  = string.Empty;
                string        countyName  = string.Empty;
                CountryInfo   county      = null;

                var packages = new List <Package>();

                Package pkg = null;


                CountryInfo ortCity = context.CountryInfo.SingleOrDefault(x => x.ID == ship.OrigId);

                if (ortCity != null)
                {
                    county = GetCountry(ortCity.PID);

                    if (county != null)
                    {
                        countyCode = county.Code;
                        countyName = county.ContryNameEN;

                        if (countyCode.ToUpper() != "CN")
                        {
                            rateRequest.OriginCode       = county.SFCode;
                            rateRequest.ParentOriginCode = county.SFCode;
                        }
                        else
                        {
                            rateRequest.OriginCode       = ortCity.SFCode;
                            rateRequest.ParentOriginCode = ortCity.SFCode;
                        }
                    }
                }


                var origin = new Address(ship.OrigAddress, "", "", ortCity.ContryNameEN, "", ship.OrigPostCode, countyCode);
                origin.CountryName = countyName;


                //获取目的地

                ShippingAddressInfo destAddress = context.ShippingAddressInfo.SingleOrDefault(x => x.Id == ship.DestId);
                CountryInfo         destCity    = context.CountryInfo.SingleOrDefault(x => x.ID == destAddress.RegionId);

                if (destCity != null)
                {
                    county = null;
                    county = GetCountry(destCity.PID);

                    if (county != null)
                    {
                        countyCode = county.Code;
                        countyName = county.ContryNameEN;
                        if (countyCode.ToUpper() != "CN")
                        {
                            rateRequest.DestCode       = county.SFCode;
                            rateRequest.ParentDestCode = county.SFCode;
                        }
                        else
                        {
                            rateRequest.DestCode       = destCity.SFCode;
                            rateRequest.ParentDestCode = destCity.SFCode;
                        }
                    }
                }

                var destination = new Address(destAddress.Address, "", "", destCity.ContryNameEN, "", destAddress.PostCode, countyCode);
                destination.CountryName = countyName;

                rateRequest.Volume    = 0;
                rateRequest.QueryType = 5;
                rateRequest.Lang      = "sc";
                rateRequest.Region    = "cn";

                foreach (ShipPackage item in ship.PackagesList)
                {
                    pkg              = GetPackage(item, 6000);
                    pkg.Currency     = ship.CoinType;
                    pkg.PackageCount = item.Num;
                    pkg.PackageType  = "自备包装";
                    packages.Add(pkg);
                }

                rateRequest.Weight = Math.Round(packages.Sum(x => x.Weight), 2);
                // rateRequest.Time = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd hh:mm");//"2016-07-06T13%3A30%3A00%2B08%3A00"

                DateTime dtNow = DateTime.Now;
                rateRequest.Time = string.Format("{0}T{1}%3A{2}%3A{3}%2B08%3A00", dtNow.ToString("yyyy-MM-dd"), dtNow.ToString("hh"), dtNow.ToString("mm"), dtNow.ToString("ss"));

                var rateManager = new RateManager();

                rateManager.AddProvider(new SFProvider(rateRequest));


                result = rateManager.GetRates(origin, destination, packages);

                if (result.Rates != null && result.Rates.Count > 0)
                {
                    result.RateValue = result.Rates[0];
                }
            }
            catch (Exception ex)
            {
            }

            return(result);
        }