using BBWY.Common.Extensions; using BBWY.Common.Http; using BBWY.Common.Models; using BBWY.Server.Model; using BBWY.Server.Model.Db; using BBWY.Server.Model.Dto; using FreeSql; using Microsoft.Extensions.Options; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using NLog; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Threading.Tasks; using Yitter.IdGenerator; namespace BBWY.Server.Business { //public class RefundOrderSyncBusiness : BaseSyncBusiness, IDenpendency //{ // private IDictionary> syncRefundOrderMethodDic; // public RefundOrderSyncBusiness(RestApiService restApiService, // IOptions options, // NLogManager nLogManager, // IFreeSql fsql, // IIdGenerator idGenerator, // TaskSchedulerManager taskSchedulerManager, // VenderBusiness venderBusiness) : base(restApiService, // options, // nLogManager, // fsql, // idGenerator, // taskSchedulerManager, // venderBusiness) // { // syncRefundOrderMethodDic = new Dictionary>() // { // { Enums.Platform.京东, SyncJDRefundOrder} // }; // } // private void SyncJDRefundOrder(JArray refundOrderTokenJArray, ShopResponse shopResponse) // { // var shopId = long.Parse(shopResponse.ShopId); // var validRefundOrderTokenJArray = refundOrderTokenJArray.Where(j => j.Value("status") == 13 && j.Value("refoundAmount") != 0M).ToList(); // var orderIds = validRefundOrderTokenJArray.Select(j => j["sameOrderServiceBill"]["orderId"].ToString()).Distinct().ToList(); // var orderSkuIds = validRefundOrderTokenJArray.Select(j => j["sameOrderServiceBill"]["wareId"].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)).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 refundOrderJToken in validRefundOrderTokenJArray) // { // var skuId = refundOrderJToken["sameOrderServiceBill"]["wareId"].ToString(); // var orderId = refundOrderJToken["sameOrderServiceBill"]["orderId"].ToString(); // var refundAmount = refundOrderJToken.Value("refoundAmount"); // var refundCompleteTime = refundOrderJToken.Value("completeTime").StampToDateTime(); // var serviceId = refundOrderJToken["sameOrderServiceBill"]["serviceId"].ToString(); // var afterOrder = afterOrders.FirstOrDefault(aso => aso.ServiceId == serviceId); // if (afterOrder == null) // { // var dbSku = dbOrderSkus.FirstOrDefault(osku => osku.OrderId == orderId && osku.SkuId == skuId); // if (dbSku == null) // continue; // insertAfterSaleOrders.Add(new AfterSaleOrder() // { // Id = idGenerator.NewLong(), // CreateTime = DateTime.Now, // OrderId = dbSku.OrderId, // ProductId = dbSku.ProductId, // RefundAmount = refundAmount, // RefundTime = refundCompleteTime, // SkuId = skuId, // ShopId = shopId, // ServiceId = serviceId, // ApplyTime = long.Parse(refundOrderJToken["sameOrderServiceBill"]["afsApplyTime"].ToString()).StampToDateTime() // }); // } // else if (afterOrder.RefundAmount == 0) // { // var update = fsql.Update(afterOrder.Id).Set(aso => aso.RefundAmount, refundAmount) // .Set(aso => aso.RefundTime, refundCompleteTime); // 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 SyncRefundOrder(ShopResponse shop, string orderId, DateTime? startTime = null, DateTime? endTime = null, bool isAuto = false) // { // try // { // //logger.Info($"退款订单同步 {shop.ShopName} isAuto {isAuto}"); // if (!syncRefundOrderMethodDic.ContainsKey(shop.PlatformId)) // throw new Exception("不支持的平台"); // var shopId = long.Parse(shop.ShopId); // var relayAPIHost = GetPlatformRelayAPIHost(shop.PlatformId); // var refundOrderListApiResult = restApiService.SendRequest(relayAPIHost, "api/PlatformSDK/GetRefundList", new SearchRefundPlatformOrderRequest() // { // StartDate = startTime ?? DateTime.Now.Date.AddDays(-5), // EndDate = endTime ?? DateTime.Now, // AppKey = shop.AppKey, // AppSecret = shop.AppSecret, // AppToken = shop.AppToken, // PageIndex = 1, // PageSize = 50, // Platform = shop.PlatformId, // SaveResponseLog = true, // OrderId = orderId // }, null, 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; // syncRefundOrderMethodDic[shop.PlatformId](refundOrderListResponse.Data, shop); // } // catch (Exception ex) // { // var shopData = JsonConvert.SerializeObject(shop); // logger.Error(ex, $"SyncRefundOrder ShopData:{shopData}"); // } // } // public void SyncAllShopRefundOrder() // { // var shopList = venderBusiness.GetShopList(); // SyncRefundOrder(shopList.FirstOrDefault(s => s.ShopName == "布莱特玩具专营店"), string.Empty, isAuto: true); // //foreach (var shop in shopList) // //{ // // Task.Factory.StartNew(() => SyncRefundOrder(shop, string.Empty, isAuto: true), System.Threading.CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncRefundOrderTaskScheduler); // //} // } //} }