/// <summary> /// 加载基本配置 /// </summary> public SFProvider(SFRateRequest _rateRequest) { Name = "SF"; rateRequest = _rateRequest; }
/// <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); }