售后单读取
This commit is contained in:
1 parent
c76e5c9663
commit
b63dacfe7e
4 files changed
+1713
-144
No files matched your search
@@ -67,11 +67,12 @@
|
||||
<!-- 资源文件:SDK 样式工程默认不会把图片/图标作为 Resource,这里按原工程显式声明 -->
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\**\*" />
|
||||
<None Remove="Ctrls\BuyerCtrls\Resources\pdd_afterorder.js" />
|
||||
<None Remove="Ctrls\PDDInvoice\Resources\invoice.js" />
|
||||
<None Remove="Ctrls\PDDInvoice\Resources\order.js" />
|
||||
<Resource Include="29wx.ico" />
|
||||
<Resource Include="29_common_icon.ico" />
|
||||
<Resource Include="Ctrls\OrderCtrls\Resources\tbAutoAddress.js" />
|
||||
<Resource Include="Ctrls\BuyerCtrls\Resources\pdd_afterorder.js" />
|
||||
<Resource Include="Ctrls\PDDInvoice\Resources\invoice.js" />
|
||||
<Resource Include="Ctrls\PDDInvoice\Resources\order.js" />
|
||||
<Resource Include="gear.ico" />
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>net462</TargetFramework>
|
||||
<RootNamespace>_29WxOrderWpf</RootNamespace>
|
||||
<AssemblyName>29WxFindOrder</AssemblyName>
|
||||
<UseWPF>true</UseWPF>
|
||||
<ApplicationIcon>gear.ico</ApplicationIcon>
|
||||
<LangVersion>12</LangVersion>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<OutputPath>..\bin\</OutputPath>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
|
||||
<Platforms>AnyCPU;x64</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>..\..\KJD Cef138\Bin\</OutputPath>
|
||||
<DefineConstants>TRACE;RELEASE</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CefSharp.Common" Version="138.0.340" />
|
||||
<PackageReference Include="CefSharp.Wpf" Version="138.0.340" />
|
||||
<PackageReference Include="chromiumembeddedframework.runtime.win-x64" Version="138.0.34" />
|
||||
<PackageReference Include="chromiumembeddedframework.runtime.win-x86" Version="138.0.34" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="9.0.1" />
|
||||
<PackageReference Include="WPFCommon" Version="1.2.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Management" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Xaml" />
|
||||
<Reference Include="WindowsBase" />
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="NaiBa.Util">
|
||||
<HintPath>..\DllReference\NaiBa.Util.dll</HintPath>
|
||||
<Private>true</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AllBase\29WxOrderAllBase.csproj" />
|
||||
<ProjectReference Include="..\OrderSupportTicket\OrderSupportTicket.csproj" />
|
||||
<ProjectReference Include="..\Work\29WxOrderWork.csproj" />
|
||||
<ProjectReference Include="..\WxOrder.Framework\WxOrder.Framework.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- 资源文件:SDK 样式工程默认不会把图片/图标作为 Resource,这里按原工程显式声明 -->
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\**\*" />
|
||||
<None Remove="Ctrls\PDDInvoice\Resources\invoice.js" />
|
||||
<None Remove="Ctrls\PDDInvoice\Resources\order.js" />
|
||||
<Resource Include="29wx.ico" />
|
||||
<Resource Include="29_common_icon.ico" />
|
||||
<Resource Include="Ctrls\PDDInvoice\Resources\invoice.js" />
|
||||
<Resource Include="Ctrls\PDDInvoice\Resources\order.js" />
|
||||
<Resource Include="gear.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Update="Ctrls\BuyerCtrls\PddBuyOrderCtrl.xaml.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Update="Views\ChangePickNoView.xaml.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Common\" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -11,12 +11,16 @@ using AllBase.Util;
|
||||
using CefSharp;
|
||||
using CefSharp.DevTools.LayerTree;
|
||||
using CefSharp.DevTools.Network;
|
||||
using CefSharp.DevTools.Page;
|
||||
using CefSharp.Handler;
|
||||
using CefSharp.Wpf;
|
||||
using NaiBa.Util;
|
||||
using NaiBa.Util.Extension;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NPOI.OpenXmlFormats.Dml.Chart;
|
||||
using NPOI.SS.Formula.Functions;
|
||||
using NPOI.XWPF.UserModel;
|
||||
using Org.BouncyCastle.Utilities;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
@@ -25,6 +29,7 @@ using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using System.Runtime.Remoting.Contexts;
|
||||
using System.Security.Cryptography;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.Security.Policy;
|
||||
@@ -47,6 +52,7 @@ using Work._29Tools.CefTools;
|
||||
using Work.BaseForms;
|
||||
using Work.BuyUsers;
|
||||
using WxOrder.Framework.Commons;
|
||||
using WxOrder.Framework.Helpers;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Tab;
|
||||
|
||||
namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
@@ -79,7 +85,9 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
PropertyChanged?.Invoke(this, propertyChangedEventArgs);
|
||||
}
|
||||
|
||||
Dictionary<BuyerLoginInfo, PddPickInfo> dicPddPickInfo = new Dictionary<BuyerLoginInfo, PddPickInfo>();
|
||||
Dictionary<BuyerLoginInfo, string> dicPddAftersaleNextQueryCreatedAt = new Dictionary<BuyerLoginInfo, string>();
|
||||
|
||||
Dictionary <BuyerLoginInfo, PddPickInfo> dicPddPickInfo = new Dictionary<BuyerLoginInfo, PddPickInfo>();
|
||||
ConcurrentList<yh_sync_logistics> lstSyncLogistics = new ConcurrentList<yh_sync_logistics>();
|
||||
|
||||
ChromiumWebBrowser cefWebBrowser = null;
|
||||
@@ -251,37 +259,37 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
|
||||
void AutoGetPddOrder()
|
||||
{
|
||||
Task.Run(() =>
|
||||
{
|
||||
Thread.Sleep(5000);
|
||||
while (true)
|
||||
{
|
||||
if (!buyerReadOrderConfig.IsAutoReadOrder)
|
||||
{
|
||||
Thread.Sleep(1000);
|
||||
Dispatcher.Invoke(new Action(() =>
|
||||
{
|
||||
btnSearch.Content = "自动刷新暂停中";
|
||||
}));
|
||||
continue;
|
||||
}
|
||||
Task.Run(async () =>
|
||||
{
|
||||
Thread.Sleep(5000);
|
||||
while (true)
|
||||
{
|
||||
if (!buyerReadOrderConfig.IsAutoReadOrder)
|
||||
{
|
||||
Thread.Sleep(1000);
|
||||
Dispatcher.Invoke(new Action(() =>
|
||||
{
|
||||
btnSearch.Content = "自动刷新暂停中";
|
||||
}));
|
||||
continue;
|
||||
}
|
||||
|
||||
if (DateTime.Now > nextGetOrderTime)
|
||||
{
|
||||
GetOrderAndAfterSale();
|
||||
}
|
||||
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;
|
||||
}));
|
||||
}
|
||||
});
|
||||
if (DateTime.Now > nextGetOrderTime)
|
||||
{
|
||||
await GetOrderAndAfterSale();
|
||||
}
|
||||
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;
|
||||
}));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void InitCef()
|
||||
@@ -460,7 +468,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
if (data1.Contains("listItemStatusVo") && data1.Contains("afterSalesId") && data1.Contains("statusText"))
|
||||
if (data1.Contains("listItemStatusVo") && data1.Contains("afterSalesId") && data1.Contains("statusText"))
|
||||
{
|
||||
var cookie2 = cookie1.Replace(";", "&").Replace(" ", "");
|
||||
var jsonDatas = BaseRegex.GetJsonObjStrJson(ref data1, "listDataMap");
|
||||
@@ -470,11 +478,15 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
if (!string.IsNullOrEmpty(buyerId) && !string.IsNullOrEmpty(jsonData))
|
||||
{
|
||||
try
|
||||
{
|
||||
var jObj = JsonHelper.JObjectParse(jsonData);
|
||||
{
|
||||
var jObj = JsonHelper.JObjectParse(jsonData);
|
||||
jObj["result"] = jObj["all"];
|
||||
jObj["result"]["listItemVOList"] = jObj["result"]["list"];
|
||||
CefReadBuyerAfterSale(buyerId, JsonHelper.SerializeObject(jObj));
|
||||
|
||||
var nextQueryCreatedAt = BaseRegex.GetStringJson(ref data1, "nextQueryCreatedAt");
|
||||
jObj["result"]["nextQueryCreatedAt"] = nextQueryCreatedAt;
|
||||
|
||||
CefReadBuyerAfterSale(buyerId, JsonHelper.SerializeObject(jObj));
|
||||
}
|
||||
catch
|
||||
{
|
||||
@@ -484,8 +496,8 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
}
|
||||
});
|
||||
}
|
||||
// 读取售后
|
||||
if (url1.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/blade/after_sales_list"))
|
||||
// 读取售后
|
||||
if (url1.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/blade/after_sales_list"))
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
@@ -1080,9 +1092,12 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
if (buyer == null)
|
||||
return;
|
||||
|
||||
lastCefReadOrderTime = DateTime.Now;
|
||||
lastCefReadOrderTime = DateTime.Now;
|
||||
|
||||
if (data.Contains("\"listItemVOList\":[]") || data.Contains("\"hasNextQuery\":false"))
|
||||
var nextQueryCreatedAt = BaseRegex.GetStringJson(ref data, "nextQueryCreatedAt");
|
||||
dicPddAftersaleNextQueryCreatedAt[buyer] = nextQueryCreatedAt;
|
||||
|
||||
if (data.Contains("\"listItemVOList\":[]") || data.Contains("\"hasNextQuery\":false"))
|
||||
//if (!data.Contains("/complaints_new_detail.html?after_sales_id="))
|
||||
{
|
||||
Dispatcher.Invoke(new Action(() =>
|
||||
@@ -1480,21 +1495,25 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
}
|
||||
}
|
||||
|
||||
private void btnSearch_Click(object sender, RoutedEventArgs e)
|
||||
private async void btnSearch_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
GetOrderAndAfterSale();
|
||||
await GetOrderAndAfterSale();
|
||||
}
|
||||
|
||||
void GetOrderAndAfterSale()
|
||||
{
|
||||
ScrollGetPddOrder();
|
||||
//MakeWxToPddAfterSales();
|
||||
|
||||
nextGetOrderTime = DateTime.Now.AddMinutes(25);
|
||||
}
|
||||
|
||||
void JsGetPddOrder()
|
||||
async Task GetOrderAndAfterSale()
|
||||
{
|
||||
await JsGetPddOrder();
|
||||
//ScrollGetPddOrder();
|
||||
//MakeWxToPddAfterSales();
|
||||
|
||||
nextGetOrderTime = DateTime.Now.AddMinutes(25);
|
||||
}
|
||||
|
||||
async Task JsGetPddOrder()
|
||||
{
|
||||
if (isReadBuyerOrder)
|
||||
return;
|
||||
|
||||
isReadBuyerOrder = true;
|
||||
lstPddBuyerOrderVoidAfterSaleOrderSn.Clear();
|
||||
|
||||
@@ -1502,7 +1521,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
cancellationTokenSource.Cancel();
|
||||
cancellationTokenSource = new CancellationTokenSource();
|
||||
|
||||
Task.Run(() =>
|
||||
await Task.Run(async () =>
|
||||
{
|
||||
var tokenSource = cancellationTokenSource;
|
||||
while (isInitBuyerOrder || isInitBuyerAfterSale)
|
||||
@@ -1561,9 +1580,11 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
var t = WPFCEFBrowser.SetCookieAsync(JsonHelper.SerializeObject(cookieLst), buyer.wpf_browser.GetCookieManager(null));
|
||||
t.Wait();
|
||||
|
||||
// 进入个人主页
|
||||
buyer.wpf_browser.Load("https://mobile.yangkeduo.com/personal.html");
|
||||
Thread.Sleep(Randomx.GetId(2000, 3000));
|
||||
|
||||
// 获取取件码
|
||||
buyer.wpf_browser.Load("https://mobile.yangkeduo.com/psnl_goods_help.html?_t_module_name=assistant_search&refer_scene=no_pickup_package_express&refer_page_name=goods_express");
|
||||
Thread.Sleep(Randomx.GetId(2000, 3000));
|
||||
|
||||
@@ -1574,76 +1595,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
#region 售后
|
||||
if (1 == 1)
|
||||
{
|
||||
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");
|
||||
|
||||
Dispatcher.Invoke(new Action(() =>
|
||||
{
|
||||
Panel.SetZIndex(buyer.wpf_browser, maxZIndex++);
|
||||
if (buyer.IsSelect != true)
|
||||
{
|
||||
foreach (var b in GlobalConfig.PDDBuyerLoginList)
|
||||
{
|
||||
b.IsSelect = false;
|
||||
}
|
||||
buyer.IsSelect = true;
|
||||
}
|
||||
}));
|
||||
|
||||
Thread.Sleep(Randomx.GetId(2000, 3000));
|
||||
|
||||
Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = buyer.buyer_nick + " 售后读取中"; }));
|
||||
BindBuyerOrderReadInfo(buyer, "正在读取售后");
|
||||
|
||||
top = 0;
|
||||
times = 0;
|
||||
lastCefReadOrderTime = DateTime.Now;
|
||||
while (currentReadBuyer == readBuyer)
|
||||
{
|
||||
if (isSkipNext)
|
||||
break;
|
||||
|
||||
if (tokenSource.IsCancellationRequested)
|
||||
{
|
||||
BindBuyerOrderReadInfo(buyer, "已取消读取");
|
||||
break;
|
||||
}
|
||||
|
||||
if (lastCefReadOrderTime < DateTime.Now.AddSeconds(-30))
|
||||
{
|
||||
PddMobileLoginViewModel.CheckBuyerLogin(new List<BuyerLoginInfo>() { buyer });
|
||||
if (buyer.status != "在线")
|
||||
{
|
||||
BindBuyerOrderReadInfo(buyer, "店铺掉线");
|
||||
break;
|
||||
}
|
||||
BindBuyerOrderReadInfo(buyer, "停滞时间超过30秒,跳过");
|
||||
break;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
await JsGetPddAftersaleOrder(buyer, tokenSource);
|
||||
if (tokenSource.IsCancellationRequested)
|
||||
{
|
||||
BindBuyerOrderReadInfo(buyer, "已取消读取");
|
||||
@@ -1653,11 +1605,13 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
}
|
||||
#endregion
|
||||
|
||||
// 待发货
|
||||
#region 待发货
|
||||
readBuyer = buyer.buyer_id;
|
||||
currentReadBuyer = buyer.buyer_id;
|
||||
buyer.wpf_browser.Load("https://mobile.yangkeduo.com/orders.html?type=2");
|
||||
|
||||
BindBuyerOrderReadInfo(buyer, "正在读取待发货");
|
||||
|
||||
Dispatcher.Invoke(new Action(() =>
|
||||
{
|
||||
Panel.SetZIndex(buyer.wpf_browser, maxZIndex++);
|
||||
@@ -1670,12 +1624,8 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
buyer.IsSelect = true;
|
||||
}
|
||||
}));
|
||||
|
||||
Thread.Sleep(Randomx.GetId(2000, 3000));
|
||||
|
||||
Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = buyer.buyer_nick + " 待发货读取中"; }));
|
||||
BindBuyerOrderReadInfo(buyer, "正在读取待发货");
|
||||
|
||||
top = 0;
|
||||
lastCefReadOrderTime = DateTime.Now;
|
||||
while (currentReadBuyer == readBuyer)
|
||||
@@ -1713,11 +1663,6 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
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' // 可选,使滚动平滑
|
||||
@@ -1742,15 +1687,15 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
break;
|
||||
}
|
||||
Thread.Sleep(Randomx.GetId(2000, 3000));
|
||||
#endregion
|
||||
|
||||
Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = buyer.buyer_nick + " 已发货读取中"; }));
|
||||
BindBuyerOrderReadInfo(buyer, "正在读取已发货");
|
||||
|
||||
// 已发货
|
||||
#region 已发货
|
||||
readBuyer = buyer.buyer_id;
|
||||
currentReadBuyer = buyer.buyer_id;
|
||||
buyer.wpf_browser.Load("https://mobile.yangkeduo.com/orders.html?type=3");
|
||||
|
||||
BindBuyerOrderReadInfo(buyer, "正在读取已发货");
|
||||
|
||||
Dispatcher.Invoke(new Action(() =>
|
||||
{
|
||||
Panel.SetZIndex(buyer.wpf_browser, maxZIndex++);
|
||||
@@ -1763,7 +1708,6 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
buyer.IsSelect = true;
|
||||
}
|
||||
}));
|
||||
|
||||
Thread.Sleep(Randomx.GetId(2000, 3000));
|
||||
|
||||
top = 0;
|
||||
@@ -1795,11 +1739,6 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
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' // 可选,使滚动平滑
|
||||
@@ -1823,6 +1762,8 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
BindBuyerOrderReadInfo(buyer, "已取消读取");
|
||||
break;
|
||||
}
|
||||
Thread.Sleep(Randomx.GetId(2000, 3000));
|
||||
#endregion
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -1832,15 +1773,116 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
||||
continue;
|
||||
}
|
||||
}
|
||||
Thread.Sleep(Randomx.GetId(6000, 8000));
|
||||
Thread.Sleep(Randomx.GetId(3000, 5000));
|
||||
}
|
||||
isReadBuyerOrder = false;
|
||||
|
||||
Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = "订单读取已结束,等待下次读取"; }));
|
||||
BindBuyerOrderReadInfo(null, "订单读取已结束,等待下次读取");
|
||||
}, cancellationTokenSource.Token);
|
||||
}
|
||||
|
||||
public static async Task<bool> IsAftersaleJsInstalledAsync(IFrame frame, int timeoutMs = 3000)
|
||||
{
|
||||
var deadline = DateTime.Now.AddMilliseconds(timeoutMs);
|
||||
while (DateTime.Now < deadline)
|
||||
{
|
||||
var r = await frame.EvaluateScriptAsync("!!(window.PDAfterSale && window.PDAfterSale.__installed)")
|
||||
.ConfigureAwait(false);
|
||||
if (r != null && r.Success && r.Result is bool && (bool)r.Result) return true;
|
||||
await Task.Delay(100).ConfigureAwait(false);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
async Task JsGetPddAftersaleOrder(BuyerLoginInfo buyer, CancellationTokenSource tokenSource)
|
||||
{
|
||||
var 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");
|
||||
|
||||
BindBuyerOrderReadInfo(buyer, "正在读取售后");
|
||||
|
||||
Dispatcher.Invoke(new Action(() =>
|
||||
{
|
||||
Panel.SetZIndex(buyer.wpf_browser, maxZIndex++);
|
||||
if (buyer.IsSelect != true)
|
||||
{
|
||||
foreach (var b in GlobalConfig.PDDBuyerLoginList.ToList())
|
||||
{
|
||||
b.IsSelect = false;
|
||||
}
|
||||
buyer.IsSelect = true;
|
||||
}
|
||||
}));
|
||||
Thread.Sleep(Randomx.GetId(2000, 3000));
|
||||
|
||||
var client = buyer.wpf_browser.GetDevToolsClient();
|
||||
if (client == null)
|
||||
return;
|
||||
|
||||
// 注入触发翻滚的js事件
|
||||
string address = "";
|
||||
Dispatcher.Invoke(() => { address = buyer.wpf_browser.Address; });
|
||||
if (address.StartsWith("https://mobile.yangkeduo.com/complaint_list.html"))
|
||||
{
|
||||
string content = ResourceHelper.GetResourceText("/Ctrls/BuyerCtrls/Resources/pdd_afterorder.js", "29WxFindOrder");
|
||||
if (string.IsNullOrEmpty(content))
|
||||
return;
|
||||
await client.Runtime.EvaluateAsync(content, null, true, null, null, true, null, true);
|
||||
|
||||
var frame = cefWebBrowser.GetMainFrame();
|
||||
if (await IsAftersaleJsInstalledAsync(frame) != true)
|
||||
{
|
||||
BindBuyerOrderReadInfo(buyer, "售后单读取预加载失败!");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
lastCefReadOrderTime = DateTime.Now;
|
||||
string tempNextQueryCreatedAt = "";
|
||||
while (currentReadBuyer == readBuyer)
|
||||
{
|
||||
if (isSkipNext)
|
||||
break;
|
||||
|
||||
if (tokenSource.IsCancellationRequested)
|
||||
{
|
||||
BindBuyerOrderReadInfo(buyer, "已取消读取");
|
||||
break;
|
||||
}
|
||||
|
||||
if (lastCefReadOrderTime < DateTime.Now.AddSeconds(-30))
|
||||
{
|
||||
PddMobileLoginViewModel.CheckBuyerLogin(new List<BuyerLoginInfo>() { buyer });
|
||||
if (buyer.status != "在线")
|
||||
{
|
||||
BindBuyerOrderReadInfo(buyer, "店铺掉线");
|
||||
break;
|
||||
}
|
||||
BindBuyerOrderReadInfo(buyer, "停滞时间超过30秒,跳过");
|
||||
break;
|
||||
}
|
||||
|
||||
if (!dicPddAftersaleNextQueryCreatedAt.ContainsKey(buyer))
|
||||
dicPddAftersaleNextQueryCreatedAt[buyer] = "";
|
||||
if (dicPddAftersaleNextQueryCreatedAt[buyer] == tempNextQueryCreatedAt)
|
||||
{
|
||||
await Task.Delay(500);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
tempNextQueryCreatedAt = dicPddAftersaleNextQueryCreatedAt[buyer];
|
||||
|
||||
//1789123589
|
||||
//string jsStr = $"PDDOrders.trigger({{offset:'MO-01-{lastOrderSN}',type:0,size:10,mode:'store'}})";
|
||||
string jsStr = "PDAfterSale.trigger({cursor:'" + dicPddAftersaleNextQueryCreatedAt[buyer] + "',tab:'all'})";
|
||||
await client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
|
||||
await Task.Delay(Randomx.GetId(1000, 3000));
|
||||
}
|
||||
}
|
||||
|
||||
void ScrollGetPddOrder()
|
||||
{
|
||||
isReadBuyerOrder = true;
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user