using BBWY.Common.Models; using System.Collections.Generic; using Yitter.IdGenerator; namespace BBWY.Server.Business { public class AfterSaleOrderSyncBusiness : BaseSyncBusiness, IDenpendency { //private IDictionary> syncAfterSaleOrderMethodDic; //private IDictionary processResultDic; //public AfterSaleOrderSyncBusiness(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) //{ // syncAfterSaleOrderMethodDic = new Dictionary>() // { // { Enums.Platform.京东, SyncJDAfterOrder } // }; // processResultDic = new Dictionary() // { // { 23,Enums.ServiceResult.换新}, // { 40,Enums.ServiceResult.退货}, // { 60,Enums.ServiceResult.原返}, // { 90,Enums.ServiceResult.线下换新}, // { 110,Enums.ServiceResult.商品补发} // }; //} //private void SyncJDAfterOrder(JArray afterOrderTokenJArray, ShopResponse shop) //{ // var shopId = long.Parse(shop.ShopId); // var validAfterOrderJArray = afterOrderTokenJArray.Where(j => (j.Value("serviceStatus") == 10010 || j.Value("serviceStatus") == 10009) && //完成 // processResultDic.ContainsKey(j.Value("processResult"))); // var orderIds = validAfterOrderJArray.Select(j => j["orderId"].ToString()).Distinct().ToList(); // var orderSkuIds = validAfterOrderJArray.Select(j => j["skuId"].ToString()).Distinct().ToList(); // var updateOrders = fsql.Select().Where(o => orderIds.Contains(o.Id) && o.IsAfterSaleOrder == false).ToList(); // var dbOrderSkus = fsql.Select().Where(osku => orderIds.Contains(osku.OrderId) && // orderSkuIds.Contains(osku.SkuId) && // osku.Price != 0).ToList(); // var updateOrderSkus = dbOrderSkus.Where(osku => osku.IsRefund == false).ToList(); // var afterOrders = fsql.Select().Where(aso => orderIds.Contains(aso.OrderId)).ToList(); // List insertAfterSaleOrders = new List(); // List> updateAfterSaleOrders = new List>(); // foreach (var afterOrderJToken in validAfterOrderJArray) // { // var orderId = afterOrderJToken.Value("orderId"); // var skuId = afterOrderJToken.Value("skuId"); // var serviceId = afterOrderJToken.Value("serviceId"); // var processResult = processResultDic[afterOrderJToken.Value("processResult")]; // var afterOrder = afterOrders.FirstOrDefault(aso => aso.ServiceId == serviceId); // if (afterOrder == null) // { // var dbOrderSku = dbOrderSkus.FirstOrDefault(osku => osku.OrderId == orderId && osku.SkuId == skuId); // if (dbOrderSku == null) // continue; // decimal refundAmount = 0M; // try // { // if (processResult == Enums.ServiceResult.退货) // refundAmount = SyncJDRefundOrder(shop, orderId, serviceId); // } // catch (Exception ex) // { // nLogManager.Default().Error(ex, $"SyncAfterOrder-SyncRefound ServiceId:{serviceId} OrderId:{orderId} ShopData:{JsonConvert.SerializeObject(shop)}"); // } // insertAfterSaleOrders.Add(new AfterSaleOrder() // { // Id = idGenerator.NewLong(), // CreateTime = DateTime.Now, // OrderId = dbOrderSku.OrderId, // ProductId = dbOrderSku.ProductId, // RefundAmount = refundAmount, // SkuId = skuId, // ShopId = shopId, // ServiceResult = processResult, // ServiceId = serviceId, // ApplyTime = afterOrderJToken.Value("applyTime").StampToDateTime() // }); // } // else // { // if (afterOrder.ServiceResult == null || // (afterOrder.ServiceResult != processResult && // afterOrder.ServiceResult != Enums.ServiceResult.维修 && // afterOrder.ServiceResult != Enums.ServiceResult.仅退款 && // afterOrder.ServiceResult != Enums.ServiceResult.SD退货)) // { // var update = fsql.Update(afterOrder.Id).Set(aso => aso.ServiceResult, processResult); // updateAfterSaleOrders.Add(update); // } // } // } // fsql.Transaction(() => // { // if (updateOrders.Count() > 0) // foreach (var updateOrder in updateOrders) // fsql.Update(updateOrder.Id).Set(o => o.IsAfterSaleOrder, true).ExecuteAffrows(); // if (updateOrderSkus.Count() > 0) // foreach (var updateOrderSku in updateOrderSkus) // fsql.Update(updateOrderSku.Id).Set(osku => osku.IsRefund, true).ExecuteAffrows(); // if (insertAfterSaleOrders.Count() > 0) // fsql.Insert(insertAfterSaleOrders).ExecuteAffrows(); // if (updateAfterSaleOrders.Count() > 0) // foreach (var update in updateAfterSaleOrders) // update.ExecuteAffrows(); // }); //} //private void SyncAfterOrder(ShopResponse shop, string orderId, DateTime? startTime = null, DateTime? endTime = null, bool isAuto = false) //{ // try // { // //logger.Info($"售后订单同步 {shop.ShopName} isAuto {isAuto}"); // if (!syncAfterSaleOrderMethodDic.ContainsKey(shop.PlatformId)) // throw new Exception("不支持的平台"); // var shopId = long.Parse(shop.ShopId); // var relayAPIHost = GetPlatformRelayAPIHost(shop.PlatformId); // var afterOrderListApiResult = restApiService.SendRequest(relayAPIHost, "api/PlatformSDK/GetAfterOrderList", new SyncAfterOrderRequest() // { // StartDate = startTime ?? DateTime.Now.Date.AddDays(-3), // EndDate = 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 // }, GetYunDingRequestHeader(), HttpMethod.Post); // if (afterOrderListApiResult.StatusCode != System.Net.HttpStatusCode.OK) // throw new Exception($"获取退款订单失败 {afterOrderListApiResult.Content}"); // var afterOrderListResponse = JsonConvert.DeserializeObject>(afterOrderListApiResult.Content); // if (!afterOrderListResponse.Success) // throw new Exception($"获取退款订单失败 {afterOrderListApiResult.Content}"); // if (afterOrderListResponse.Data == null || afterOrderListResponse.Data.Count == 0) // return; // syncAfterSaleOrderMethodDic[shop.PlatformId](afterOrderListResponse.Data, shop); // } // catch (Exception ex) // { // var shopData = JsonConvert.SerializeObject(shop); // nLogManager.Default().Error(ex, $"SyncAfterOrder ShopData:{shopData}"); // } //} //public void SyncAllShopAfterOrder() //{ // 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(() => SyncAfterOrder(shop, string.Empty, isAuto: true), // System.Threading.CancellationToken.None, // TaskCreationOptions.LongRunning, // taskSchedulerManager.SyncAfterOrderTaskScheduler); // } //} ///// ///// 获取退款单 ///// ///// ///// ///// ///// ///// //private decimal SyncJDRefundOrder(ShopResponse shop, string orderId, string serviceId) //{ // var relayAPIHost = GetPlatformRelayAPIHost(shop.PlatformId); // var refundOrderListApiResult = restApiService.SendRequest(relayAPIHost, "api/PlatformSDK/GetRefundList", new SearchRefundPlatformOrderRequest() // { // AppKey = shop.AppKey, // AppSecret = shop.AppSecret, // AppToken = shop.AppToken, // PageIndex = 1, // PageSize = 50, // Platform = shop.PlatformId, // SaveResponseLog = false, // OrderId = orderId // }, GetYunDingRequestHeader(), HttpMethod.Post); // if (refundOrderListApiResult.StatusCode != System.Net.HttpStatusCode.OK) // throw new Exception($"获取退款订单失败 {refundOrderListApiResult.Content}"); // var refundOrderListResponse = JsonConvert.DeserializeObject>(refundOrderListApiResult.Content); // if (!refundOrderListResponse.Success) // throw new Exception($"获取退款订单失败 {refundOrderListApiResult.Content}"); // if (refundOrderListResponse.Data == null || refundOrderListResponse.Data.Count == 0) // return 0M; // var jtoken = refundOrderListResponse.Data.FirstOrDefault(j => j["sameOrderServiceBill"]["serviceId"].ToString() == serviceId && // j.Value("status") == 13 && // j.Value("refoundAmount") != 0M); // return jtoken == null ? 0M : jtoken.Value("refoundAmount"); //} public AfterSaleOrderSyncBusiness(NLogManager nLogManager, IFreeSql fsql, IIdGenerator idGenerator, TaskSchedulerManager taskSchedulerManager, IEnumerable platformSDKBusinessList, VenderBusiness venderBusiness) : base(nLogManager, fsql, idGenerator, taskSchedulerManager, platformSDKBusinessList, venderBusiness) { } } }