From adde7e6fca1c7c4c8708729301014128d2c7aff3 Mon Sep 17 00:00:00 2001 From: wule Date: Sat, 27 Jun 2026 00:11:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B9=B0=E6=89=8B=E5=8D=95?= =?UTF-8?q?=E5=8F=B7=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 29WxOrder.sln | 20 +- 29WxOrder/29WxOrder.csproj | 4 +- 29WxOrderWpf/29WxOrderWpf.csproj | 20 + .../ImageUrlToBitmapImageConverter.cs | 51 +- .../BuyerCtrls/PDDBuyerOrderReadCtrl.xaml | 195 +- .../BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs | 1534 ++++++- .../Ctrls/OrderCtrls/OrderListCtrl.xaml | 93 +- .../Ctrls/OrderCtrls/OrderListCtrl.xaml.cs | 26 +- .../Ctrls/OrderCtrls/OrderListRowCtrl.xaml | 2 +- .../OrderCtrls/OrderListRowItemCtrl.xaml.cs | 25 +- 29WxOrderWpf/MainWindow.xaml | 4 +- 29WxOrderWpf/MainWindow.xaml.cs | 2 + AllBase/29WxOrderAllBase.csproj | 27 +- AllBase/BaseClass.cs | 43 +- AllBase/BaseRegex.cs | 139 + .../Local/oms_wei_external_procurement_log.cs | 20 + AllBase/Model/Result/PddBuyerOrderLiteInfo.cs | 181 +- Work/29WxOrderWork.csproj | 19 + Work/Initialization.cs | 75 +- Work/_29Tools/Forms/PddMobileBuyOrderForm.cs | 169 +- .../Forms/PddMobileBuyOrderForm.designer.cs | 347 +- .../_29Tools/Forms/PddMobileBuyOrderForm.resx | 3969 ++++++++++++++++- 22 files changed, 6451 insertions(+), 514 deletions(-) diff --git a/29WxOrder.sln b/29WxOrder.sln index 315abbd..90f4485 100644 --- a/29WxOrder.sln +++ b/29WxOrder.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.36128.20 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36221.1 d17.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "29WxOrderAllBase", "AllBase\29WxOrderAllBase.csproj", "{6461D807-B1C8-45F0-B388-E0CA1A418DE0}" EndProject @@ -31,8 +31,8 @@ Global {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|Any CPU.Build.0 = Debug|Any CPU {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|x64.ActiveCfg = Debug|x86 - {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|x64.Build.0 = Debug|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|x64.ActiveCfg = Debug|x64 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|x64.Build.0 = Debug|x64 {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|x86.ActiveCfg = Debug|Any CPU {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|x86.Build.0 = Debug|Any CPU {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Release|Any CPU.ActiveCfg = Release|x86 @@ -47,8 +47,8 @@ Global {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Debug|Any CPU.Build.0 = Debug|Any CPU {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Debug|x64.ActiveCfg = Debug|x86 - {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Debug|x64.Build.0 = Debug|x86 + {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Debug|x64.ActiveCfg = Debug|x64 + {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Debug|x64.Build.0 = Debug|x64 {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Debug|x86.ActiveCfg = Debug|x86 {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Debug|x86.Build.0 = Debug|x86 {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Release|Any CPU.ActiveCfg = Release|x86 @@ -63,8 +63,8 @@ Global {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|Any CPU.Build.0 = Debug|Any CPU {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|x64.ActiveCfg = Debug|Any CPU - {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|x64.Build.0 = Debug|Any CPU + {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|x64.ActiveCfg = Debug|x64 + {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|x64.Build.0 = Debug|x64 {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|x86.ActiveCfg = Debug|x86 {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|x86.Build.0 = Debug|x86 {1AD45D66-6872-4522-ACF0-04E2C0514048}.Release|Any CPU.ActiveCfg = Release|x86 @@ -79,8 +79,8 @@ Global {D7884375-E42F-4B89-AA3A-D8E75508D8C7}.Debug|Any CPU.Build.0 = Debug|Any CPU {D7884375-E42F-4B89-AA3A-D8E75508D8C7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {D7884375-E42F-4B89-AA3A-D8E75508D8C7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {D7884375-E42F-4B89-AA3A-D8E75508D8C7}.Debug|x64.ActiveCfg = Debug|Any CPU - {D7884375-E42F-4B89-AA3A-D8E75508D8C7}.Debug|x64.Build.0 = Debug|Any CPU + {D7884375-E42F-4B89-AA3A-D8E75508D8C7}.Debug|x64.ActiveCfg = Debug|x64 + {D7884375-E42F-4B89-AA3A-D8E75508D8C7}.Debug|x64.Build.0 = Debug|x64 {D7884375-E42F-4B89-AA3A-D8E75508D8C7}.Debug|x86.ActiveCfg = Debug|Any CPU {D7884375-E42F-4B89-AA3A-D8E75508D8C7}.Debug|x86.Build.0 = Debug|Any CPU {D7884375-E42F-4B89-AA3A-D8E75508D8C7}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/29WxOrder/29WxOrder.csproj b/29WxOrder/29WxOrder.csproj index 75fc514..1508e40 100644 --- a/29WxOrder/29WxOrder.csproj +++ b/29WxOrder/29WxOrder.csproj @@ -42,7 +42,7 @@ true - bin\x64\Debug\ + ..\bin\ DEBUG;TRACE full x64 @@ -63,7 +63,7 @@ true - ..\..\KJD Cef138\Bin\ + ..\Bin\ DEBUG;TRACE full x64 diff --git a/29WxOrderWpf/29WxOrderWpf.csproj b/29WxOrderWpf/29WxOrderWpf.csproj index 3d47928..21b1990 100644 --- a/29WxOrderWpf/29WxOrderWpf.csproj +++ b/29WxOrderWpf/29WxOrderWpf.csproj @@ -57,6 +57,26 @@ 29wx.ico + + true + ..\bin\ + DEBUG;TRACE + full + x64 + 7.3 + prompt + true + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + 7.3 + prompt + true + ..\packages\CefSharp.Common.138.0.340\lib\net462\CefSharp.dll diff --git a/29WxOrderWpf/Converters/ImageUrlToBitmapImageConverter.cs b/29WxOrderWpf/Converters/ImageUrlToBitmapImageConverter.cs index 7e9282b..dec9bef 100644 --- a/29WxOrderWpf/Converters/ImageUrlToBitmapImageConverter.cs +++ b/29WxOrderWpf/Converters/ImageUrlToBitmapImageConverter.cs @@ -1,11 +1,14 @@ using System; using System.Collections.Generic; using System.Globalization; +using System.IO; using System.Linq; +using System.Net; using System.Text; using System.Threading.Tasks; using System.Windows.Data; using System.Windows.Media.Imaging; +using Work; namespace _29WxOrderWpf.Converters { @@ -15,7 +18,20 @@ namespace _29WxOrderWpf.Converters { if (value is string url && Uri.IsWellFormedUriString(url, UriKind.Absolute)) { - return new BitmapImage(new Uri(url)); + try + { + // 直接加载绑定如果遇到有问题的网络图片会直接崩溃。 + //var bitMap = new BitmapImage(new Uri(url)); + var bitMap = LoadImageFromUrl(url); + return bitMap; + //string errStr = ""; + //var bitmapImg = GetUrlImg(url, out errStr); + //return bitmapImg; + } + catch + { + + } //return Task.Run(() => new BitmapImage(new Uri(url))); // 使用 Task.Run 来异步加载图片。 } return null; @@ -25,5 +41,38 @@ namespace _29WxOrderWpf.Converters { throw new NotImplementedException(); // 不需要反向转换,所以不实现。 } + + + public BitmapImage LoadImageFromUrl(string url) + { + BitmapImage bitmap = new BitmapImage(); + + try + { + using (WebClient webClient = new WebClient()) + { + // 下载图片数据到内存流 + using (MemoryStream stream = new MemoryStream(webClient.DownloadData(url))) + { + stream.Position = 0; // 重置流的位置到开始处 + bitmap.BeginInit(); + bitmap.CreateOptions = BitmapCreateOptions.PreservePixelFormat; + bitmap.CacheOption = BitmapCacheOption.OnLoad; // 或者使用 BitmapCacheOption.OnLoad 以减少内存使用 + bitmap.UriSource = null; // 清除可能的旧UriSource,防止缓存问题 + bitmap.StreamSource = stream; + bitmap.EndInit(); + bitmap.Freeze(); // 防止后续更改,提高性能 + } + } + } + catch (Exception ex) + { + // 处理异常,例如打印错误信息或设置一个默认图片等 + //Console.WriteLine("Error loading image: " + ex.Message); + return null; + } + + return bitmap; + } } } diff --git a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml index bf459a8..fa9b51f 100644 --- a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml +++ b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml @@ -6,49 +6,158 @@ xmlns:local="clr-namespace:_29WxOrderWpf.Ctrls.BuyerCtrls" mc:Ignorable="d" Loaded="UserControl_Loaded" d:DesignHeight="450" d:DesignWidth="1000"> - - - - - - - - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs index 1039034..7c35033 100644 --- a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs +++ b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs @@ -1,16 +1,24 @@ -using _29WxOrderWpf.CefHelper; +using _29WxOrderWpf.BaseWindows; +using _29WxOrderWpf.CefHelper; using AllBase; +using AllBase.Helper; using AllBase.Model; +using AllBase.Model.Local; using AllBase.Model.Result; using CefSharp; +using CefSharp.DevTools.LayerTree; using CefSharp.Handler; using CefSharp.Wpf; using NaiBa.Util; +using NaiBa.Util.Extension; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; +using System.Reflection; using System.Text; +using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; @@ -21,6 +29,10 @@ using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; +using System.Xml.XPath; +using TemuKJD.ToolForms; +using Work; +using Work._29Tools.BLL; using Work._29Tools.CefTools; namespace _29WxOrderWpf.Ctrls.BuyerCtrls @@ -31,74 +43,266 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls public partial class PDDBuyerOrderReadCtrl : UserControl { ChromiumWebBrowser cefWebBrowser = null; - public bool AutoReadBuyerOrder = true; - ConcurrentList lstPddBuyerOrderInfoLite { get; set; } = new ConcurrentList(); + public ObservableCollection lstPddBuyerOrderInfoLite { get; set; } = new ObservableCollection(); + public ObservableCollection lstFilterPddBuyerOrderInfoLite { get; set; } = new ObservableCollection(); + ConcurrentList lstPddBuyerAfterSaleInfoLite { get; set; } = new ConcurrentList(); + public CancellationTokenSource cancellationTokenSource { get; set; } = new CancellationTokenSource(); + //public ChromiumWebBrowser cefWebBrowser = null; + public BuyerOrderConfig buyerOrderConfig = new BuyerOrderConfig(); + public DateTime nextGetOrderTime = DateTime.MinValue; + public DateTime lastCefReadOrderTime = DateTime.Now; + public bool IsAutoReadBuyerOrder = true; + bool isReadBuyerOrder = false; + bool isInitBuyerOrder = false; + bool isInitBuyerAfterSale = false; + string currentReadBuyer = ""; + bool isLoad = false; + int maxZIndex = 1; public PDDBuyerOrderReadCtrl() { InitializeComponent(); } + void filterBuyerOrder() + { + string filterTxt = txtFilter?.Text.ParseToString().Trim(); + lstFilterPddBuyerOrderInfoLite = new ObservableCollection(lstPddBuyerOrderInfoLite + .Where(o => GlobalConfig.PDDBuyerLoginList.Any(u => u.buyer_name == o.buyerName))); + + lstFilterPddBuyerOrderInfoLite = new ObservableCollection(lstFilterPddBuyerOrderInfoLite.Where(x => + x.order_time > BaseClass.DateTimeToTimestampSeconds(new DateTime(2026, 6, 25)) + )); + + lstFilterPddBuyerOrderInfoLite = new ObservableCollection(lstFilterPddBuyerOrderInfoLite.Where(x => + chkHideNoWxIdOrder.IsChecked != true || !x.ShopOrderIdStr.IsNullOrEmpty() + )); + + lstFilterPddBuyerOrderInfoLite = new ObservableCollection(lstFilterPddBuyerOrderInfoLite.Where(x => + string.IsNullOrEmpty(filterTxt) || (x.order_sn.Contains(filterTxt) || x.ShopOrderIdStr.Contains(filterTxt) || x.tracking_number.Contains(filterTxt)) + )); + + if (dgBuyerOrder != null) + this.dgBuyerOrder.ItemsSource = lstFilterPddBuyerOrderInfoLite; + } + private void UserControl_Loaded(object sender, RoutedEventArgs e) { - InitCef(); + buyerOrderConfig = NaiBa.Util.Helper.ConfigHelper.LoadConfig("pdd_buyer_order_config"); + if (buyerOrderConfig == null) + buyerOrderConfig = new BuyerOrderConfig(); + this.chkAutoReadBuyerOrder.IsChecked = !buyerOrderConfig.IsPause; + //this.chkAutoAfterSale.IsChecked = buyerOrderConfig.IsAutoAfterSale; + + + lstPddBuyerOrderInfoLite = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("pdd_buyer_order_list"); + if (lstPddBuyerOrderInfoLite == null) + lstPddBuyerOrderInfoLite = new ObservableCollection(); + foreach (var item in lstPddBuyerOrderInfoLite.ToList()) + { + if (item.order_time < BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddMonths(-1))) + lstPddBuyerOrderInfoLite.Remove(item); + } + + Task.Run(() => { + + while (dgBuyerOrder == null || !MainWindow.Instance.hasGetPddBuyer) + { + Thread.Sleep(100); + } + Dispatcher.Invoke(new Action(() => + { + filterBuyerOrder(); + })); + + while (!MainWindow.Instance.hasReadShop || !MainWindow.Instance.hasGetPddBuyer || !MainWindow.Instance.orderListCtrl.hasReadOrder) + { + Thread.Sleep(100); + } + + Dispatcher.Invoke(new Action(() => + { + InitCef(); + })); + + while (isInitBuyerOrder || isInitBuyerAfterSale) + { + Thread.Sleep(500); + } + AutoGetPddOrder(); + }); + + isLoad = true; + } + + void AutoGetPddOrder() + { + Task.Run(() => + { + Thread.Sleep(5000); + while (true) + { + if (!IsAutoReadBuyerOrder) + { + Thread.Sleep(1000); + Dispatcher.Invoke(new Action(() => + { + btnSearch.Content = "自动刷新暂停中"; + })); + continue; + } + + if (DateTime.Now > nextGetOrderTime) + { + btnSearch_Click(null, null); + } + if (isReadBuyerOrder) + { + nextGetOrderTime = DateTime.Now.AddMinutes(25); + } + Thread.Sleep(1000); + Dispatcher.Invoke(new Action(() => + { + var ticks = nextGetOrderTime - DateTime.Now; + btnSearch.Content = "刷新订单 " + ticks.Minutes + ":" + ticks.Seconds; + })); + } + }); + } + + void ShowOrder(PddBuyerOrderLiteInfo order) + { + if (order == null) + return; + + //var row = dgvPddBuyerOrder.Rows.Cast().FirstOrDefault(p => p.Cells.GetCellValueFromColumnName("colOPddOrderSn").ParseToString() == order.order_sn); + //if (row == null) + //{ + // var rowIndex = this.dgvPddBuyerOrder.Rows.Add( + // false, + // order.buyerId, + // order.buyerName, + // order.order_sn, + // order.order_time == null ? "" : BaseClass.StampToDateTime(order.order_time.ParseToInt()).ToString("yy-MM-dd HH:mm"), + // "", // 图片路径, + // DataGridViewExtension.defaultBitmap, // 订单图片 + // order.order_Goods == null ? "" : string.Join("\r\n", order.order_Goods.Select(g => g.goods_name + " x" + g.goods_number)), // 商品信息 + // order.order_amount * 0.01, + // order.order_status_prompt, + // order.outExpressCompanyName, + // order.tracking_number, + // order.sendStatus, + // "发送", + // "退货" + // ); + // row = dgvPddBuyerOrder.Rows[rowIndex]; + // row.Height = 40; + + //} + //else + //{ + // //row.Cells["colOSelect"].Value = selectIds.Contains(buyer.buyer_id); + // row.Cells["colOBuyerId"].Value = order.buyerId; + // row.Cells["colOBuyerName"].Value = order.buyerName; + // row.Cells["colOPddOrderSn"].Value = order.order_sn; + // row.Cells["colOOrderTime"].Value = order.order_time == null ? "" : BaseClass.StampToDateTime(order.order_time.ParseToInt()).ToString("yy-MM-dd HH:ss"); + // //row.Cells["colOImgUrl"].Value = ""; + // // 商品信息 + // row.Cells["colOGoodsInfo"].Value = order.order_Goods == null ? "" : string.Join("\r\n", order.order_Goods.Select(g => g.goods_name + " x" + g.goods_number)); + // row.Cells["colOOrderAmount"].Value = order.order_amount * 0.01; + // row.Cells["colOStatus"].Value = order.order_status_prompt; + // row.Cells["colOExpressName"].Value = order.outExpressCompanyName; + // row.Cells["colOExpressId"].Value = order.tracking_number; + // row.Cells["colOMsg"].Value = order.sendStatus; + //} + //// + //if (order.outExpressCompanyName == "物流名称获取失败") + // row.Cells["colOExpressName"].Style.ForeColor = Color.Orange; + //else + // row.Cells["colOExpressName"].Style.ForeColor = Control.DefaultForeColor; + + //if (order.order_status_prompt.Contains("交易成功")) + //{ + // row.Cells["colOMsg"].Value = "[完]" + row.Cells["colOMsg"].Value.ParseToString(); + // row.Cells["colOMsg"].Style.ForeColor = Color.Green; + //} + //else if (order.order_status_prompt.Contains("退款成功") || order.order_status_prompt.Contains("交易已取消")) + //{ + // row.Cells["colOMsg"].Value = "[已退]" + row.Cells["colOMsg"].Value.ParseToString(); + // row.Cells["colOMsg"].Style.ForeColor = Color.Gray; + //} + //else if (order.after_sales != null) + //{ + // if (order.order_sn == "260417-009038743070257") + // { + // //after_sales_id 20093344800098 after_sales_status 12 after_sales_type 2 + // } + // if (order.order_sn == "260427-536315174430257") + // { + + // } + // if(order.after_sales.after_sales_status == 12 && order.after_sales.after_sales_type == 2) + // { + // row.Cells["colOMsg"].Value = "[退货失败]" + row.Cells["colOMsg"].Value.ParseToString(); + // row.Cells["colOMsg"].Style.ForeColor = Color.SlateBlue; + // } + // else + // { + // row.Cells["colOMsg"].Value = "[退货中]" + row.Cells["colOMsg"].Value.ParseToString(); + // row.Cells["colOMsg"].Style.ForeColor = Color.DeepSkyBlue; + // } + //} + //else if (!string.IsNullOrEmpty(order.wxRefundStatus)) + //{ + // row.Cells["colOMsg"].Value = "[" + order.wxRefundStatus + "]" + row.Cells["colOMsg"].Value.ParseToString(); + // row.Cells["colOMsg"].Style.ForeColor = Color.Red; + //} + //else + //{ + // row.Cells["colOMsg"].Style.ForeColor = Control.DefaultForeColor; + //} } public void InitCef() { //CefSharp.Wpf.ChromiumWebBrowser cefWebBrowser = new CefSharp.Wpf.ChromiumWebBrowser(); //cefWebBrowser.Address = "https://www.baidu.com"; - cefWebBrowser = WPFCEFBrowser.CreateChromiumWebBrowser("https://www.baidu.com", false); - Grid.SetRow(cefWebBrowser, 0); - this.GridCef.Children.Add(cefWebBrowser); + //cefWebBrowser = WPFCEFBrowser.CreateChromiumWebBrowser("https://www.baidu.com", false); + //Grid.SetRow(cefWebBrowser, 0); + //this.GridCef.Children.Add(cefWebBrowser); - LocalResourceRequestHandler resourceRequestHandler = new LocalResourceRequestHandler(); - resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete; - resourceRequestHandler.BeforeResourceLoadEvent += RequestHandler_BeforeResourceLoad; - cefWebBrowser.RequestHandler = new LocalRequestHandler(resourceRequestHandler); - var lifeSapnHandler = new LocalLifeSpanHandler(PopWindowType.SelfWindow); - cefWebBrowser.LifeSpanHandler = lifeSapnHandler; - cefWebBrowser.KeyboardHandler = new KeyboardHandler(); - cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; - cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged; - cefWebBrowser.LoadError += CefWebBrowser_LoadError; + //LocalResourceRequestHandler resourceRequestHandler = new LocalResourceRequestHandler(); + //resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete; + //resourceRequestHandler.BeforeResourceLoadEvent += RequestHandler_BeforeResourceLoad; + //cefWebBrowser.RequestHandler = new LocalRequestHandler(resourceRequestHandler); + //var lifeSapnHandler = new LocalLifeSpanHandler(PopWindowType.SelfWindow); + //cefWebBrowser.LifeSpanHandler = lifeSapnHandler; + //cefWebBrowser.KeyboardHandler = new KeyboardHandler(); + //cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + //cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged; + //cefWebBrowser.LoadError += CefWebBrowser_LoadError; - - //Task.Run(() => - //{ - //Thread.Sleep(2000); - //Dispatcher.Invoke(new Action(() => { - // browser.Visibility = Visibility.Hidden; - //})); - //Thread.Sleep(1000); - //Dispatcher.Invoke(new Action(() => { - - // browser.Address = "https://www.sina.com.cn"; - - - // //})); - // //Thread.Sleep(3000); - // //var jsStr = @"window.scrollTo(0, document.body.scrollHeight);"; - // //var client = browser.GetDevToolsClient(); - // //if (client != null) - // //{ - // // var result = client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true); - // // //result.Wait(5000); - // // //string resultStr = result.Result.Result.Value.ParseToString(); - // // ////if (resultStr.ParseToInt() > 0) - // // //{ - // // // CEFBrowser.DeleteCookie(browser.GetCookieManager(null)); - // // // //return; - // // //} - // //} - // //Dispatcher.Invoke(new Action(() => { - // //})); - // //Thread.Sleep(3000); - // //Dispatcher.Invoke(new Action(() => { - // // browser.Visibility = Visibility.Visible; - // //})); - //}); + foreach (var buyer in GlobalConfig.PDDBuyerLoginList) + { + Thread.Sleep(1); + Dispatcher.Invoke(new Action(() => + { + buyer.wpf_browser = WPFCEFBrowser.CreateChromiumWebBrowser("about:blank", false); + LocalResourceRequestHandler resourceRequestHandler = new LocalResourceRequestHandler(); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete; + resourceRequestHandler.BeforeResourceLoadEvent += RequestHandler_BeforeResourceLoad; + buyer.wpf_browser.RequestHandler = new LocalRequestHandler(resourceRequestHandler); + var lifeSapnHandler = new LocalLifeSpanHandler(PopWindowType.SelfWindow); + buyer.wpf_browser.LifeSpanHandler = lifeSapnHandler; + buyer.wpf_browser.KeyboardHandler = new KeyboardHandler(); + buyer.wpf_browser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + buyer.wpf_browser.AddressChanged += CefWebBrowser_AddressChanged; + buyer.wpf_browser.LoadError += CefWebBrowser_LoadError; + Grid.SetRow(buyer.wpf_browser, 0); + this.GridCef.Children.Add(buyer.wpf_browser); + })); + } } private void CefWebBrowser_LoadError(object sender, LoadErrorEventArgs e) @@ -118,16 +322,1238 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls } private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData, IRequest request) { + var cookie1 = request.Headers["Cookie"]; + Task.Run(() => + { + var url1 = url; + var data1 = responseData; + + //if (data1.Contains("260415-154067299863696") || data1.Contains("待用户退回商品") || data1.Contains("已寄出,待商家处理") || data1.Contains("待商家处理退货申请") || data1.Contains("待用户拒收商品")) + //{ + + //} + + // 已发货 第一页 + if (url1.StartsWith("https://mobile.yangkeduo.com/orders.html?type=3")) //https://mobile.yangkeduo.com/orders.html?type=3 + { + Task.Run(() => + { + if (data1.Contains("display_amount")) + { + var jsonData = BaseRegex.GetJsonObjStrJson(ref data1, "ordersStore")?.FirstOrDefault(); + var nickName = BaseRegex.GetStringJson(ref data1, "nickName"); + var uid = BaseRegex.GetStringJson(ref data1, "uid"); + var buyerId = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == uid)?.buyer_id; + if (buyerId.IsNullOrEmpty()) + buyerId = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_nick == nickName)?.buyer_id; + if (!string.IsNullOrEmpty(jsonData) && !string.IsNullOrEmpty(buyerId)) + { + var ordersStr = BaseRegex.GetJsonObjStrJson(ref jsonData, "initOdersList")?.FirstOrDefault(); + if (ordersStr != null && ordersStr.StartsWith("{\"3\":")) + { + ordersStr = "{\"orders\":" + ordersStr.Substring(5); + CefReadBuyerOrder(buyerId, ordersStr); + } + } + } + }); + } + // 待发货 第一页 + if (url1.StartsWith("https://mobile.yangkeduo.com/orders.html?type=2")) + { + Task.Run(() => + { + if (data1.Contains("display_amount")) + { + var jsonData = BaseRegex.GetJsonObjStrJson(ref data1, "ordersStore")?.FirstOrDefault(); + var nickName = BaseRegex.GetStringJson(ref data1, "nickName"); + var uid = BaseRegex.GetStringJson(ref data1, "uid"); + var buyerId = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == uid)?.buyer_id; + if (buyerId.IsNullOrEmpty()) + buyerId = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_nick == nickName)?.buyer_id; + if (!string.IsNullOrEmpty(jsonData) && !string.IsNullOrEmpty(buyerId)) + { + var ordersStr = BaseRegex.GetJsonObjStrJson(ref jsonData, "initOdersList")?.FirstOrDefault(); + if (ordersStr != null && ordersStr.StartsWith("{\"2\":")) + { + ordersStr = "{\"orders\":" + ordersStr.Substring(5); + CefReadBuyerOrder(buyerId, ordersStr); + } + } + } + }); + } + if (url1.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/aristotle/order_list_v")) + { + Task.Run(() => + { + CefReadBuyerOrder(url1, data1); + + }); + } + // 读取售后 + if (url1.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/blade/after_sales_list")) + { + Task.Run(() => + { + CefReadBuyerAfterSale(url1, data1); + }); + } + + // 售后 第一页 + if (url1.StartsWith("https://mobile.yangkeduo.com/complaint_list.html")) + { + Task.Run(() => + { + if (data1.Contains("listItemStatusVo") && data1.Contains("afterSalesId") && data1.Contains("statusText")) + { + var cookie2 = cookie1.Replace(";", "&").Replace(" ", ""); + var jsonDatas = BaseRegex.GetJsonObjStrJson(ref data1, "listDataMap"); + var jsonData = jsonDatas?.OrderByDescending(x => x.Length).FirstOrDefault(); + var uid = BaseRegex.GetStringQuery(ref cookie2, "pdd_user_id"); + var buyerId = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == uid)?.buyer_id; + if (!string.IsNullOrEmpty(buyerId) && !string.IsNullOrEmpty(jsonData)) + { + try + { + var jObj = JsonHelper.JObjectParse(jsonData); + jObj["result"] = jObj["all"]; + jObj["result"]["listItemVOList"] = jObj["result"]["list"]; + CefReadBuyerAfterSale(buyerId, JsonHelper.SerializeObject(jObj)); + } + catch + { + + } + } + } + }); + } + }); } + + void CefReadBuyerOrder(string url, string data) + { + if (data.Contains("轻奢壁挂式香皂盒置物架卫生间沥水家居可拆卸收纳盒翻盖肥皂盒")) + { + + } + + var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => url.Contains(b.buyer_id)); + if (buyer == null) + return; + + lastCefReadOrderTime = DateTime.Now; + + //{"server_time":1775789489,"orders":[],"extra_info":{}} + if (data.Contains("\"orders\":[]")) + { + Dispatcher.Invoke(new Action(() => + { + lblMsg.Content = buyer.buyer_name + " 获取到空订单列表,退出自动滑动 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + })); + currentReadBuyer = ""; + return; + } + if (data.Contains("\"error_code\":40001")) + { + currentReadBuyer = ""; + PddMobileLoginForm.CheckBuyerLogin(new List { buyer }, false); + return; + } + + Dispatcher.Invoke(new Action(() => + { + lblMsg.Content = buyer.buyer_name + " 正在获取订单列表 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + })); + + var list = JsonHelper.DeserializeJsonToList(JsonHelper.JObjectParse(data)["orders"].ParseToString()); + var out_order_no_str = string.Join(",", list.Select(bo => bo.order_sn)); + // 读取中转仓拍单订单 + var url3 = BaseClass.Build29WxObjString("order/wx_get_transit_order"); + var data3 = UserLogin.GetSignaturex(); + data3 += "&out_order_no=" + out_order_no_str; + var html3 = GetHtml.PostUtf8(url3, data3); + if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200")) + GetHtml.PostUtf8(url3, data3); + if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200")) + { + //Dispatcher.Invoke(new Action(() => + //{ + // BaseMsgWindow.ShowError(MainWindow.Instance, "订单读取失败 " + BaseRegex.GetStringJson(ref html, "msg")); + //})); + //break; + } + List transitOrderList = new List(); + try { transitOrderList = JsonHelper.DeserializeJsonToList(JObject.Parse(html3)["data"].ParseToString()); } catch { } + + + foreach (var o in list) + { + if (o.order_sn == "260620-468346508912823") + { + + } + o.buyerId = buyer.buyer_id; + o.buyerName = buyer.buyer_name; + o.outExpressCompanyMsg = o.extra_info.order_hint?.message; // todo 此处转换 + var ShopOrder = GlobalConfig.lstOrder.FirstOrDefault(o1 => o1.order_items.Any(i1 => i1.item_transit_orders.Any(t1 => t1.out_order_no == o.order_sn))); + if (ShopOrder != null) + { + if (o.order_sn == "") + { + + } + + var order_item = ShopOrder.order_items.FirstOrDefault(oi => oi.item_transit_orders.Any(t1 => t1.out_order_no == o.order_sn)); + if (order_item != null) + { + o.ShopOrderIdStr = order_item.order_id; + o.ShopOrderSkuIdStr = order_item.sku_id; + o.ShopOrderSkuNameStr = order_item.sku_attr_str; + o.TransitWarehouseIdStr = transitOrderList.FirstOrDefault(t1 => t1.out_order_no == o.order_sn).platform; + o.Express1WaybillStr = transitOrderList.FirstOrDefault(t1 => t1.out_order_no == o.order_sn).express_1_waybill; + o.Express1CompanyStr = transitOrderList.FirstOrDefault(t1 => t1.out_order_no == o.order_sn).express_1_company; + o.Express2WaybillStr = transitOrderList.FirstOrDefault(t1 => t1.out_order_no == o.order_sn).express_2_waybill; + o.Express2CompanyStr = transitOrderList.FirstOrDefault(t1 => t1.out_order_no == o.order_sn).express_2_company; + o.TransferWareHouseStatus = transitOrderList.FirstOrDefault(t1 => t1.out_order_no == o.order_sn).transfer_warehouse_status.ParseToString(); + o.PreAllocatedOrderNoStr = transitOrderList.FirstOrDefault(t1 => t1.out_order_no == o.order_sn).pre_allocated_order_no.ParseToString(); + // 更新订单中转取号状态 + o.sendStatus = o.TransitOrderStatus; + } + } + + PddBuyerOrderLiteInfo order = null; + if (!this.lstPddBuyerOrderInfoLite.Any(or => or.order_sn == o.order_sn)) + { + order = o; + Dispatcher.Invoke(new Action(() => + { + lstPddBuyerOrderInfoLite.Add(order); + })); + } + else + { + order = this.lstPddBuyerOrderInfoLite.FirstOrDefault(or => or.order_sn == o.order_sn); + //if (JsonHelper.SerializeObject(order) != JsonHelper.SerializeObject(o)) + { + //if (order.order_status_prompt.Contains("待发货") && !o.order_status_prompt.Contains("待发货")) + //{ + // order.sendStatus = ""; + //} + + //if (order.sendStatus == "已取号" || order.sendStatus == "提前取号") + //{ + // if (!string.IsNullOrEmpty(o.Express1WaybillStr) && !string.IsNullOrEmpty(o.Express1CompanyStr)) + // order.sendStatus = "已提交"; + // if (o.PreAllocatedOrderNoStr.IsNullOrEmpty()) + // order.sendStatus = ""; + //} + //if (!o.sendStatus .IsNullOrEmpty()) + { + order.sendStatus = o.sendStatus; + } + + //order = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(o)); + order.activity_type = o.activity_type; + order.after_sales = o.after_sales; + order.discount_amount = o.discount_amount; + order.display_amount = o.display_amount; + order.extra_info = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(o.extra_info)); + order.order_amount = o.order_amount; + order.order_Goods = JsonHelper.DeserializeJsonToList(JsonHelper.SerializeObject(o.order_Goods)); + order.order_link_url = o.order_link_url; + order.order_prompt_color = o.order_prompt_color; + order.order_status_prompt = o.order_status_prompt; + order.parent_order_sn = o.parent_order_sn; + order.service_amount = o.service_amount; + order.shipping_amount = o.shipping_amount; + order.outExpressCompanyMsg = o.outExpressCompanyMsg; + order.order_time = o.order_time; + order.tracking_number = o.tracking_number; + order.ShopOrderIdStr = o.ShopOrderIdStr; + order.ShopOrderSkuIdStr = o.ShopOrderSkuIdStr; + order.ShopOrderSkuNameStr = o.ShopOrderSkuNameStr; + order.TransitWarehouseIdStr = o.TransitWarehouseIdStr; + order.Express1WaybillStr = o.Express1WaybillStr; + order.Express1CompanyStr = o.Express1CompanyStr; + order.Express2WaybillStr = o.Express2WaybillStr; + order.Express2CompanyStr = o.Express2CompanyStr; + order.TransferWareHouseStatus = o.TransferWareHouseStatus; + order.PreAllocatedOrderNoStr = o.PreAllocatedOrderNoStr; + + var index = lstPddBuyerOrderInfoLite.IndexOf(order); + Dispatcher.Invoke(new Action(() => + { + lstPddBuyerOrderInfoLite.Remove(order); + lstPddBuyerOrderInfoLite.Insert(index, order); + })); + } + } + + Task.Run(() => + { + //SendOrderE57(order); + SendTransitOrderE57(order); + }); + + Dispatcher.Invoke(new Action(() => + { + ShowOrder(order); + })); + } + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); + } + + void CefReadBuyerAfterSale(string url, string data) + { + var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => url.Contains(b.buyer_id)); + if (buyer == null) + return; + + lastCefReadOrderTime = DateTime.Now; + + if (data.Contains("\"listItemVOList\":[]") || data.Contains("\"hasNextQuery\":false")) + { + Dispatcher.Invoke(new Action(() => + { + lblMsg.Content = buyer.buyer_name + " 获取到空售后列表,退出自动滑动 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + })); + currentReadBuyer = ""; + return; + } + if (data.Contains("\"error_code\":40001")) + { + currentReadBuyer = ""; + PddMobileLoginForm.CheckBuyerLogin(new List { buyer }, false); + return; + } + + Dispatcher.Invoke(new Action(() => + { + lblMsg.Content = buyer.buyer_name + " 正在获取售后列表 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + })); + + var list = JsonHelper.DeserializeJsonToList(JsonHelper.JObjectParse(data)["result"]["listItemVOList"].ParseToString()); + foreach (var af in list) + { + if (af.orderSn == "260414-035525772830257") + { + + } + + af.buyerId = buyer.buyer_id; + af.buyerName = buyer.buyer_name; + + bool isUpdate = false; + PddBuyerAfterSaleLiteInfo afterSale = null; + if (!this.lstPddBuyerAfterSaleInfoLite.Any(or => or.afterSalesId == af.afterSalesId)) + { + isUpdate = true; + afterSale = af; + lstPddBuyerAfterSaleInfoLite.Add(afterSale); + } + else + { + afterSale = this.lstPddBuyerAfterSaleInfoLite.FirstOrDefault(aft => aft.afterSalesId == af.afterSalesId); + var afterSaleTmp = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(afterSale)); + afterSaleTmp.sendStatus = ""; + afterSaleTmp.listItemMallVO = new ListItemMallVO(); + var afTmp = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(af)); + afTmp.listItemMallVO = new ListItemMallVO(); + //"{\"buyerId\":\"9303896321\",\"buyerName\":\"吴镇强\",\"sendStatus\":\"\",\"orderSn\":\"260419-166104962590257\",\"orderDate\":260419,\"afterSalesId\":20379701953346,\"listItemExtraVO\":{\"navToDetailPageUrl\":\"/complaints_new_detail.html?after_sales_id=20379701953346&order_sn=260419-166104962590257\"},\"listItemMallVO\":{\"mallName\":\"喜悦时光婚礼屋\",\"mallLogo\":\"http://t16img.yangkeduo.com/pdd_ims/img_check/v2/F3E6FF9A2BE40120200112155401880/9632a275dd974e9aa2e138cde6d0adf9.png\",\"mallTagLink\":null,\"pddRoute\":\"mall_page.html?mall_id=938572084&msn=zjdvupyguflkhtcgugbw3hbdpm_axbuy&_sop_rcto=YWLr7xLhO9bbI6L9S-r6ALQbTuXTx_3fIjo\"},\"listItemStatusVO\":{\"statusText\":\"待用户发货\"},\"listItemGoodsVO\":{\"goodsImage\":\"https://img.pddpic.com/mms-material-img/2026-03-21/005e0aa1-ad62-4db3-8018-00490ddc0a82.jpeg\",\"goodsName\":\"2026高级可折叠蚊帐家用卧室懒人免安装加高加厚加密学生宿舍蚊帐\",\"spec\":\"免安装/可折叠/网眼加密【可爱粉】+固定器,适用双人1.8m床【190*160*80】\",\"goodsPrice\":1890,\"goodsNumber\":1,\"richTextList\":null},\"listItemAmountVO\":{\"orderAmountTitle\":\"实付:\",\"orderAmount\":1890,\"payLaterAmountTitle\":null,\"payLaterAmount\":null,\"refundAmountTitle\":\"退款金额:\",\"refundAmount\":1890,\"refundAmountText\":null,\"useCoupon\":false}}" + //"{\"buyerId\":\"9303896321\",\"buyerName\":\"吴镇强\",\"sendStatus\":\"\",\"orderSn\":\"260419-166104962590257\",\"orderDate\":260419,\"afterSalesId\":20379701953346,\"listItemExtraVO\":{\"navToDetailPageUrl\":\"/complaints_new_detail.html?after_sales_id=20379701953346&order_sn=260419-166104962590257\"},\"listItemMallVO\":{\"mallName\":\"喜悦时光婚礼屋\",\"mallLogo\":\"http://t16img.yangkeduo.com/pdd_ims/img_check/v2/F3E6FF9A2BE40120200112155401880/9632a275dd974e9aa2e138cde6d0adf9.png\",\"mallTagLink\":null,\"pddRoute\":\"mall_page.html?mall_id=938572084&msn=zjdvupyguflkhtcgugbw3hbdpm_axbuy&_sop_rcto=YWKCoxwbKDHFAaL9S-r6ALQbTuXTx_3fIjo\"},\"listItemStatusVO\":{\"statusText\":\"待用户发货\"},\"listItemGoodsVO\":{\"goodsImage\":\"https://img.pddpic.com/mms-material-img/2026-03-21/005e0aa1-ad62-4db3-8018-00490ddc0a82.jpeg\",\"goodsName\":\"2026高级可折叠蚊帐家用卧室懒人免安装加高加厚加密学生宿舍蚊帐\",\"spec\":\"免安装/可折叠/网眼加密【可爱粉】+固定器,适用双人1.8m床【190*160*80】\",\"goodsPrice\":1890,\"goodsNumber\":1,\"richTextList\":null},\"listItemAmountVO\":{\"orderAmountTitle\":\"实付:\",\"orderAmount\":1890,\"payLaterAmountTitle\":null,\"payLaterAmount\":null,\"refundAmountTitle\":\"退款金额:\",\"refundAmount\":1890,\"refundAmountText\":null,\"useCoupon\":false}}" + if (JsonHelper.SerializeObject(afterSaleTmp) != JsonHelper.SerializeObject(afTmp)) + { + isUpdate = true; + //order = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(o)); + afterSale.afterSalesId = af.afterSalesId; + afterSale.listItemAmountVO = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(af.listItemAmountVO)); + afterSale.listItemExtraVO = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(af.listItemExtraVO)); + afterSale.listItemGoodsVO = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(af.listItemGoodsVO)); + afterSale.listItemMallVO = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(af.listItemMallVO)); + afterSale.listItemStatusVO = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(af.listItemStatusVO)); + } + } + + if (afterSale.orderDate < DateTime.Now.AddMonths(-2).ToString("yyMMdd").ParseToInt()) + { + Dispatcher.Invoke(new Action(() => + { + lblMsg.Content = buyer.buyer_name + " 近2个月售后列表获取完成,退出自动滑动 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + })); + currentReadBuyer = ""; + //return; + } + + if (isUpdate) + { + Task.Run(() => + { + SendAfterSaleE57(lstPddBuyerAfterSaleInfoLite.FirstOrDefault(a => a.orderSn == afterSale.orderSn)); + }); + + Dispatcher.Invoke(new Action(() => + { + ShowAfterSale(lstPddBuyerAfterSaleInfoLite.FirstOrDefault(a => a.orderSn == afterSale.orderSn)); + })); + } + } + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_after_sale_list", lstPddBuyerAfterSaleInfoLite); + } + + void ShowAfterSale(PddBuyerAfterSaleLiteInfo afterSale) + { + + } + + + TimeSpan PauseTick = new TimeSpan(1); private void chkAutoReadBuyerOrder_CheckedChanged(object sender, RoutedEventArgs e) { - AutoReadBuyerOrder = chkAutoReadBuyerOrder.IsChecked == true; + + IsAutoReadBuyerOrder = chkAutoReadBuyerOrder.IsChecked == true; + + if (!IsAutoReadBuyerOrder) + { + //if (cancellationTokenSource != null) + // cancellationTokenSource.Cancel(); + } + + if (IsAutoReadBuyerOrder) + nextGetOrderTime = DateTime.Now + PauseTick; + else + PauseTick = nextGetOrderTime - DateTime.Now; + + if (isLoad) + { + buyerOrderConfig.IsPause = !IsAutoReadBuyerOrder; + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_config", buyerOrderConfig); + //buyerOrderConfig = NaiBa.Util.Helper.ConfigHelper.LoadConfig("pdd_buyer_order_config"); + return; + } } - + + private void btnSearch_Click(object sender, RoutedEventArgs e) + { + nextGetOrderTime = DateTime.Now.AddMinutes(25); + GetPddOrder(); + //MakeWxToPddAfterSales(); + } + + void GetPddOrder() + { + isReadBuyerOrder = true; + + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + cancellationTokenSource = new CancellationTokenSource(); + + Task.Run(() => + { + var tokenSource = cancellationTokenSource; + while (isInitBuyerOrder || isInitBuyerAfterSale) + { + if (tokenSource.IsCancellationRequested) + { + BindBuyer(null, "已取消读取"); + break; + } + Thread.Sleep(500); + } + + currentReadBuyer = ""; + + foreach (var buyer in GlobalConfig.PDDBuyerLoginList) + { + if (tokenSource.IsCancellationRequested) + break; + + PddMobileLoginForm.CheckBuyerLogin(new List() { buyer }); + if (buyer.status != "在线") + continue; + + //var row = dgvBuyer.Rows.Cast().FirstOrDefault(r => r.Cells["colBuyerNick"].Value.ParseToString() == buyer.buyer_nick); + //if (row == null) + //{ + // continue; + //} + //if (row.Cells["colSelect"].Value.ParseToBool() != true) + //{ + // Invoke(new Action(() => { row.Cells["colMessage"].Value = "未勾选买手号,跳过"; })); + // continue; + //} + + try + { + bool isInitial = false; + while (isInitial == false) + { + Thread.Sleep(100); + Dispatcher.Invoke(new Action(() => + { + if (buyer.wpf_browser != null) + { + var frame = buyer.wpf_browser.GetBrowser().MainFrame; + isInitial = buyer.wpf_browser != null && buyer.wpf_browser.IsBrowserInitialized && frame.IsValid; + } + })); + } + + WPFCEFBrowser.DeleteCookie(buyer.wpf_browser.GetCookieManager(null)); + + var cookieLst = JsonHelper.DeserializeJsonToList(buyer?.cookie); + var t = WPFCEFBrowser.SetCookieAsync(JsonHelper.SerializeObject(cookieLst), buyer.wpf_browser.GetCookieManager(null)); + + buyer.wpf_browser.Load("https://mobile.yangkeduo.com/personal.html"); + Thread.Sleep(Randomx.GetId(2000, 3000)); + + string readBuyer = ""; + int top = 0; + int times = 0; + + #region 售后 + if (1 == 2) + { + readBuyer = buyer.buyer_id; + currentReadBuyer = buyer.buyer_id; + buyer.wpf_browser.Load("https://mobile.yangkeduo.com/complaint_list.html?refer_page_name=personal&refer_page_sn=10001&tab=all"); + Thread.Sleep(Randomx.GetId(2000, 3000)); + + Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = buyer.buyer_nick + " 售后读取中"; })); + BindBuyer(buyer, "正在读取售后"); + + top = 0; + times = 0; + lastCefReadOrderTime = DateTime.Now; + while (currentReadBuyer == readBuyer) + { + if (tokenSource.IsCancellationRequested) + { + BindBuyer(buyer, "已取消读取"); + break; + } + + if (lastCefReadOrderTime < DateTime.Now.AddSeconds(-30)) + { + PddMobileLoginForm.CheckBuyerLogin(new List() { buyer }); + if (buyer.status != "在线") + { + BindBuyer(buyer, "店铺掉线"); + break; + } + BindBuyer(buyer, "停滞时间超过30秒,跳过"); + break; + } + + Dispatcher.Invoke(new Action(() => { Panel.SetZIndex(buyer.wpf_browser, maxZIndex++); })); + + top += Randomx.GetId(450, 600); + Thread.Sleep(Randomx.GetId(100, 300)); + + var jsStr = @"window.scroll({ + top: document.body.scrollHeight, + left: 0, + behavior: 'smooth' // 可选,使滚动平滑 + });"; + jsStr = @"window.scroll({ + top: " + top + @", + left: 0, + behavior: 'smooth' // 可选,使滚动平滑 + });"; + //var t1 = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr); + //t1.Wait(1000); + var client = buyer.wpf_browser.GetDevToolsClient(); + if (client != null) + { + var result = client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true); + result.Wait(5000); + } + } + if (tokenSource.IsCancellationRequested) + { + BindBuyer(buyer, "已取消读取"); + break; + } + Thread.Sleep(Randomx.GetId(2000, 3000)); + } + #endregion + + // 待发货 + readBuyer = buyer.buyer_id; + currentReadBuyer = buyer.buyer_id; + buyer.wpf_browser.Load("https://mobile.yangkeduo.com/orders.html?type=2"); + Thread.Sleep(Randomx.GetId(2000, 3000)); + + Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = buyer.buyer_nick + " 待发货读取中"; })); + BindBuyer(buyer, "正在读取待发货"); + + top = 0; + lastCefReadOrderTime = DateTime.Now; + while (currentReadBuyer == readBuyer) + { + if (tokenSource.IsCancellationRequested) + { + BindBuyer(buyer, "已取消读取"); + break; + } + + if (lastCefReadOrderTime < DateTime.Now.AddSeconds(-30)) + { + PddMobileLoginForm.CheckBuyerLogin(new List() { buyer }); + if (buyer.status != "在线") + { + BindBuyer(buyer, "店铺掉线"); + break; + } + BindBuyer(buyer, "停滞时间超过30秒,跳过"); + break; + } + + if (times % 100 == 0) + { + PddMobileLoginForm.CheckBuyerLogin(new List() { buyer }); + } + if (buyer.status != "在线") + break; + times++; + + Dispatcher.Invoke(new Action(() => { Panel.SetZIndex(buyer.wpf_browser, maxZIndex++); })); + + top += Randomx.GetId(450, 600); + Thread.Sleep(Randomx.GetId(100, 300)); + + var jsStr = @"window.scroll({ + top: document.body.scrollHeight, + left: 0, + behavior: 'smooth' // 可选,使滚动平滑 + });"; + jsStr = @"window.scroll({ + top: " + top + @", + left: 0, + behavior: 'smooth' // 可选,使滚动平滑 + });"; + //var t1 = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr); + //t1.Wait(1000); + var client = buyer.wpf_browser.GetDevToolsClient(); + if (client != null) + { + var result = client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true); + result.Wait(5000); + } + } + if (tokenSource.IsCancellationRequested) + { + BindBuyer(buyer, "已取消读取"); + break; + } + Thread.Sleep(Randomx.GetId(2000, 3000)); + + Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = buyer.buyer_nick + " 已发货读取中"; })); + BindBuyer(buyer, "正在读取已发货"); + + // 已发货 + readBuyer = buyer.buyer_id; + currentReadBuyer = buyer.buyer_id; + buyer.wpf_browser.Load("https://mobile.yangkeduo.com/orders.html?type=3"); + Thread.Sleep(Randomx.GetId(2000, 3000)); + + top = 0; + lastCefReadOrderTime = DateTime.Now; + while (currentReadBuyer == readBuyer) + { + if (tokenSource.IsCancellationRequested) + { + BindBuyer(buyer, "已取消读取"); + break; + } + + if (lastCefReadOrderTime < DateTime.Now.AddSeconds(-30)) + { + PddMobileLoginForm.CheckBuyerLogin(new List() { buyer }); + if (buyer.status != "在线") + { + BindBuyer(buyer, "店铺掉线"); + break; + } + BindBuyer(buyer, "停滞时间超过30秒,跳过"); + break; + } + + Dispatcher.Invoke(new Action(() => { Panel.SetZIndex(buyer.wpf_browser, maxZIndex++); })); + + top += Randomx.GetId(450, 600); + Thread.Sleep(Randomx.GetId(100, 300)); + + var jsStr = @"window.scroll({ + top: document.body.scrollHeight, + left: 0, + behavior: 'smooth' // 可选,使滚动平滑 + });"; + jsStr = @"window.scroll({ + top: " + top + @", + left: 0, + behavior: 'smooth' // 可选,使滚动平滑 + });"; + //var t1 = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr); + //t1.Wait(1000); + var client = buyer.wpf_browser.GetDevToolsClient(); + if (client != null) + { + var result = client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true); + result.Wait(5000); + } + } + //Invoke(new Action(() => + //{ + // if (row.Cells["colMessage"].Value.ParseToString().StartsWith("正在读取")) + // BindBuyer(buyer, " "); + //})); + } + catch (Exception ex) + { + } + Thread.Sleep(Randomx.GetId(6000, 8000)); + } + isReadBuyerOrder = false; + + Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = "订单读取已结束,等待下次读取"; })); + }, cancellationTokenSource.Token); + } + + private void BindBuyer(BuyerLoginInfo buyer, string msg = "", List selectIds = null) + { + } + private void btnSendBuyerOrder_Click(object sender, RoutedEventArgs e) + { + if (sender is Button btn) + { + if (btn.DataContext is PddBuyerOrderLiteInfo buyerOrder) + { + btn.IsEnabled = false; + Task.Run(() => + { + //SendOrderE57(order); + SendTransitOrderE57(buyerOrder, true); + + Dispatcher.Invoke(new Action(() => { + btn.IsEnabled = true; + })); + }); + } + } + } + + public void SendTransitOrderE57(PddBuyerOrderLiteInfo order, bool resetSendStatus = false) + { + if (order == null) + return; + //if (resetSendStatus) + // order.sendStatus = ""; + + if (order.sendStatus == "已取号" || order.sendStatus == "取号成功") + { + return; + } + + if (!order.outExpressCompanyCode.IsNullOrEmpty() && !order.tracking_number.IsNullOrEmpty()) + { + // 物流单号不为空才更新服务端 + } + else + { + return; + } + + + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); + + // 提交物流信息 + if (order.sendStatus != "提前取号" && order.sendStatus != "已取号" && order.sendStatus != "取号成功" && order.sendStatus != "已提交") + { + //JObject obj = new JObject(); + //obj["orderNo"] = order.ShopOrderIdStr; + //obj["orderSkuId"] = order.ShopOrderSkuIdStr; + //obj["outOrderNo"] = order.order_sn; + //obj["outAmount"] = order.order_amount.ParseToString(); + //obj["buyerAccount"] = order.buyerName; + //obj["purchaserNote"] = BaseClass.NickName; + //obj["platform"] = order.TransitWarehouseIdStr; // 中转仓ID + //obj["orderPlatformCode"] = "WEISHOP"; + //if (!order.outExpressCompanyCode.IsNullOrEmpty() && !order.tracking_number.IsNullOrEmpty()) + //{ + // obj["express1Company"] = order.outExpressCompanyCode; // 物流公司编号 + // obj["express1Waybill"] = order.tracking_number; // 物流单号 + //} + //var dataStr = JsonHelper.SerializeObject(obj); + //string url = "https://po.e57.cn/prod-api/api/oms-api/externalProcurement/saveOrUpdate"; + ////保存成功200 + //var exportRst = HttpResponseWXBLL.e57PostResponse(url, dataStr, ""); + + //if (!exportRst.Contains("200")) + //{ + // order.sendStatus = "提交运单信息失败"; + // return; + //} + //if (order.outExpressCompanyCode.IsNullOrEmpty() || order.tracking_number.IsNullOrEmpty()) + //{ + // order.sendStatus = "已提交"; + //} + + var url3 = BaseClass.Build29WxObjString("order/wx_update_erp_order_express"); + var data3 = UserLogin.GetSignaturex(); + data3 += "&out_order_no=" + order.order_sn; + data3 += "&express_1_company=" + order.outExpressCompanyCode; // 物流公司编号 + data3 += "&express_1_waybil=" + order.tracking_number; // 物流单号 + var html3 = GetHtml.PostUtf8(url3, data3); + if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200")) + GetHtml.PostUtf8(url3, data3); + } + + if (order.sendStatus != "提前取号") + { + // 立即取号 + string url2 = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/transfer-warehouse/dispatch"; + var data = new JObject(); + data["outAmount"] = order.order_amount.ParseToString(); + data["outAccount"] = order.buyerName; + data["outOrderNo"] = order.order_sn; + data["outExpressCompany"] = order.outExpressCompanyCode; // 物流公司编号 + data["outExpressNo"] = order.tracking_number; // 物流编号 + data["warehouseCode"] = order.TransitWarehouseIdStr; // 中转仓ID + data["platform"] = "WEISHOP"; + var dataStr2 = JsonHelper.SerializeObject(data); + var dispatchRst = HttpResponseWXBLL.e57PostResponse(url2, dataStr2, ""); + //订单已成功调用鸿浩仓库接口发货200 + + if (dispatchRst.Contains("200")) + { + order.sendStatus = "取号成功"; + var shopOrder = GlobalConfig.lstOrder.FirstOrDefault(o => o.order_items.Any(oi => oi.item_transit_orders.Any(t => t.out_order_no == order.order_sn))); + if (shopOrder != null) + { + var orderItem = shopOrder.order_items.FirstOrDefault(oi => oi.item_transit_orders.Any(t => t.out_order_no == order.order_sn)); + if (orderItem != null) + { + var transit = orderItem.item_transit_orders.FirstOrDefault(t => t.out_order_no == order.order_sn); + if (transit != null) + { + if (transit.transfer_warehouse_status == 0) + transit.transfer_warehouse_status = 3; + //transit.pre_allocated_order_no = 1; + } + } + } + } + else + { + order.sendStatus = "直接取号失败"; + } + } + else if (order.sendStatus == "提前取号") + { + string url2 = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/update-upstream-waybill"; + var data = new JObject(); + //data["outAmount"] = order.order_amount.ParseToString(); + //data["outAccount"] = order.buyerName; + data["outOrderNo"] = order.order_sn; + data["outExpressCompany"] = order.outExpressCompanyCode; // 物流公司编号 + data["outExpressNo"] = order.tracking_number; + data["platform"] = "WEISHOP"; + data["orderCode"] = order.TransitWarehouseIdStr; // 中转仓ID + var dataStr2 = JsonHelper.SerializeObject(data); + var dispatchRst = HttpResponseWXBLL.e57PostResponse(url2, dataStr2, ""); + + if (dispatchRst.Contains("200")) + { + order.sendStatus = "取号成功"; + var shopOrder = GlobalConfig.lstOrder.FirstOrDefault(o => o.order_items.Any(oi => oi.item_transit_orders.Any(t => t.out_order_no == order.order_sn))); + if (shopOrder != null) + { + var orderItem = shopOrder.order_items.FirstOrDefault(oi => oi.item_transit_orders.Any(t => t.out_order_no == order.order_sn)); + if (orderItem != null) + { + var transit = orderItem.item_transit_orders.FirstOrDefault(t => t.out_order_no == order.order_sn); + if (transit != null) + transit.pre_allocated_order_no = 1; + } + } + } + else + { + order.sendStatus = "修改提前取号失败"; + } + } + } + + + ConcurrentList tempWaitOrderLst { get; set; } = new ConcurrentList(); + /// + /// 调用e57接口更新web端订单数据信息 + /// + /// + /// 手动强制重置状态,一定重新发送 + public void SendOrderE57(PddBuyerOrderLiteInfo order, bool resetSendStatus = false) + { + //if (resetSendStatus == true) + //{ + // // 防止重复点击发送按钮 + // if (isSendOrderE57) + // return; + // isSendOrderE57 = true; + // Task.Run(() => { Thread.Sleep(3000); isSendOrderE57 = false; }); + //} + + if (tempWaitOrderLst.Any(o => o.order_sn == order.order_sn)) + return; + tempWaitOrderLst.Add(order); + Task.Run(() => + { + var orderSn = order.order_sn; + Thread.Sleep(5000); + tempWaitOrderLst.RemoveAll(o => o.order_sn == orderSn); + }); + + if (order == null) + return; + if (resetSendStatus) + order.sendStatus = ""; + //var row = dgvPddBuyerOrder.Rows.Cast().FirstOrDefault(p => p.Cells.GetCellValueFromColumnName("colOPddOrderSn").ParseToString() == order.order_sn); + //Dispatcher.Invoke(new Action(() => + //{ + // if (row != null) + // row.Cells["colOMsg"].Value = ""; + //})); + Thread.Sleep(100); + + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); + if (1==1) + { + Dispatcher.Invoke(new Action(() => + { + ShowOrder(order); + })); + return; + } + + #region 暂时作废 + // 已发货且没有运单号的属于已退货,不再发送 + //if (order.order_status_prompt != "拼单成功,待发货" && order.order_status_prompt != "免拼成功,待发货" && ( + // order.order_status_prompt.Contains("交易成功") || + // order.order_status_prompt.Contains("退款成功") || + // order.after_sales != null || + // order.order_status_prompt.Contains("交易已取消") || + // string.IsNullOrEmpty(order.tracking_number) || + // string.IsNullOrEmpty(order.outExpressCompanyCode))) + //{ + // Invoke(new Action(() => + // { + // ShowOrder(order); + // })); + // NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); + // return; + //} + // 外采订单已发货的订单不再尝试发货 + // 已存在 同运单号拦截 订单已绑定外采订单 -- 原提示词 + // 微信发货成功,外采订单已发货, orderNo:260429-064214802032823 | 外采订单已发货, orderNo:260429-438189442672823 -- 新提示词 + if (order.sendStatus.Contains("外采订单已发货") || order.sendStatus.Contains("微信发货成功") || + order.sendStatus.Contains("已发送待发货订单") || order.sendStatus.Contains("接收成功") || + order.sendStatus.Contains("已发送售后订单")) + { + Dispatcher.Invoke(new Action(() => + { + ShowOrder(order); + })); + return; + } + + JObject obj = new JObject(); + obj["platform"] = "WEISHOP"; + obj["outAmount"] = order.order_amount; + obj["outAccount"] = order.buyerName; + obj["outOrderNo"] = order.order_sn; + if (!order.outExpressCompanyCode.IsNullOrEmpty() && !order.tracking_number.IsNullOrEmpty()) + { + obj["outExpressCompany"] = order.outExpressCompanyCode; + obj["outExpressNo"] = order.tracking_number; + } + var dataStr = JsonHelper.SerializeObject(obj); + string url = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/bind"; + //成功 "0SUCCESS" + //失败 已存在 1505调用微信接口更新物流信息失败: 非法参数, 同运单号拦截 rid: 69d8ab9c-22baa3b1-67de0d95 + var exportRst = HttpResponseWXBLL.e57PostResponse(url, dataStr, ""); + if (exportRst == null) + { + + } + for (int i = 0; i < 3 && exportRst.Contains("操作超时") && resetSendStatus == false; i++) + { + Thread.Sleep(210000); + HttpResponseWXBLL.e57PostResponse(url, dataStr, ""); + } + if (exportRst.Contains("操作超时")) + { + order.sendStatus = "发送失败 操作超时"; + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); + Dispatcher.Invoke(new Action(() => + { + ShowOrder(order); + })); + return; + } + System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); + string msg = ""; + string data = ""; + string code = ""; + try + { + xmlDoc.LoadXml(exportRst); //1505不支持的平台类型: WEISHOP + code = xmlDoc["AjaxResult"]["code"].InnerText; + msg = xmlDoc["AjaxResult"]["msg"].InnerText; + //data = xmlDoc["AjaxResult"]["data"].InnerText; + + // 更新微信外采订单信息成功, orderNo:260430-3065512320302571 + } + catch + { + msg = exportRst.ParseToString(); + } + if (code == "0" || code == "1") //if (msg == "SUCCESS") // || msg == "SUCCESS" + { + var sendStatusTmp = string.IsNullOrEmpty(data) ? msg : data; + order.sendStatus = sendStatusTmp; + + if (code == "0" && !order.sendStatus.Contains("微信发货成功")) + order.sendStatus = ("微信发货成功 " + sendStatusTmp).Trim(); + if (code == "1" && !order.sendStatus.Contains("接收成功")) + order.sendStatus = ("接收成功 " + sendStatusTmp).Trim(); + + // 处理特殊情况 如未发货或退货订单 + //if (order.sendStatus == "处理完成" || order.sendStatus == "快递公司和快递单号必须同时提供或同时为空") + // order.sendStatus = "已发送完成"; + if (order.order_status_prompt.Contains("待发货")) // 更新微信外采订单状态成功 + order.sendStatus = "已发送待发货订单"; + if (order.after_sales != null) + order.sendStatus = "已发送售后订单 " + sendStatusTmp; + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); + } + else + { + order.sendStatus = "发送失败 " + (string.IsNullOrEmpty(msg) ? data : msg); + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); + } + Dispatcher.Invoke(new Action(() => + { + ShowOrder(order); + })); + //Thread.Sleep(500); + #endregion + } + + /// + /// 通过服务端批量读取微信售后并触发拼多多售后或显示提示供买手手动退货 + /// + public void MakeWxToPddAfterSales() + { + Task.Run(() => + { + while (isReadBuyerOrder) + { + Thread.Sleep(500); + //break; + } + + foreach (var buyer in GlobalConfig.PDDBuyerLoginList) + { + //postman request POST 'https://po.e57.cn/prod-api/api/oms-api/external_procurement/hasAfterSsale' \ + //--header 'Content-Type: application/json' \ + //--body '{ "platform": "WEISHOP", "startTime": 1774763836, "endTime": "1776050614" , "userAccount": "闲鱼会开车的鱼2343"}' + + JObject body = new JObject(); + body["platform"] = "WEISHOP"; + body["startTime"] = BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddDays(-7)); + body["endTime"] = BaseClass.DateTimeToTimestampSeconds(DateTime.Now); + body["userAccount"] = buyer.buyer_name; + string url = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/hasAfterSsale"; + var getE57AfterSaleRst = HttpResponseWXBLL.e57PostResponse(url, JsonHelper.SerializeObject(body), ""); + if (getE57AfterSaleRst.ParseToString().Contains("success")) + { + try + { + var rstData = getE57AfterSaleRst.Substring(0, getE57AfterSaleRst.IndexOf("")).Substring(getE57AfterSaleRst.IndexOf("") + "".Length); + + List rstStrLst = rstData.Split(new string[] { "},{" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + foreach (var rstStr in rstStrLst) + { + var rstStrTmp = rstStr; + var outOrderNo = BaseRegex.GetStringJson(ref rstStrTmp, "outOrderNo"); + if (outOrderNo.IsNullOrEmpty()) + continue; + var afterSaleId = BaseRegex.GetStringJson(ref rstStrTmp, "afterSaleId"); + var order = lstPddBuyerOrderInfoLite.FirstOrDefault(o => o.order_sn == outOrderNo); + if (order == null) + continue; + + order.wxRefundStatus = order.order_status_prompt.Contains("待发货") ? "待退款" : "待退货"; + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); + Dispatcher.Invoke(new Action(() => + { + ShowOrder(order); + })); + if (chkAutoAfterSale.IsChecked == true) + { + MakeWxToPddAfterSale(order); + } + } + } + catch (Exception ex) + { + } + } + } + }); + } + + /// + /// 处理一条售后 + /// + /// + /// + public string MakeWxToPddAfterSale(PddBuyerOrderLiteInfo order) + { + //if (isReadOrder) + //{ + // BaseMsgForm.ShowError("正再读取订单,请稍候"); + // return; + //} + //// 订单详情页 + ////https://mobile.yangkeduo.com/order.html?order_sn=260417-318525949581688 + //// 退货详情页 + ////https://mobile.yangkeduo.com/complaint.html?order_sn=260417-357103060621688&after_sales_reason=0&after_sales_type=1&after_sales_code=1001 + + if (!order.order_status_prompt.Contains("待发货")) + { + return "{\"success\":false,\"msg\":\"仅未发货单可以自动退货\"}"; + } + + var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == order.buyerId); + var rst = YkdBuyerOrder.GetInitAfterSale(buyer, order.order_sn); + // + var mobile = BaseRegex.GetStringJson(ref rst, "userReceivePhone"); + var applyAmount = BaseRegex.GetIntJson(ref rst, "applyAmount"); + var refundAmount = BaseRegex.GetIntJson(ref rst, "refundAmount"); + var newMaxApplyAmount = BaseRegex.GetIntJson(ref rst, "newMaxApplyAmount"); + var shippingStatus = BaseRegex.GetIntJson(ref rst, "shippingStatus"); + if (shippingStatus == 1 || !rst.Contains("\"shippingStatus\":0,") || !order.order_status_prompt.Contains("待发货")) + { + return "{\"success\":false,\"msg\":\"仅未发货单可以自动退货\"}"; + } + + if (applyAmount == 0) applyAmount = order.order_amount.ParseToInt(); + if (refundAmount == 0) refundAmount = order.order_amount.ParseToInt(); + if (newMaxApplyAmount == 0) newMaxApplyAmount = order.order_amount.ParseToInt(); + if (string.IsNullOrEmpty(mobile)) + { + return "{\"success\":false,\"msg\":\"退货信息获取失败,请检查买手是否掉线\"}"; + } + Thread.Sleep(Randomx.GetId(1000, 2000)); + var afterSaleRst = YkdBuyerOrder.SetOrderAfterSale(buyer, mobile, order.order_sn, applyAmount, refundAmount, newMaxApplyAmount); + if (afterSaleRst.Contains("\"after_sales_status\":1") || afterSaleRst.Contains("该订单已全额退款")) + { + //order.refundStatus = "已完成/退货"; + order.order_status_prompt = "退款成功"; + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); + Dispatcher.Invoke(new Action(() => + { + ShowOrder(order); + })); + PddBuyerAfterSaleLiteInfo afterSale = new PddBuyerAfterSaleLiteInfo(); + afterSale.listItemStatusVO = new ListItemStatusVO(); + afterSale.listItemStatusVO.statusText = "退款成功"; + afterSale.listItemExtraVO = new ListItemExtraVO(); + //afterSale.listItemExtraVO.navToDetailPageUrl = "&order_sn=" + txtForceSendAfterSale.Text.Trim(); + afterSale.listItemExtraVO.navToDetailPageUrl = "&order_sn=" + order.order_sn; + SendAfterSaleE57(afterSale, true); + return "{\"success\":true,\"msg\":\"操作成功\"}"; + } + else + { + var error_msg = BaseRegex.GetStringJson(ref afterSaleRst, "error_msg"); + if (string.IsNullOrEmpty(error_msg)) + error_msg = afterSaleRst; + return "{\"success\":false,\"msg\":\"" + error_msg + "\"}"; + } + } + + /// + /// 将处理的或读取到更新的售后返回服务端接口 + /// + /// + /// + /// + public void SendAfterSaleE57(PddBuyerAfterSaleLiteInfo afterSale, bool resetSendStatus = false, bool isManualSendNoRecordCancelOrder = false) { } + + private void chkHideNoWxIdOrder_CheckedChanged(object sender, RoutedEventArgs e) + { + filterBuyerOrder(); + } + + private void btnFilter_Click(object sender, RoutedEventArgs e) + { + filterBuyerOrder(); + } + + private void dgBuyerOrder_LoadingRow(object sender, DataGridRowEventArgs e) + { + e.Row.Header = e.Row.GetIndex() + 1; + } + } + + public class YkdBuyerOrder + { + public static string GetInitAfterSale(BuyerLoginInfo buyer, string orderSn) + { + string url = "https://mobile.yangkeduo.com/complaint.html?order_sn=" + orderSn + "&after_sales_reason=0&after_sales_type=1&after_sales_code=1001"; + var rst = HttpResponseYkdBLL.YangkeduoGetPageResponse(buyer, url); + return rst; + } + + public static string SetOrderAfterSale(BuyerLoginInfo buyer, string user_phone, string order_sn, int apply_amount, int refund_amount, int new_refund_amount) + { + string url = "https://mobile.yangkeduo.com/proxy/api/after_sales/create?pdduid=" + buyer.buyer_id; + string body = @"{""order_sn"":""260417-318525949581688"",""coupon_return_control_type"":0,""after_sales_type"":1,""user_ship_status"":0,""user_phone"":""17855141112"",""images"":[],""return_coupon_amount"":0,""question_type"":66,""question_desc"":"""",""apply_amount"":1568,""refund_amount"":1568,""new_refund_amount"":1568,""is_lite"":true}"; + body = @"{""order_sn"":""" + order_sn + @""",""coupon_return_control_type"":0,""after_sales_type"":1,""user_ship_status"":0,""user_phone"":""" + user_phone + + @""",""images"":[],""return_coupon_amount"":0,""question_type"":66,""question_desc"":"""",""apply_amount"":" + apply_amount + + @",""refund_amount"":" + refund_amount + @",""new_refund_amount"":" + new_refund_amount + @",""is_lite"":true}"; + + string referer = "https://mobile.yangkeduo.com/complaint.html?order_sn=260417-318525949581688&refer_page_name=order_detail&refer_page_id=10038_1776391960785_p20v9j3op4&refer_page_sn=10038&after_sales_reason=66&after_sales_type=1&after_sales_code=1001"; + referer = "https://mobile.yangkeduo.com/complaint.html?order_sn=" + order_sn + "&refer_page_name=order_detail&&after_sales_reason=66"; + + var rst = HttpResponseYkdBLL.YangkeduoPostResponse(buyer, url, body, referer); + return rst; + } + + public static string GetSearchOrder(BuyerLoginInfo buyer, string orderSn) + { + //1778823980132_ro0aie9x73 + var page_id = "10032_" + BaseClass.DateTimeToTimestampMilliseconds(DateTime.Now) + "_" + Randomx.GetWordNumber(10); + string url = "https://mobile.yangkeduo.com/transac_orders_search_results.html?keyWord=" + orderSn + + "&type=0&main_orders=1&refer_page_name=my_order&refer_page_id=" + page_id + "&refer_page_sn=10032"; + + string refere = "https://mobile.yangkeduo.com/orders.html?type=0&comment_tab=1&combine_orders=1&main_orders=1&refer_page_name=personal&refer_page_id=&refer_page_sn=10001&page_id=" + page_id + "&is_back=1"; + var rst = HttpResponseYkdBLL.YangkeduoGetSearchOrderResponse(buyer, url, refere); + return rst; + } + } + + public class BuyerOrderConfig + { + public bool IsPause = false; + public bool IsAutoAfterSale = true; } } diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml index b1bba65..bdde29b 100644 --- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml @@ -13,8 +13,8 @@ - - + + @@ -27,8 +27,8 @@ - - + + @@ -63,7 +63,7 @@