From ef3861399bf2ba32af4b1e949430e9cbbbc81bd4 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 15 Aug 2022 06:07:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWY.Client/Views/Order/OrderList.xaml | 24 +- .../Controllers/RefundOrderSyncController.cs | 26 -- .../Sync/AfterSaleOrderSyncBusiness.cs | 61 +++- .../Sync/RefundOrderSyncBusiness.cs | 290 +++++++++--------- BBWY.Test/Program.cs | 28 +- 5 files changed, 231 insertions(+), 198 deletions(-) delete mode 100644 BBWY.Server.API/Controllers/RefundOrderSyncController.cs diff --git a/BBWY.Client/Views/Order/OrderList.xaml b/BBWY.Client/Views/Order/OrderList.xaml index fc51f57c..45bab604 100644 --- a/BBWY.Client/Views/Order/OrderList.xaml +++ b/BBWY.Client/Views/Order/OrderList.xaml @@ -319,15 +319,13 @@ - - - - - + + + @@ -1010,7 +1008,6 @@ - @@ -1050,7 +1047,7 @@ - + @@ -1058,7 +1055,20 @@ + + + + + + + + + + + + + diff --git a/BBWY.Server.API/Controllers/RefundOrderSyncController.cs b/BBWY.Server.API/Controllers/RefundOrderSyncController.cs deleted file mode 100644 index 432bbca9..00000000 --- a/BBWY.Server.API/Controllers/RefundOrderSyncController.cs +++ /dev/null @@ -1,26 +0,0 @@ -using BBWY.Server.Business; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; - -namespace BBWY.Server.API.Controllers -{ - - public class RefundOrderSyncController : BaseApiController - { - private RefundOrderSyncBusiness refundOrderSyncBusiness; - - public RefundOrderSyncController(RefundOrderSyncBusiness refundOrderSyncBusiness, IHttpContextAccessor httpContextAccessor) : base(httpContextAccessor) - { - this.refundOrderSyncBusiness = refundOrderSyncBusiness; - } - - /// - /// 全店同步退款订单 - /// - [HttpPost] - public void SyncAllShopRefundOrder() - { - refundOrderSyncBusiness.SyncAllShopRefundOrder(); - } - } -} diff --git a/BBWY.Server.Business/Sync/AfterSaleOrderSyncBusiness.cs b/BBWY.Server.Business/Sync/AfterSaleOrderSyncBusiness.cs index e73767ad..11a8458c 100644 --- a/BBWY.Server.Business/Sync/AfterSaleOrderSyncBusiness.cs +++ b/BBWY.Server.Business/Sync/AfterSaleOrderSyncBusiness.cs @@ -54,10 +54,10 @@ namespace BBWY.Server.Business }; } - private void SyncJDAfterOrder(JArray afterOrderTokenJArray, ShopResponse shopResponse) + private void SyncJDAfterOrder(JArray afterOrderTokenJArray, ShopResponse shop) { - var shopId = long.Parse(shopResponse.ShopId); - var validAfterOrderJArray = afterOrderTokenJArray.Where(j => j.Value("serviceStatus") != 10011 && //取消 + var shopId = long.Parse(shop.ShopId); + var validAfterOrderJArray = afterOrderTokenJArray.Where(j => j.Value("serviceStatus") == 10010 && //完成 processResultDic.ContainsKey(j.Value("processResult"))); @@ -87,13 +87,25 @@ namespace BBWY.Server.Business if (dbOrderSku == null) continue; + decimal refundAmount = 0M; + try + { + if (processResult == Enums.ServiceResult.退货) + refundAmount = SyncJDRefundOrder(shop, orderId, serviceId); + } + catch (Exception ex) + { + logger.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 = 0, + RefundAmount = refundAmount, SkuId = skuId, ShopId = shopId, ServiceResult = processResult, @@ -132,7 +144,6 @@ namespace BBWY.Server.Business }); } - private void SyncAfterOrder(ShopResponse shop, string orderId, DateTime? startTime = null, DateTime? endTime = null, bool isAuto = false) { try @@ -144,7 +155,7 @@ namespace BBWY.Server.Business var relayAPIHost = GetPlatformRelayAPIHost(shop.PlatformId); var afterOrderListApiResult = restApiService.SendRequest(relayAPIHost, "api/PlatformSDK/GetAfterOrderList", new SyncAfterOrderRequest() { - StartDate = startTime ?? DateTime.Now.Date.AddDays(-1), + StartDate = startTime ?? DateTime.Now.Date.AddDays(-5), EndDate = endTime ?? DateTime.Now, AppKey = shop.AppKey, AppSecret = shop.AppSecret, @@ -187,5 +198,43 @@ namespace BBWY.Server.Business 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 + }, 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 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"); + } } } diff --git a/BBWY.Server.Business/Sync/RefundOrderSyncBusiness.cs b/BBWY.Server.Business/Sync/RefundOrderSyncBusiness.cs index 31a7d260..a5041e0c 100644 --- a/BBWY.Server.Business/Sync/RefundOrderSyncBusiness.cs +++ b/BBWY.Server.Business/Sync/RefundOrderSyncBusiness.cs @@ -18,149 +18,149 @@ using Yitter.IdGenerator; namespace BBWY.Server.Business { - public class RefundOrderSyncBusiness : BaseSyncBusiness, IDenpendency - { - private IDictionary> syncRefundOrderMethodDic; - - public RefundOrderSyncBusiness(RestApiService restApiService, - IOptions options, - ILogger logger, - IFreeSql fsql, - IIdGenerator idGenerator, - TaskSchedulerManager taskSchedulerManager, - VenderBusiness venderBusiness) : base(restApiService, - options, - logger, - 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(-1), - 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); - } - } - } + //public class RefundOrderSyncBusiness : BaseSyncBusiness, IDenpendency + //{ + // private IDictionary> syncRefundOrderMethodDic; + + // public RefundOrderSyncBusiness(RestApiService restApiService, + // IOptions options, + // ILogger logger, + // IFreeSql fsql, + // IIdGenerator idGenerator, + // TaskSchedulerManager taskSchedulerManager, + // VenderBusiness venderBusiness) : base(restApiService, + // options, + // logger, + // 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); + // //} + // } + //} } diff --git a/BBWY.Test/Program.cs b/BBWY.Test/Program.cs index 408a133e..968ccf05 100644 --- a/BBWY.Test/Program.cs +++ b/BBWY.Test/Program.cs @@ -21,26 +21,26 @@ namespace BBWY.Test var token = "2ace3023200c4ea9aa682bbf8bffee18jztm"; var jdClient = GetJdClient(appKey, appSecret); - //var req = new AscQueryListRequest(); - //req.buId = "10598776"; - //req.operatePin = "开发测试"; - //req.operateNick = "开发测试"; - //req.pageNumber = "1"; - //req.pageSize = "50"; - //req.serviceId = 1472302469; - //AscQueryListResponse response1 = jdClient.Execute(req, token, DateTime.Now.ToLocalTime()); + var req = new AscQueryListRequest(); + req.buId = "10598776"; + req.operatePin = "开发测试"; + req.operateNick = "开发测试"; + req.pageNumber = "1"; + req.pageSize = "50"; + req.serviceId = 1469772993; + AscQueryListResponse response1 = jdClient.Execute(req, token, DateTime.Now.ToLocalTime()); - //Console.WriteLine(JsonConvert.SerializeObject(response1)); + Console.WriteLine(JsonConvert.SerializeObject(response1)); //250134673037 - AscServiceAndRefundViewRequest req = new AscServiceAndRefundViewRequest(); + AscServiceAndRefundViewRequest req1 = new AscServiceAndRefundViewRequest(); - req.orderId = 250134673037; - req.pageNumber = 1.ToString(); - req.pageSize = 10.ToString(); + req1.orderId = 246319928886; + req1.pageNumber = 1.ToString(); + req1.pageSize = 10.ToString(); - var response = jdClient.Execute(req, token, DateTime.Now.ToLocalTime()); + var response = jdClient.Execute(req1, token, DateTime.Now.ToLocalTime()); Console.WriteLine(JsonConvert.SerializeObject(response)); Console.ReadKey(); }