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();
}