Browse Source

订阅快递100

qianyi
shanji 2 years ago
parent
commit
32e2c70278
  1. 20
      BBWY.Server.API/Controllers/ServiceOrderSyncController.cs
  2. 4
      BBWY.Server.Business/PlatformSDK/LogisticsCompanyConverter.cs
  3. 163
      BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs
  4. 67
      BBWY.Server.Model/Db/Order/ExpressOrder.cs
  5. 11
      BBWY.Server.Model/Db/Order/Serviceorder.cs
  6. 11
      BBWY.Server.Model/Dto/Response/KuaiDi100Response.cs
  7. 38
      BBWY.Test/Program.cs

20
BBWY.Server.API/Controllers/ServiceOrderSyncController.cs

@ -0,0 +1,20 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace BBWY.Server.API.Controllers
{
public class ServiceOrderSyncController : BaseApiController
{
public ServiceOrderSyncController(IHttpContextAccessor httpContextAccessor) : base(httpContextAccessor)
{
}
[Consumes("application/x-www-form-urlencoded")]
[HttpPost]
public void KuaiDi100Callback()
{
}
}
}

4
BBWY.Server.Business/PlatformSDK/LogisticsCompanyConverter.cs

@ -114,6 +114,10 @@ namespace BBWY.Server.Business
public string TargetName { get; set; }
public string TargetCode { get; set; }
public string SecondTargetName { get; set; }
public string SecondTargetCode { get; set; }
}
}

163
BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs

@ -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;
}
}
}

67
BBWY.Server.Model/Db/Order/ExpressOrder.cs

@ -0,0 +1,67 @@
using FreeSql.DataAnnotations;
using System;
namespace BBWY.Server.Model.Db
{
/// <summary>
/// 快递单表
/// </summary>
[Table(Name = "expressorder", DisableSyncStructure = true)]
public partial class ExpressOrder
{
[Column(IsPrimary = true, IsIdentity = true)]
public long Id { get; set; }
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 快递公司名称
/// </summary>
[Column(StringLength = 100)]
public string ExpressName { get; set; }
/// <summary>
/// 订单Id
/// </summary>
[Column(StringLength = 100)]
public string OrderId { get; set; }
/// <summary>
/// 包裹类型(采购包裹=0 退货包裹=1)
/// </summary>
public int? PackageType { get; set; }
/// <summary>
/// 采购单Id;可空
/// </summary>
public string PurchaseOrderId { get; set; }
/// <summary>
/// 服务单Id;可空
/// </summary>
[Column(StringLength = 100)]
public string ServiceId { get; set; }
/// <summary>
/// 物流状态(0=待入库,1=已入库,2=派送中,3=运输中)
/// </summary>
public int? TransportStatus { get; set; }
[Column(DbType = "datetime")]
public DateTime? UpdateTime { get; set; }
/// <summary>
/// 快递单号
/// </summary>
[Column(StringLength = 100)]
public string WayBillNo { get; set; }
}
}

11
BBWY.Server.Model/Db/Order/Serviceorder.cs

@ -45,12 +45,6 @@ namespace BBWY.Server.Model.Db {
[Column(DbType = "decimal(18,2)")]
public decimal? DeliveryExpressFreight { get; set; } = 0.00M;
/// <summary>
/// 快递公司名称
/// </summary>
[Column(StringLength = 100)]
public string ExpressName { get; set; }
/// <summary>
/// 头程费
/// </summary>
@ -278,11 +272,6 @@ namespace BBWY.Server.Model.Db {
[Column(StringLength = 100)]
public string WareHouseGrounpRemark { get; set; }
/// <summary>
/// 退货运单号
/// </summary>
[Column(StringLength = 100)]
public string WaybillNo { get; set; }
}

11
BBWY.Server.Model/Dto/Response/KuaiDi100Response.cs

@ -0,0 +1,11 @@
namespace BBWY.Server.Model.Dto
{
public class KuaiDi100Response
{
public bool result { get; set; }
public int returnCode { get; set; }
public string message { get; set; }
}
}

38
BBWY.Test/Program.cs

@ -45,16 +45,16 @@ namespace BBWY.Test
//var token = "44c19a1c1fbd4641957e6e8985ed1358jmtl"; //森王玩具
//var token = "4a0ddc095e054c7aa90adcaccb14f83cwzgr"; //可比车品
//var dt1 = DateTime.Now;
//List<string> list = new List<string>();
//for (var i = 1; i <= 5000000; i++)
//{
// var md5 = tomMd5(Guid.NewGuid().ToString());
// list.Add(md5);
// Console.WriteLine($"生成第{i}位指纹,{md5}");
//}
//var dt2 = DateTime.Now;
//Console.WriteLine($"总数量{list.Count},总耗时{(dt2 - dt1).TotalSeconds}秒");
var dt1 = DateTime.Now;
List<string> list = new List<string>();
for (var i = 1; i <= 5000000; i++)
{
var str = tomMd5($"Mozilla/5.0 (Linux; Android 12; 21121210C Build/SKQ1.211006.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/13.8 SP-engine/2.46.0 baiduboxapp/13.8.1.10 (Baidu; P1 12) NABar/1.0 Edg/102.0.5005.63_{i}_192.158.241.{i}_28726526517321");
Console.WriteLine($"生成第{i}位指纹,长度{str.Length},{str}");
list.Add(str);
}
var dt2 = DateTime.Now;
Console.WriteLine($"总数量{list.Count},总耗时{(dt2 - dt1).TotalSeconds}秒");
@ -97,21 +97,21 @@ namespace BBWY.Test
var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime());
*/
var req = new AscQueryViewRequest();
req.buId = "10598776";
req.operatePin = "开发测试";
req.operateNick = "开发测试";
req.serviceId = 1688379598;
req.orderId = 262837096353;
//var req = new AscQueryViewRequest();
//req.buId = "10598776";
//req.operatePin = "开发测试";
//req.operateNick = "开发测试";
//req.serviceId = 1688379598;
//req.orderId = 262837096353;
var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime());
//var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime());
Console.WriteLine(JsonConvert.SerializeObject(res));
////var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime());
//Console.WriteLine(JsonConvert.SerializeObject(res));
Console.ReadKey();
}

Loading…
Cancel
Save