Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        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);
        }