shanji 2 years ago
parent
commit
5887df9ac3
  1. 3
      BBWY.Client/App.xaml.cs
  2. 15
      BBWY.Server.API/Controllers/ServiceOrderSyncController.cs
  3. 1
      BBWY.Server.API/Middlewares/CustomExceptionMiddleWare.cs
  4. 111
      BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs
  5. 9
      BBWY.Server.Model/Dto/Request/Sync/KuaiDi100PushRequest.cs

3
BBWY.Client/App.xaml.cs

@ -48,7 +48,7 @@ namespace BBWY.Client
//齐越山鸡 //齐越山鸡
//userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTM1MzMwMzI4ODkyMTQ5NzYwIiwidGVhbUlkIjoiMTUxNjk3NDI1MDU0MjUwMTg4OCIsInNvblRlYW1JZHMiOiIxNDM2Mjg4NTAwMjM1MjQzNTIwIiwiZXhwIjoxNjk0NjY5NjkxfQ.cSwro-7bGwOu92YejH9JhMenTai7Mvf99i2paQCmxIw"; //userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTM1MzMwMzI4ODkyMTQ5NzYwIiwidGVhbUlkIjoiMTUxNjk3NDI1MDU0MjUwMTg4OCIsInNvblRlYW1JZHMiOiIxNDM2Mjg4NTAwMjM1MjQzNTIwIiwiZXhwIjoxNjk0NjY5NjkxfQ.cSwro-7bGwOu92YejH9JhMenTai7Mvf99i2paQCmxIw";
userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTIwOTc1NzQ0MTY2MDA2Nzg0IiwidGVhbUlkIjoiMTQzNjI4ODUwMDIzNTI0MzUyMCIsInNvblRlYW1JZHMiOiIiLCJleHAiOjE3MDkyNzQ3NzZ9.2aAkMNeDPHUZ3q0K83Usp7QNhPMkBNW8uWxknJZ49oE"; //userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTIwOTc1NzQ0MTY2MDA2Nzg0IiwidGVhbUlkIjoiMTQzNjI4ODUwMDIzNTI0MzUyMCIsInNvblRlYW1JZHMiOiIiLCJleHAiOjE3MDkyNzQ3NzZ9.2aAkMNeDPHUZ3q0K83Usp7QNhPMkBNW8uWxknJZ49oE";
//刷单组测试 //刷单组测试
//userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTcxODUyODE0OTAzMTUyNjQwIiwidGVhbUlkIjoiMTU3MTg1MjQ1MDI5NjUwMDIyNCIsInNvblRlYW1JZHMiOiIiLCJleHAiOjE2OTUxNDc2ODh9.hVupdHnhgHHGo3QrMSDqhINqtq6Q5_RovWyXjiMkkEs"; //userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTcxODUyODE0OTAzMTUyNjQwIiwidGVhbUlkIjoiMTU3MTg1MjQ1MDI5NjUwMDIyNCIsInNvblRlYW1JZHMiOiIiLCJleHAiOjE2OTUxNDc2ODh9.hVupdHnhgHHGo3QrMSDqhINqtq6Q5_RovWyXjiMkkEs";
@ -104,6 +104,7 @@ namespace BBWY.Client
AutomaticDecompression = System.Net.DecompressionMethods.GZip AutomaticDecompression = System.Net.DecompressionMethods.GZip
}); });
serviceCollection.AddMemoryCache(); serviceCollection.AddMemoryCache();
serviceCollection.AddSingleton<RestApiService>(); serviceCollection.AddSingleton<RestApiService>();
serviceCollection.AddSingleton(gl); serviceCollection.AddSingleton(gl);

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

@ -1,6 +1,7 @@
using BBWY.Server.Business.Sync; using BBWY.Server.Business.Sync;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
namespace BBWY.Server.API.Controllers namespace BBWY.Server.API.Controllers
{ {
@ -16,9 +17,9 @@ namespace BBWY.Server.API.Controllers
[Consumes("application/x-www-form-urlencoded")] [Consumes("application/x-www-form-urlencoded")]
[HttpPost] [HttpPost]
public void KuaiDi100Callback() public void ReceiveKuaiDi100Push(string sign, string param)
{ {
jdServiceOrderSyncBusiness.ReceiveKuaiDi100Push(param);
} }
/// <summary> /// <summary>
@ -32,6 +33,16 @@ namespace BBWY.Server.API.Controllers
jdServiceOrderSyncBusiness.SyncServiceOrder(shopId, serviceId); jdServiceOrderSyncBusiness.SyncServiceOrder(shopId, serviceId);
} }
/// <summary>
/// 指定店铺同步
/// </summary>
/// <param name="shopId"></param>
[HttpPost("{shopId}")]
public void SyncServiceOrder([FromRoute] long shopId)
{
jdServiceOrderSyncBusiness.SyncServiceOrder(shopId, string.Empty);
}
/// <summary> /// <summary>
/// 全店服务单同步 /// 全店服务单同步
/// </summary> /// </summary>

1
BBWY.Server.API/Middlewares/CustomExceptionMiddleWare.cs

@ -39,6 +39,7 @@ namespace BBWY.Server.API.Middlewares
{ 503, "服务不可用" } { 503, "服务不可用" }
//其余状态自行扩展 //其余状态自行扩展
}; };
this.nLogManager = nLogManager;
} }
public async Task Invoke(HttpContext context) public async Task Invoke(HttpContext context)

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

@ -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,6 +269,7 @@ 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}");
if (serviceOrderListResponse.Data != null && serviceOrderListResponse.Data.Count() > 0)
jtokenList.AddRange(serviceOrderListResponse.Data); 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",
param = new
{ {
company = kuaidi100CompanyCode, company = kuaidi100CompanyCode,
number = serviceOrder.WayBillNo, number = serviceOrder.WayBillNo,
key = "SdcRPzxo8802", key = "SdcRPzxo8802",
parameters = new parameters = new
{ {
callbackurl = "https://bbwy.qiyue666.com/api/ServiceOrderSync/KuaiDi100Callback", callbackurl = "https://bbwy.qiyue666.com/api/ServiceOrderSync/ReceiveKuaiDi100Push",
salt = Guid.NewGuid(), salt = Guid.NewGuid(),
resultv2 = "4" resultv2 = "4"
} }
} });
}), null, HttpMethod.Post, RestApiService.ContentType_Form); var subscribeResult = restApiService.SendRequest("https://poll.kuaidi100.com", "poll", $"schema=json&param={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();
}
});
}
}
} }
} }

9
BBWY.Server.Model/Dto/Request/Sync/KuaiDi100PushRequest.cs

@ -0,0 +1,9 @@
namespace BBWY.Server.Model.Dto
{
public class KuaiDi100PushRequest
{
public string sign { get; set; }
}
}
Loading…
Cancel
Save