/// <summary> /// 请求api获取物流信息 /// </summary> /// <param name="shipment"></param> /// <returns></returns> public async Task <TraceResult> RequestTraces(Shipment shipment) { var logistics = await _logisticsManager.FindByIdAsync(shipment.LogisticsId.Value); TraceResult result = new TraceResult(); int queryNum = 0; var httpClient = new HttpClient(); do { try { var url = await SettingManager.GetSettingValueAsync(AppSettings.Shipping.ApiUrl); List <KeyValuePair <String, String> > paramList = new List <KeyValuePair <String, String> >(); string requestData = "{'OrderCode':'','ShipperCode':'" + logistics.Key + "','LogisticCode':'" + shipment.LogisticsNumber + "'}"; paramList.Add(new KeyValuePair <string, string>("RequestData", HttpUtility.UrlEncode(requestData, Encoding.UTF8))); paramList.Add(new KeyValuePair <string, string>("EBusinessID", await SettingManager.GetSettingValueAsync(AppSettings.Shipping.ApiId))); paramList.Add(new KeyValuePair <string, string>("RequestType", "1002")); string dataSign = encrypt(requestData, await SettingManager.GetSettingValueAsync(AppSettings.Shipping.ApiSecret), "UTF-8"); paramList.Add(new KeyValuePair <string, string>("DataSign", HttpUtility.UrlEncode(dataSign, Encoding.UTF8))); paramList.Add(new KeyValuePair <string, string>("DataType", "2")); var response = await httpClient.PostAsync(new Uri(url), new FormUrlEncodedContent(paramList)); var jsonResultString = await response.Content.ReadAsStringAsync(); if (jsonResultString.Contains("没有可用套餐")) { jsonResultString = shipment.ShipmentDetail; } result = JsonConvert.DeserializeObject <TraceResult>(jsonResultString); result.Traces = result.Traces.OrderByDescending(t => t.AcceptTime).ToList(); result.UpdateTime = result.Traces.FirstOrDefault()?.AcceptTime ?? DateTime.Now.DateTimeString(); result.State = (int)GetShippingStatus(logistics, jsonResultString, result.State); } catch { return(result); } finally { queryNum++; } } while (result.State == 0 && queryNum < 3); httpClient.Dispose(); return(result); }
protected virtual async Task <Logistics> UpdateLogisticsAsync(CreateOrUpdateLogisticsInput input) { var logistics = await _logisticsManager.FindByIdAsync(input.Id.Value); ObjectMapper.Map(input, logistics); await _logisticsManager.UpdateAsync(logistics); return(logistics); }