You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
4.2 KiB
95 lines
4.2 KiB
using BBWYB.Common.Http;
|
|
using BBWYB.Common.Models;
|
|
using Newtonsoft.Json;
|
|
using SDKAdapter;
|
|
|
|
namespace BBWYB.Server.Business
|
|
{
|
|
public class KuaiDi100Manager : IDenpendency
|
|
{
|
|
private RestApiService restApiService;
|
|
private ExpressCompanyNameConverter expressCompanyNameConverter;
|
|
|
|
public IList<int> KuaiDi100PushStateList_ZaiTu = new List<int>() { 0, 1001, 1002, 1003 };
|
|
public IList<int> KuaiDi100PushStateList_LanShou = new List<int>() { 1, 101, 102, 103 };
|
|
public IList<int> KuaiDi100PushStateList_QianShou = new List<int>() { 3, 301, 302, 303, 304 };
|
|
public IList<int> KuaiDi100PushStateList_PaiJian = new List<int>() { 5, 501 };
|
|
|
|
public KuaiDi100Manager(RestApiService restApiService, ExpressCompanyNameConverter expressCompanyNameConverter)
|
|
{
|
|
this.restApiService = restApiService;
|
|
this.expressCompanyNameConverter = expressCompanyNameConverter;
|
|
}
|
|
|
|
private void ThrowSubscribeError(string waybillno, string sourceExpressName, string kuaidi100CompanyCode, string error)
|
|
{
|
|
throw new Exception($"订阅快递100失败 waybillno:{waybillno} sourceExpressName:{sourceExpressName} kuaidi100CompanyCode:{kuaidi100CompanyCode} error:{error}");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 订阅快递100
|
|
/// </summary>
|
|
/// <param name="waybillno"></param>
|
|
/// <param name="sourceExpressName"></param>
|
|
/// <param name="kuaidi100CompanyCode"></param>
|
|
/// <param name="callbackUrl"></param>
|
|
public void SubscribeKuaiDi100(string waybillno, string sourceExpressName, string kuaidi100CompanyCode, string callbackUrl)
|
|
{
|
|
if (string.IsNullOrEmpty(sourceExpressName) && string.IsNullOrEmpty(kuaidi100CompanyCode))
|
|
ThrowSubscribeError(waybillno, sourceExpressName, kuaidi100CompanyCode, "原始快递公司名称和快递100公司编码必须任意一个有值");
|
|
|
|
if (string.IsNullOrEmpty(kuaidi100CompanyCode))
|
|
{
|
|
kuaidi100CompanyCode = expressCompanyNameConverter.ConverterToKuaiDi100CompanyCode(sourceExpressName);
|
|
if (string.IsNullOrEmpty(kuaidi100CompanyCode))
|
|
ThrowSubscribeError(waybillno, sourceExpressName, kuaidi100CompanyCode, "无翻译结果");
|
|
}
|
|
|
|
var paramStr = JsonConvert.SerializeObject(new
|
|
{
|
|
company = kuaidi100CompanyCode,
|
|
number = waybillno,
|
|
key = "SdcRPzxo8802",
|
|
parameters = new
|
|
{
|
|
callbackurl = callbackUrl,
|
|
salt = Guid.NewGuid(),
|
|
resultv2 = "4"
|
|
}
|
|
});
|
|
var subscribeResult = restApiService.SendRequest("https://poll.kuaidi100.com", "poll", $"schema=json¶m={paramStr}", null, HttpMethod.Post, RestApiService.ContentType_Form);
|
|
if (subscribeResult.StatusCode != System.Net.HttpStatusCode.OK)
|
|
ThrowSubscribeError(waybillno, sourceExpressName, kuaidi100CompanyCode, subscribeResult.Content);
|
|
var subscribeResponse = JsonConvert.DeserializeObject<KuaiDi100Response>(subscribeResult.Content);
|
|
if (!subscribeResponse.result)
|
|
ThrowSubscribeError(waybillno, sourceExpressName, kuaidi100CompanyCode, subscribeResponse.message);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取物流状态 ZaiTu LanShou QianShou PaiJian Unknow
|
|
/// </summary>
|
|
/// <param name="kuaidi100State"></param>
|
|
/// <returns></returns>
|
|
public string GetExpressState(int kuaidi100State)
|
|
{
|
|
if (KuaiDi100PushStateList_ZaiTu.Contains(kuaidi100State))
|
|
return "ZaiTu";
|
|
if (KuaiDi100PushStateList_LanShou.Contains(kuaidi100State))
|
|
return "LanShou";
|
|
if (KuaiDi100PushStateList_QianShou.Contains(kuaidi100State))
|
|
return "QianShou";
|
|
if (KuaiDi100PushStateList_PaiJian.Contains(kuaidi100State))
|
|
return "PaiJian";
|
|
return "Unknow";
|
|
}
|
|
}
|
|
|
|
public class KuaiDi100Response
|
|
{
|
|
public bool result { get; set; }
|
|
|
|
public int returnCode { get; set; }
|
|
|
|
public string message { get; set; }
|
|
}
|
|
}
|
|
|