|
@ -19,6 +19,7 @@ namespace BBWY.Server.Business.Sync |
|
|
public class JDServiceOrderSyncBusiness : BaseSyncBusiness, IDenpendency |
|
|
public class JDServiceOrderSyncBusiness : BaseSyncBusiness, IDenpendency |
|
|
{ |
|
|
{ |
|
|
private IList<LogisticsCompanyRelationship> jd_kd100_logisticsCompanyDictionary; |
|
|
private IList<LogisticsCompanyRelationship> jd_kd100_logisticsCompanyDictionary; |
|
|
|
|
|
private IList<int> kuaiDi100PushStateList; |
|
|
|
|
|
|
|
|
public JDServiceOrderSyncBusiness(RestApiService restApiService, IOptions<GlobalConfig> options, NLogManager nLogManager, IFreeSql fsql, IIdGenerator idGenerator, TaskSchedulerManager taskSchedulerManager, VenderBusiness venderBusiness, YunDingBusiness yunDingBusiness) : base(restApiService, options, nLogManager, fsql, idGenerator, taskSchedulerManager, venderBusiness, yunDingBusiness) |
|
|
public JDServiceOrderSyncBusiness(RestApiService restApiService, IOptions<GlobalConfig> options, NLogManager nLogManager, IFreeSql fsql, IIdGenerator idGenerator, TaskSchedulerManager taskSchedulerManager, VenderBusiness venderBusiness, YunDingBusiness yunDingBusiness) : base(restApiService, options, nLogManager, fsql, idGenerator, taskSchedulerManager, venderBusiness, yunDingBusiness) |
|
|
{ |
|
|
{ |
|
@ -47,6 +48,13 @@ jingdongkuaiyun 京东快运 |
|
|
huitongkuaidi 百世快递 |
|
|
huitongkuaidi 百世快递 |
|
|
|
|
|
|
|
|
*/ |
|
|
*/ |
|
|
|
|
|
kuaiDi100PushStateList = new List<int>() |
|
|
|
|
|
{ |
|
|
|
|
|
0, //在途
|
|
|
|
|
|
1, //揽收
|
|
|
|
|
|
3, //签收
|
|
|
|
|
|
5, //派件
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
jd_kd100_logisticsCompanyDictionary = new List<LogisticsCompanyRelationship>() |
|
|
jd_kd100_logisticsCompanyDictionary = new List<LogisticsCompanyRelationship>() |
|
|
{ |
|
|
{ |
|
@ -105,7 +113,7 @@ huitongkuaidi 百世快递 |
|
|
|
|
|
|
|
|
var apiOrderIdList = jtokenList.Where(j => exceptServiceIdList.Contains(j.Value<string>("serviceId"))).Select(j => j.Value<string>("orderId")).ToList(); |
|
|
var apiOrderIdList = jtokenList.Where(j => exceptServiceIdList.Contains(j.Value<string>("serviceId"))).Select(j => j.Value<string>("orderId")).ToList(); |
|
|
var dbOrderSkuList = fsql.Select<OrderSku, Order>().InnerJoin((osku, o) => osku.OrderId == o.Id) |
|
|
var dbOrderSkuList = fsql.Select<OrderSku, Order>().InnerJoin((osku, o) => osku.OrderId == o.Id) |
|
|
.Where((osku, o) => osku.ShopId == shopId && apiOrderIdList.Contains(osku.OrderId)) |
|
|
.Where((osku, o) => osku.ShopId == shopId && apiOrderIdList.Contains(osku.OrderId) && osku.Price != 0) |
|
|
.ToList((osku, o) => new |
|
|
.ToList((osku, o) => new |
|
|
{ |
|
|
{ |
|
|
Id = osku.Id, |
|
|
Id = osku.Id, |
|
@ -133,6 +141,7 @@ huitongkuaidi 百世快递 |
|
|
if (dbOsku == null) |
|
|
if (dbOsku == null) |
|
|
continue; |
|
|
continue; |
|
|
var isNeedSubscribeKuaiDi100 = false; |
|
|
var isNeedSubscribeKuaiDi100 = false; |
|
|
|
|
|
var isTuiHuoCang = false; |
|
|
|
|
|
|
|
|
#region 待收货服务单,检查是否需要订阅快递100
|
|
|
#region 待收货服务单,检查是否需要订阅快递100
|
|
|
if (status == 10005) |
|
|
if (status == 10005) |
|
@ -162,6 +171,7 @@ huitongkuaidi 百世快递 |
|
|
|
|
|
|
|
|
//检查退货城市是否为泉州
|
|
|
//检查退货城市是否为泉州
|
|
|
isNeedSubscribeKuaiDi100 = serviceOrderDetailResponse.Data["returnWareAddress"].Value<int>("cityCode") == 2812; |
|
|
isNeedSubscribeKuaiDi100 = serviceOrderDetailResponse.Data["returnWareAddress"].Value<int>("cityCode") == 2812; |
|
|
|
|
|
isTuiHuoCang = isNeedSubscribeKuaiDi100; |
|
|
} |
|
|
} |
|
|
catch { } |
|
|
catch { } |
|
|
} |
|
|
} |
|
@ -183,8 +193,9 @@ huitongkuaidi 百世快递 |
|
|
IsSubscribeKuaiDi100 = false, |
|
|
IsSubscribeKuaiDi100 = false, |
|
|
IsNeedSubscribeKuaiDi100 = isNeedSubscribeKuaiDi100, |
|
|
IsNeedSubscribeKuaiDi100 = isNeedSubscribeKuaiDi100, |
|
|
ApplyTime = serviceOrderJToken.Value<DateTime>("applyTime"), |
|
|
ApplyTime = serviceOrderJToken.Value<DateTime>("applyTime"), |
|
|
TransportDetails = 0 |
|
|
|
|
|
}; |
|
|
}; |
|
|
|
|
|
if (isTuiHuoCang) |
|
|
|
|
|
dbServiceOrder.ReturnDirection = 0; |
|
|
insertServiceOrderList.Add(dbServiceOrder); |
|
|
insertServiceOrderList.Add(dbServiceOrder); |
|
|
} |
|
|
} |
|
|
else if (dbServiceOrder.Status != status) |
|
|
else if (dbServiceOrder.Status != status) |
|
@ -258,7 +269,8 @@ huitongkuaidi 百世快递 |
|
|
var serviceOrderListResponse = JsonConvert.DeserializeObject<ApiResponse<JArray>>(serviceOrderListApiResult.Content); |
|
|
var serviceOrderListResponse = JsonConvert.DeserializeObject<ApiResponse<JArray>>(serviceOrderListApiResult.Content); |
|
|
if (!serviceOrderListResponse.Success) |
|
|
if (!serviceOrderListResponse.Success) |
|
|
throw new Exception($"获取服务单失败 {serviceOrderListResponse.Msg}"); |
|
|
throw new Exception($"获取服务单失败 {serviceOrderListResponse.Msg}"); |
|
|
jtokenList.AddRange(serviceOrderListResponse.Data); |
|
|
if (serviceOrderListResponse.Data != null && serviceOrderListResponse.Data.Count() > 0) |
|
|
|
|
|
jtokenList.AddRange(serviceOrderListResponse.Data); |
|
|
if (!string.IsNullOrEmpty(serviceId)) |
|
|
if (!string.IsNullOrEmpty(serviceId)) |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
@ -355,22 +367,19 @@ huitongkuaidi 百世快递 |
|
|
try |
|
|
try |
|
|
{ |
|
|
{ |
|
|
var kuaidi100CompanyCode = ConvertToKuaiDi100CompanyCode(serviceOrder.ExpressName); |
|
|
var kuaidi100CompanyCode = ConvertToKuaiDi100CompanyCode(serviceOrder.ExpressName); |
|
|
var subscribeResult = restApiService.SendRequest("https://poll.kuaidi100.com", "poll", JsonConvert.SerializeObject(new |
|
|
var paramStr = JsonConvert.SerializeObject(new |
|
|
{ |
|
|
{ |
|
|
schema = "json", |
|
|
company = kuaidi100CompanyCode, |
|
|
param = new |
|
|
number = serviceOrder.WayBillNo, |
|
|
|
|
|
key = "SdcRPzxo8802", |
|
|
|
|
|
parameters = new |
|
|
{ |
|
|
{ |
|
|
company = kuaidi100CompanyCode, |
|
|
callbackurl = "https://bbwy.qiyue666.com/api/ServiceOrderSync/ReceiveKuaiDi100Push", |
|
|
number = serviceOrder.WayBillNo, |
|
|
salt = Guid.NewGuid(), |
|
|
key = "SdcRPzxo8802", |
|
|
resultv2 = "4" |
|
|
parameters = new |
|
|
|
|
|
{ |
|
|
|
|
|
callbackurl = "https://bbwy.qiyue666.com/api/ServiceOrderSync/KuaiDi100Callback", |
|
|
|
|
|
salt = Guid.NewGuid(), |
|
|
|
|
|
resultv2 = "4" |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
}), null, HttpMethod.Post, RestApiService.ContentType_Form); |
|
|
}); |
|
|
|
|
|
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) |
|
|
if (subscribeResult.StatusCode != System.Net.HttpStatusCode.OK) |
|
|
throw new Exception($"订阅快递100失败 {subscribeResult.Content}"); |
|
|
throw new Exception($"订阅快递100失败 {subscribeResult.Content}"); |
|
|
var subscribeResponse = JsonConvert.DeserializeObject<KuaiDi100Response>(subscribeResult.Content); |
|
|
var subscribeResponse = JsonConvert.DeserializeObject<KuaiDi100Response>(subscribeResult.Content); |
|
@ -433,5 +442,89 @@ huitongkuaidi 百世快递 |
|
|
throw new Exception($"匹配快递100公司失败,原快递名称 {sourceExpressName}"); |
|
|
throw new Exception($"匹配快递100公司失败,原快递名称 {sourceExpressName}"); |
|
|
return result.TargetCode; |
|
|
return result.TargetCode; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void ReceiveKuaiDi100Push(string param) |
|
|
|
|
|
{ |
|
|
|
|
|
JObject jobject = JObject.Parse(param); |
|
|
|
|
|
var waybillNo = jobject["lastResult"].Value<string>("nu"); |
|
|
|
|
|
var state = jobject["lastResult"].Value<int>("state"); |
|
|
|
|
|
if (!kuaiDi100PushStateList.Contains(state)) |
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
var serviceOrderList = fsql.Select<ServiceOrder>().Where(s => s.WayBillNo == waybillNo).ToList(); |
|
|
|
|
|
if (serviceOrderList.Count() == 0) |
|
|
|
|
|
throw new Exception($"快递单号{waybillNo} 未找到对应的服务单"); |
|
|
|
|
|
|
|
|
|
|
|
var expressOrder = fsql.Select<ExpressOrder>().Where(e => e.WayBillNo == waybillNo).ToOne(); |
|
|
|
|
|
if (expressOrder == null) |
|
|
|
|
|
throw new Exception($"快递单号{waybillNo} 未找到对应的快递单"); |
|
|
|
|
|
|
|
|
|
|
|
if (expressOrder.TransportStatus == 1) //已入库
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
IUpdate<ExpressOrder> updateExpressOrder = null; |
|
|
|
|
|
List<IUpdate<ServiceOrder>> updateServiceOrderList = new List<IUpdate<ServiceOrder>>(); |
|
|
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
|
0, //在途
|
|
|
|
|
|
1, //揽收
|
|
|
|
|
|
3, //签收
|
|
|
|
|
|
5, //派件
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
var isUpdate = false; |
|
|
|
|
|
var newStatus = 0; |
|
|
|
|
|
DateTime? signTime = null; |
|
|
|
|
|
|
|
|
|
|
|
if (state == 0 || state == 1) |
|
|
|
|
|
{ |
|
|
|
|
|
//在途 //揽收
|
|
|
|
|
|
if (expressOrder.TransportStatus != 3) |
|
|
|
|
|
{ |
|
|
|
|
|
isUpdate = true; |
|
|
|
|
|
newStatus = 3; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
else if (state == 3) |
|
|
|
|
|
{ |
|
|
|
|
|
if (expressOrder.TransportStatus != 0) |
|
|
|
|
|
{ |
|
|
|
|
|
isUpdate = true; |
|
|
|
|
|
newStatus = 0; |
|
|
|
|
|
|
|
|
|
|
|
var data = jobject["lastResult"]["data"].Children().FirstOrDefault(d => d.Value<int>("statusCode") == 3); |
|
|
|
|
|
if (data != null) |
|
|
|
|
|
signTime = DateTime.Parse(data.Value<string>("ftime")); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
else if (state == 5) |
|
|
|
|
|
{ |
|
|
|
|
|
if (expressOrder.TransportStatus != 2) |
|
|
|
|
|
{ |
|
|
|
|
|
isUpdate = true; |
|
|
|
|
|
newStatus = 2; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (isUpdate) |
|
|
|
|
|
{ |
|
|
|
|
|
fsql.Transaction(() => |
|
|
|
|
|
{ |
|
|
|
|
|
fsql.Update<ExpressOrder>(expressOrder.Id).Set(e => e.TransportStatus, newStatus) |
|
|
|
|
|
.SetIf(state == 3, e => e.SignTime, signTime) |
|
|
|
|
|
.ExecuteAffrows(); //签收
|
|
|
|
|
|
|
|
|
|
|
|
foreach (var serviceOrder in serviceOrderList) |
|
|
|
|
|
{ |
|
|
|
|
|
if (serviceOrder.TransportDetails == 1) |
|
|
|
|
|
continue; |
|
|
|
|
|
fsql.Update<ServiceOrder>(serviceOrder.Id).Set(s => s.TransportDetails, newStatus) |
|
|
|
|
|
.ExecuteAffrows(); |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|