|
|
@ -22,9 +22,55 @@ namespace BBWY.Server.Business.Sync |
|
|
|
|
|
|
|
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) |
|
|
|
{ |
|
|
|
/* |
|
|
|
yuantong 圆通速递 |
|
|
|
yunda 韵达快递 |
|
|
|
zhongtong 中通快递 |
|
|
|
shentong 申通快递 |
|
|
|
jtexpress 极兔速递 |
|
|
|
youzhengguonei 邮政快递包裹 |
|
|
|
shunfeng 顺丰速运 |
|
|
|
ems EMS |
|
|
|
jd 京东物流 |
|
|
|
youzhengbk 邮政标准快递 |
|
|
|
fengwang 丰网速运 |
|
|
|
debangkuaidi 德邦快递 |
|
|
|
debangwuliu 德邦 |
|
|
|
zhongtongkuaiyun 中通快运 |
|
|
|
danniao 丹鸟 |
|
|
|
subida 速必达 |
|
|
|
lianhaowuliu 联昊通 |
|
|
|
yundakuaiyun 韵达快运 |
|
|
|
annengwuliu 安能快运 |
|
|
|
kuayue 跨越速运 |
|
|
|
jingdongkuaiyun 京东快运 |
|
|
|
huitongkuaidi 百世快递 |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
jd_kd100_logisticsCompanyDictionary = new List<LogisticsCompanyRelationship>() |
|
|
|
{ |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="<JD>",TargetName="<Kuaii100>",SecondTargetName="<kuaidi100 2>" } |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="圆通速递",TargetName="圆通速递",TargetCode="yuantong"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="圆通快递",TargetName="圆通速递",TargetCode="yuantong"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="韵达快递",TargetName="韵达快递",TargetCode="yunda"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="韵达快运",TargetName="韵达快运",TargetCode="yundakuaiyun"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="中通快递",TargetName="中通快递",TargetCode="zhongtong"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="中通速递",TargetName="中通快递",TargetCode="zhongtong"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="中通快运",TargetName="中通快运",TargetCode="zhongtongkuaiyun"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="极兔速递",TargetName="极兔速递",TargetCode="jtexpress"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="极兔快递",TargetName="极兔速递",TargetCode="jtexpress"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="邮政快递包裹",TargetName="邮政快递包裹",TargetCode="youzhengguonei"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="顺丰速运",TargetName="顺丰速运",TargetCode="shunfeng"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="顺丰快递",TargetName="顺丰速运",TargetCode="shunfeng"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="EMS",TargetName="EMS",TargetCode="ems"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="京东物流",TargetName="京东物流",TargetCode="jd"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="京东快递",TargetName="京东快运",TargetCode="jingdongkuaiyun"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="德邦快递",TargetName="德邦快递",TargetCode="debangkuaidi"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="德邦",TargetName="德邦",TargetCode="debangwuliu"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="丹鸟",TargetName="丹鸟",TargetCode="danniao"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="其他-丹鸟KD",TargetName="丹鸟",TargetCode="danniao"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="百世快递",TargetName="百世快递",TargetCode="huitongkuaidi"}, |
|
|
|
new LogisticsCompanyRelationship(){ SourceName="百世快运",TargetName="百世快递",TargetCode="huitongkuaidi"}, |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
@ -71,6 +117,7 @@ namespace BBWY.Server.Business.Sync |
|
|
|
}); |
|
|
|
|
|
|
|
List<ServiceOrder> insertServiceOrderList = new List<ServiceOrder>(); |
|
|
|
List<ExpressOrder> insertExpressOrderList = new List<ExpressOrder>(); |
|
|
|
List<IUpdate<ServiceOrder>> updateServiceOrderList = new List<IUpdate<ServiceOrder>>(); |
|
|
|
|
|
|
|
foreach (var serviceOrderJToken in jtokenList) |
|
|
@ -136,11 +183,27 @@ namespace BBWY.Server.Business.Sync |
|
|
|
StatusUpdateTime = statusUpdateTime, |
|
|
|
IsSubscribeKuaiDi100 = false, |
|
|
|
IsNeedSubscribeKuaiDi100 = isNeedSubscribeKuaiDi100, |
|
|
|
WaybillNo = string.Empty, |
|
|
|
ExpressName = string.Empty, |
|
|
|
ApplyTime = serviceOrderJToken.Value<DateTime>("applyTime") |
|
|
|
ApplyTime = serviceOrderJToken.Value<DateTime>("applyTime"), |
|
|
|
TransportDetails = 0 |
|
|
|
}; |
|
|
|
insertServiceOrderList.Add(dbServiceOrder); |
|
|
|
if (isNeedSubscribeKuaiDi100) |
|
|
|
{ |
|
|
|
var expressOrder = new ExpressOrder() |
|
|
|
{ |
|
|
|
Id = idGenerator.NewLong(), |
|
|
|
CreateTime = DateTime.Now, |
|
|
|
ExpressName = string.Empty, |
|
|
|
WayBillNo = string.Empty, |
|
|
|
OrderId = serviceOrderId, |
|
|
|
PackageType = 1, |
|
|
|
ServiceId = serviceId, |
|
|
|
UpdateTime = DateTime.Now, |
|
|
|
PurchaseOrderId = string.Empty, |
|
|
|
TransportStatus = 0 |
|
|
|
}; |
|
|
|
insertExpressOrderList.Add(expressOrder); |
|
|
|
} |
|
|
|
} |
|
|
|
else if (dbServiceOrder.Status != status) |
|
|
|
{ |
|
|
@ -154,6 +217,8 @@ namespace BBWY.Server.Business.Sync |
|
|
|
{ |
|
|
|
if (insertServiceOrderList.Count() > 0) |
|
|
|
fsql.Insert(insertServiceOrderList).ExecuteAffrows(); |
|
|
|
if (insertExpressOrderList.Count() > 0) |
|
|
|
fsql.Insert(insertExpressOrderList).ExecuteAffrows(); |
|
|
|
if (updateServiceOrderList.Count() > 0) |
|
|
|
foreach (var update in updateServiceOrderList) |
|
|
|
update.ExecuteAffrows(); |
|
|
@ -254,19 +319,30 @@ namespace BBWY.Server.Business.Sync |
|
|
|
try |
|
|
|
{ |
|
|
|
var relayAPIHost = GetPlatformRelayAPIHost(shop.PlatformId); |
|
|
|
var serviceOrderList = fsql.Select<ServiceOrder>().Where(s => s.ShopId == shop.Id && |
|
|
|
s.IsNeedSubscribeKuaiDi100 == true && |
|
|
|
s.IsSubscribeKuaiDi100 == false) |
|
|
|
.OrderByDescending(s => s.StatusUpdateTime) |
|
|
|
var serviceOrderList = fsql.Select<ServiceOrder, ExpressOrder>().InnerJoin((s, e) => s.ServiceId == e.ServiceId) |
|
|
|
.Where((s, e) => s.ShopId == shop.Id && |
|
|
|
s.IsNeedSubscribeKuaiDi100 == true && |
|
|
|
s.IsSubscribeKuaiDi100 == false) |
|
|
|
.OrderByDescending((s, e) => s.StatusUpdateTime) |
|
|
|
.Page(1, 50) |
|
|
|
.ToList(); |
|
|
|
.ToList((s, e) => new |
|
|
|
{ |
|
|
|
ServiceOrderPId = s.Id, |
|
|
|
ExpressOrderPId = e.Id, |
|
|
|
OrderId = s.OrderId, |
|
|
|
ServiceId = s.ServiceId, |
|
|
|
WaybillNo = e.WayBillNo, |
|
|
|
ExpressName = e.ExpressName |
|
|
|
}); |
|
|
|
List<IUpdate<ServiceOrder>> updateSerivceOrderList = new List<IUpdate<ServiceOrder>>(); |
|
|
|
|
|
|
|
List<IUpdate<ExpressOrder>> updateExpressOrderList = new List<IUpdate<ExpressOrder>>(); |
|
|
|
|
|
|
|
foreach (var serviceOrder in serviceOrderList) |
|
|
|
{ |
|
|
|
bool isUpdateDelivery = false, isUpdateSubscribe = false; |
|
|
|
if (string.IsNullOrEmpty(serviceOrder.WaybillNo) || string.IsNullOrEmpty(serviceOrder.ExpressName)) |
|
|
|
string waybillNo = serviceOrder.WaybillNo; |
|
|
|
string expressName = serviceOrder.ExpressName; |
|
|
|
if (string.IsNullOrEmpty(waybillNo) || string.IsNullOrEmpty(expressName)) |
|
|
|
{ |
|
|
|
|
|
|
|
try |
|
|
@ -291,17 +367,10 @@ namespace BBWY.Server.Business.Sync |
|
|
|
|
|
|
|
if (serviceOrderDeliveryResponse.Data != null) |
|
|
|
{ |
|
|
|
var wayBillNo = serviceOrderDeliveryResponse.Data.Value<string>("expressCode"); |
|
|
|
var expressName = serviceOrderDeliveryResponse.Data.Value<string>("expressCompany"); |
|
|
|
waybillNo = serviceOrderDeliveryResponse.Data.Value<string>("expressCode"); |
|
|
|
expressName = serviceOrderDeliveryResponse.Data.Value<string>("expressCompany"); |
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(wayBillNo) && !string.IsNullOrEmpty(expressName)) |
|
|
|
{ |
|
|
|
serviceOrder.WaybillNo = wayBillNo; |
|
|
|
serviceOrder.ExpressName = expressName; |
|
|
|
isUpdateDelivery = true; |
|
|
|
//var update = fsql.Update<ServiceOrder>(serviceOrder.Id).Set(s => s.WaybillNo, wayBillNo)
|
|
|
|
// .Set(s => s.ExpressName, expressName);
|
|
|
|
} |
|
|
|
isUpdateDelivery = !string.IsNullOrEmpty(waybillNo) && !string.IsNullOrEmpty(expressName); |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
} |
|
|
@ -316,14 +385,29 @@ namespace BBWY.Server.Business.Sync |
|
|
|
#region 订阅快递100
|
|
|
|
try |
|
|
|
{ |
|
|
|
var kuaidi100CompanyCode = ConvertToKuaiDi100CompanyCode(expressName); |
|
|
|
var subscribeResult = restApiService.SendRequest("https://poll.kuaidi100.com", "poll", JsonConvert.SerializeObject(new |
|
|
|
{ |
|
|
|
schema = "json", |
|
|
|
param = new |
|
|
|
{ |
|
|
|
|
|
|
|
company = kuaidi100CompanyCode, |
|
|
|
number = waybillNo, |
|
|
|
key = "SdcRPzxo8802", |
|
|
|
parameters = new |
|
|
|
{ |
|
|
|
callbackurl = "https://bbwy.qiyue666.com/api/ServiceOrderSync/KuaiDi100Callback", |
|
|
|
salt = Guid.NewGuid(), |
|
|
|
resultv2 = "4" |
|
|
|
} |
|
|
|
} |
|
|
|
}), null, HttpMethod.Post, RestApiService.ContentType_Form); |
|
|
|
if (subscribeResult.StatusCode != System.Net.HttpStatusCode.OK) |
|
|
|
throw new Exception($"订阅快递100失败 {subscribeResult.Content}"); |
|
|
|
var subscribeResponse = JsonConvert.DeserializeObject<KuaiDi100Response>(subscribeResult.Content); |
|
|
|
if (!subscribeResponse.result) |
|
|
|
throw new Exception($"订阅快递100失败 {subscribeResponse.message}"); |
|
|
|
|
|
|
|
isUpdateSubscribe = true; |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
@ -332,29 +416,46 @@ namespace BBWY.Server.Business.Sync |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
} |
|
|
|
|
|
|
|
if (isUpdateDelivery || isUpdateSubscribe) |
|
|
|
if (isUpdateDelivery) |
|
|
|
{ |
|
|
|
var update = fsql.Update<ServiceOrder>(serviceOrder.Id).SetIf(isUpdateDelivery, s => s.WaybillNo, serviceOrder.WaybillNo) |
|
|
|
.SetIf(isUpdateDelivery, s => s.ExpressName, serviceOrder.ExpressName) |
|
|
|
.SetIf(isUpdateSubscribe, s => s.IsSubscribeKuaiDi100, true); |
|
|
|
var update = fsql.Update<ExpressOrder>(serviceOrder.ExpressOrderPId).SetIf(isUpdateDelivery, e => e.WayBillNo, waybillNo) |
|
|
|
.SetIf(isUpdateDelivery, e => e.ExpressName, expressName); |
|
|
|
updateExpressOrderList.Add(update); |
|
|
|
} |
|
|
|
if (isUpdateSubscribe) |
|
|
|
{ |
|
|
|
var update = fsql.Update<ServiceOrder>(serviceOrder.ServiceOrderPId).SetIf(isUpdateSubscribe, s => s.IsSubscribeKuaiDi100, true); |
|
|
|
updateSerivceOrderList.Add(update); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (updateSerivceOrderList.Count() > 0) |
|
|
|
|
|
|
|
fsql.Transaction(() => |
|
|
|
{ |
|
|
|
fsql.Transaction(() => |
|
|
|
if (updateExpressOrderList.Count() > 0) |
|
|
|
{ |
|
|
|
foreach (var update in updateExpressOrderList) |
|
|
|
update.ExecuteAffrows(); |
|
|
|
} |
|
|
|
if (updateSerivceOrderList.Count() > 0) |
|
|
|
{ |
|
|
|
foreach (var update in updateSerivceOrderList) |
|
|
|
update.ExecuteAffrows(); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
{ |
|
|
|
nLogManager.GetLogger(loggerName).Error(ex, $"SubscribeKuaiDi100 ShopName:{shop.ShopName} ShopId:{shop.ShopId}"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private string ConvertToKuaiDi100CompanyCode(string sourceExpressName) |
|
|
|
{ |
|
|
|
var result = jd_kd100_logisticsCompanyDictionary.FirstOrDefault(l => l.SourceName == sourceExpressName); |
|
|
|
if (result == null) |
|
|
|
throw new Exception($"匹配快递100公司失败,原快递名称 {sourceExpressName}"); |
|
|
|
return result.TargetCode; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|