From 79ae281ccf2b1f4e327c7db59080bcb9c3c0e79e Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 18 Mar 2023 18:23:37 +0800 Subject: [PATCH] 1 --- .../Sync/JD/JDServiceOrderSyncBusiness.cs | 152 ++++++++++-------- 1 file changed, 88 insertions(+), 64 deletions(-) diff --git a/BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs b/BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs index 6ea23f9d..98e042e7 100644 --- a/BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs +++ b/BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs @@ -34,9 +34,94 @@ namespace BBWY.Server.Business.Sync } } - private void SyncServiceOrder(ShopResponse shop, JArray jArray) + private void SyncServiceOrder(ShopResponse shop, long shopId, IList jtokenList, string relayAPIHost, string appKey, string appSecret, string token) { + var serviceIdList = jtokenList.Select(j => j.Value("serviceId")).ToList(); + var dbServiceOrderList = fsql.Select().Where(s => s.ShopId == shop.ShopId && serviceIdList.Contains(s.ServiceId)).ToList(); + var dbServiceIdList = dbServiceOrderList.Select(s => s.ServiceId).ToList(); + var exceptServiceIdList = serviceIdList.Except(dbServiceIdList); + 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)) + .ToList((osku, o) => new + { + Id = osku.Id, + ProductId = osku.ProductId, + SkuId = osku.SkuId, + OrderId = osku.OrderId, + ItemTotal = osku.ItemTotal, + StorageType = o.StorageType + }); + + foreach (var serviceOrderJToken in jtokenList) + { + var serviceId = serviceOrderJToken.Value("serviceId"); + var status = serviceOrderJToken.Value("sserviceOrderJToken"); + var dbServiceOrder = dbServiceOrderList.FirstOrDefault(s => s.ServiceId == serviceId); + if (dbServiceOrder == null) + { + var serviceOrderId = serviceOrderJToken.Value("orderId"); + var skuId = serviceOrderJToken.Value("skuId"); + var dbOsku = dbOrderSkuList.FirstOrDefault(osku => osku.OrderId == serviceOrderId && osku.SkuId == skuId); + if (dbOsku == null) + continue; + var isNeedSubscribeKuaiDi100 = false; + + #region 待收货服务单,检查是否需要订阅快递100 + if (status == 10005) + { + if (dbOsku.StorageType == Enums.StorageType.代发) + isNeedSubscribeKuaiDi100 = true; + else + { + try + { + var serviceOrderDetailResult = restApiService.SendRequest(relayAPIHost, "api/PlatformSDK/GetServiceOrderDetail", new QueryServiceOrderDetailRequest() + { + AppKey = appKey, + AppSecret = appSecret, + AppToken = token, + OrderId = serviceOrderId, + ServiceId = serviceId, + Platform = Enums.Platform.京东, + VenderId = shop.VenderId + }, GetYunDingRequestHeader(), HttpMethod.Post); + + if (serviceOrderDetailResult.StatusCode != System.Net.HttpStatusCode.OK) + throw new Exception($"获取服务单详情失败 {serviceOrderDetailResult.Content}"); + var serviceOrderDetailResponse = JsonConvert.DeserializeObject>(serviceOrderDetailResult.Content); + if (!serviceOrderDetailResponse.Success) + throw new Exception($"获取服务单详情失败 {serviceOrderDetailResponse.Msg}"); + + //检查退货城市是否为泉州 + isNeedSubscribeKuaiDi100 = serviceOrderDetailResponse.Data["returnWareAddress"].Value("cityCode") == 2812; + } + catch { } + } + } + #endregion + + dbServiceOrder = new ServiceOrder() + { + Id = idGenerator.NewLong(), + ServiceId = serviceId, + OrderId = serviceOrderId, + ShopId = shop.ShopId, + ProductId = dbOsku.ProductId, + SkuItemCount = dbOsku.ItemTotal, + Status = status, + CreateTime = DateTime.Now, + SkuId = skuId, + StatusUpdateTime = serviceOrderJToken.Value("updateTime"), + IsSubscribeKuaiDi100 = false, + IsNeedSubscribeKuaiDi100 = isNeedSubscribeKuaiDi100, + WaybillNo = string.Empty, + ExpressName = string.Empty, + ApplyTime = serviceOrderJToken.Value("applyTime") + }; + } + } } private void SyncServiceOrder(ShopResponse shop, string orderId, DateTime? startTime = null, DateTime? endTime = null, bool isAuto = false) @@ -63,7 +148,7 @@ namespace BBWY.Server.Business.Sync var shopId = long.Parse(shop.ShopId); var relayAPIHost = GetPlatformRelayAPIHost(shop.PlatformId); var serviceStatusList = new List() { 10005, 10011, 10010 }; - #region + var request = new QueryServiceOrderRequest() { UpdateTimeBegin = startTime ?? DateTime.Now.Date.AddHours(-1), @@ -91,69 +176,8 @@ namespace BBWY.Server.Business.Sync throw new Exception($"获取服务单失败 {serviceOrderListResponse.Msg}"); jtokenList.AddRange(serviceOrderListResponse.Data); } - #endregion - - var serviceIdList = jtokenList.Select(j => j.Value("serviceId")).ToList(); - var dbServiceOrderList = fsql.Select().Where(s => s.ShopId == shop.ShopId && serviceIdList.Contains(s.ServiceId)).ToList(); - var dbServiceIdList = dbServiceOrderList.Select(s => s.ServiceId).ToList(); - var exceptServiceIdList = serviceIdList.Except(dbServiceIdList); - - 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)) - .ToList((osku, o) => new - { - Id = osku.Id, - ProductId = osku.ProductId, - SkuId = osku.SkuId, - OrderId = osku.OrderId, - ItemTotal = osku.ItemTotal, - StorageType = o.StorageType - }); - - foreach (var serviceOrderJToken in jtokenList) - { - var serviceId = serviceOrderJToken.Value("serviceId"); - var dbServiceOrder = dbServiceOrderList.FirstOrDefault(s => s.ServiceId == serviceId); - if (dbServiceOrder == null) - { - var serviceOrderId = serviceOrderJToken.Value("orderId"); - var skuId = serviceOrderJToken.Value("skuId"); - var dbOsku = dbOrderSkuList.FirstOrDefault(osku => osku.OrderId == serviceOrderId && osku.SkuId == skuId); - if (dbOsku == null) - continue; - var isNeedSubscribeKuaiDi100 = false; - - if (dbOsku.StorageType == Enums.StorageType.代发) - isNeedSubscribeKuaiDi100 = true; - else - { - //检查退货城市是否为泉州 - - } - - dbServiceOrder = new ServiceOrder() - { - Id = idGenerator.NewLong(), - ServiceId = serviceId, - OrderId = serviceOrderId, - ShopId = shop.ShopId, - ProductId = dbOsku.ProductId, - SkuItemCount = dbOsku.ItemTotal, - Status = serviceOrderJToken.Value("sserviceOrderJToken"), - CreateTime = DateTime.Now, - SkuId = skuId, - StatusUpdateTime = serviceOrderJToken.Value("updateTime"), - IsSubscribeKuaiDi100 = false, - IsNeedSubscribeKuaiDi100 = isNeedSubscribeKuaiDi100, - WaybillNo = string.Empty, - ExpressName = string.Empty, - ApplyTime = serviceOrderJToken.Value("applyTime") - }; - } - } - //SyncServiceOrder(shop, serviceOrderListResponse.Data); + SyncServiceOrder(shop, shopId, jtokenList, relayAPIHost, request.AppKey, request.AppSecret, request.AppToken); } catch (Exception ex) {