diff --git a/BBWY.Client/App.xaml.cs b/BBWY.Client/App.xaml.cs index 0ce57e2d..86bec02d 100644 --- a/BBWY.Client/App.xaml.cs +++ b/BBWY.Client/App.xaml.cs @@ -48,7 +48,7 @@ namespace BBWY.Client //齐越山鸡 //userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTM1MzMwMzI4ODkyMTQ5NzYwIiwidGVhbUlkIjoiMTUxNjk3NDI1MDU0MjUwMTg4OCIsInNvblRlYW1JZHMiOiIxNDM2Mjg4NTAwMjM1MjQzNTIwIiwiZXhwIjoxNjk0NjY5NjkxfQ.cSwro-7bGwOu92YejH9JhMenTai7Mvf99i2paQCmxIw"; - userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTIwOTc1NzQ0MTY2MDA2Nzg0IiwidGVhbUlkIjoiMTQzNjI4ODUwMDIzNTI0MzUyMCIsInNvblRlYW1JZHMiOiIiLCJleHAiOjE3MDkyNzQ3NzZ9.2aAkMNeDPHUZ3q0K83Usp7QNhPMkBNW8uWxknJZ49oE"; + //userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTIwOTc1NzQ0MTY2MDA2Nzg0IiwidGVhbUlkIjoiMTQzNjI4ODUwMDIzNTI0MzUyMCIsInNvblRlYW1JZHMiOiIiLCJleHAiOjE3MDkyNzQ3NzZ9.2aAkMNeDPHUZ3q0K83Usp7QNhPMkBNW8uWxknJZ49oE"; //刷单组测试 //userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTcxODUyODE0OTAzMTUyNjQwIiwidGVhbUlkIjoiMTU3MTg1MjQ1MDI5NjUwMDIyNCIsInNvblRlYW1JZHMiOiIiLCJleHAiOjE2OTUxNDc2ODh9.hVupdHnhgHHGo3QrMSDqhINqtq6Q5_RovWyXjiMkkEs"; @@ -104,6 +104,7 @@ namespace BBWY.Client AutomaticDecompression = System.Net.DecompressionMethods.GZip }); + serviceCollection.AddMemoryCache(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(gl); diff --git a/BBWY.Server.API/Controllers/ServiceOrderSyncController.cs b/BBWY.Server.API/Controllers/ServiceOrderSyncController.cs index 8b668f16..f296ff33 100644 --- a/BBWY.Server.API/Controllers/ServiceOrderSyncController.cs +++ b/BBWY.Server.API/Controllers/ServiceOrderSyncController.cs @@ -1,6 +1,7 @@ using BBWY.Server.Business.Sync; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json.Linq; namespace BBWY.Server.API.Controllers { @@ -16,9 +17,9 @@ namespace BBWY.Server.API.Controllers [Consumes("application/x-www-form-urlencoded")] [HttpPost] - public void KuaiDi100Callback() + public void ReceiveKuaiDi100Push(string sign, string param) { - + jdServiceOrderSyncBusiness.ReceiveKuaiDi100Push(param); } /// @@ -32,6 +33,16 @@ namespace BBWY.Server.API.Controllers jdServiceOrderSyncBusiness.SyncServiceOrder(shopId, serviceId); } + /// + /// 指定店铺同步 + /// + /// + [HttpPost("{shopId}")] + public void SyncServiceOrder([FromRoute] long shopId) + { + jdServiceOrderSyncBusiness.SyncServiceOrder(shopId, string.Empty); + } + /// /// 全店服务单同步 /// diff --git a/BBWY.Server.API/Middlewares/CustomExceptionMiddleWare.cs b/BBWY.Server.API/Middlewares/CustomExceptionMiddleWare.cs index ceb24a6d..10edd6f7 100644 --- a/BBWY.Server.API/Middlewares/CustomExceptionMiddleWare.cs +++ b/BBWY.Server.API/Middlewares/CustomExceptionMiddleWare.cs @@ -39,6 +39,7 @@ namespace BBWY.Server.API.Middlewares { 503, "服务不可用" } //其余状态自行扩展 }; + this.nLogManager = nLogManager; } public async Task Invoke(HttpContext context) diff --git a/BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs b/BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs index a4fbd679..4f40294b 100644 --- a/BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs +++ b/BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs @@ -19,6 +19,7 @@ namespace BBWY.Server.Business.Sync public class JDServiceOrderSyncBusiness : BaseSyncBusiness, IDenpendency { private IList jd_kd100_logisticsCompanyDictionary; + private IList kuaiDi100PushStateList; public JDServiceOrderSyncBusiness(RestApiService restApiService, IOptions 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 百世快递 */ + kuaiDi100PushStateList = new List() + { + 0, //在途 + 1, //揽收 + 3, //签收 + 5, //派件 + }; jd_kd100_logisticsCompanyDictionary = new List() { @@ -105,7 +113,7 @@ huitongkuaidi 百世快递 var apiOrderIdList = jtokenList.Where(j => exceptServiceIdList.Contains(j.Value("serviceId"))).Select(j => j.Value("orderId")).ToList(); var dbOrderSkuList = fsql.Select().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 { Id = osku.Id, @@ -133,6 +141,7 @@ huitongkuaidi 百世快递 if (dbOsku == null) continue; var isNeedSubscribeKuaiDi100 = false; + var isTuiHuoCang = false; #region 待收货服务单,检查是否需要订阅快递100 if (status == 10005) @@ -162,6 +171,7 @@ huitongkuaidi 百世快递 //检查退货城市是否为泉州 isNeedSubscribeKuaiDi100 = serviceOrderDetailResponse.Data["returnWareAddress"].Value("cityCode") == 2812; + isTuiHuoCang = isNeedSubscribeKuaiDi100; } catch { } } @@ -183,8 +193,9 @@ huitongkuaidi 百世快递 IsSubscribeKuaiDi100 = false, IsNeedSubscribeKuaiDi100 = isNeedSubscribeKuaiDi100, ApplyTime = serviceOrderJToken.Value("applyTime"), - TransportDetails = 0 }; + if (isTuiHuoCang) + dbServiceOrder.ReturnDirection = 0; insertServiceOrderList.Add(dbServiceOrder); } else if (dbServiceOrder.Status != status) @@ -258,7 +269,8 @@ huitongkuaidi 百世快递 var serviceOrderListResponse = JsonConvert.DeserializeObject>(serviceOrderListApiResult.Content); if (!serviceOrderListResponse.Success) 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)) break; } @@ -355,22 +367,19 @@ huitongkuaidi 百世快递 try { 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, + number = serviceOrder.WayBillNo, + key = "SdcRPzxo8802", + parameters = new { - company = kuaidi100CompanyCode, - number = serviceOrder.WayBillNo, - key = "SdcRPzxo8802", - parameters = new - { - callbackurl = "https://bbwy.qiyue666.com/api/ServiceOrderSync/KuaiDi100Callback", - salt = Guid.NewGuid(), - resultv2 = "4" - } + callbackurl = "https://bbwy.qiyue666.com/api/ServiceOrderSync/ReceiveKuaiDi100Push", + 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) throw new Exception($"订阅快递100失败 {subscribeResult.Content}"); var subscribeResponse = JsonConvert.DeserializeObject(subscribeResult.Content); @@ -433,5 +442,89 @@ huitongkuaidi 百世快递 throw new Exception($"匹配快递100公司失败,原快递名称 {sourceExpressName}"); return result.TargetCode; } + + + + public void ReceiveKuaiDi100Push(string param) + { + JObject jobject = JObject.Parse(param); + var waybillNo = jobject["lastResult"].Value("nu"); + var state = jobject["lastResult"].Value("state"); + if (!kuaiDi100PushStateList.Contains(state)) + return; + + var serviceOrderList = fsql.Select().Where(s => s.WayBillNo == waybillNo).ToList(); + if (serviceOrderList.Count() == 0) + throw new Exception($"快递单号{waybillNo} 未找到对应的服务单"); + + var expressOrder = fsql.Select().Where(e => e.WayBillNo == waybillNo).ToOne(); + if (expressOrder == null) + throw new Exception($"快递单号{waybillNo} 未找到对应的快递单"); + + if (expressOrder.TransportStatus == 1) //已入库 + return; + + IUpdate updateExpressOrder = null; + List> updateServiceOrderList = new List>(); + + /* + 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("statusCode") == 3); + if (data != null) + signTime = DateTime.Parse(data.Value("ftime")); + } + } + else if (state == 5) + { + if (expressOrder.TransportStatus != 2) + { + isUpdate = true; + newStatus = 2; + } + } + + if (isUpdate) + { + fsql.Transaction(() => + { + fsql.Update(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.Id).Set(s => s.TransportDetails, newStatus) + .ExecuteAffrows(); + } + }); + } + } } } diff --git a/BBWY.Server.Model/Dto/Request/Sync/KuaiDi100PushRequest.cs b/BBWY.Server.Model/Dto/Request/Sync/KuaiDi100PushRequest.cs new file mode 100644 index 00000000..b6046f2d --- /dev/null +++ b/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; } + + + } +}