using BBWY.Common.Http; using BBWY.Common.Models; using BBWY.Server.Model; using BBWY.Server.Model.Dto; using Microsoft.Extensions.Options; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; using Yitter.IdGenerator; using System.Linq; using BBWY.Server.Model.Db; namespace BBWY.Server.Business.Sync { public class JDServiceOrderSyncBusiness : BaseSyncBusiness, IDenpendency { 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) { } public void SyncAllShopServiceOrder() { var shopList = venderBusiness.GetShopList(platform: Enums.Platform.京东); //SyncAfterOrder(shopList.FirstOrDefault(s => s.ShopName == "布莱特玩具专营店"), string.Empty, isAuto: true); foreach (var shop in shopList) { Task.Factory.StartNew(() => SyncServiceOrder(shop, string.Empty, isAuto: true), System.Threading.CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncAfterOrderTaskScheduler); } } private void SyncServiceOrder(ShopResponse shop, JArray jArray) { } private void SyncServiceOrder(ShopResponse shop, string orderId, DateTime? startTime = null, DateTime? endTime = null, bool isAuto = false) { /* 审核阶段: 待审核: 10001 待用户反馈: 10002 用户已反馈: 10012 【待收货: 10005】 【取消: 10011】 审核关闭: 10004 待用户确认: 10009 【完成: 10010】 处理阶段: 已收货,待处理 : 10007 原返取消,待处理:7060 换新取消,待处理:7023 线下换新取消,待处理:7090 商家催收: 13000 */ try { 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), UpdateTimeEnd = endTime ?? DateTime.Now, AppKey = shop.AppKey, AppSecret = shop.AppSecret, AppToken = shop.AppToken, PageIndex = 1, PageSize = 50, Platform = shop.PlatformId, SaveResponseLog = true, OrderId = orderId, VenderId = shop.VenderId }; List jtokenList = new List(); foreach (var serviceStatus in serviceStatusList) { request.ServiceStatus = serviceStatus; var serviceOrderListApiResult = restApiService.SendRequest(relayAPIHost, "api/PlatformSDK/GetServiceOrderList", request, GetYunDingRequestHeader(), HttpMethod.Post); if (serviceOrderListApiResult.StatusCode != System.Net.HttpStatusCode.OK) throw new Exception($"获取服务单失败 {serviceOrderListApiResult.Content}"); var serviceOrderListResponse = JsonConvert.DeserializeObject>(serviceOrderListApiResult.Content); if (!serviceOrderListResponse.Success) 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); } catch (Exception ex) { var shopData = JsonConvert.SerializeObject(shop); nLogManager.Default().Error(ex, $"SyncServiceOrder ShopData:{shopData}"); } } } }