diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..1ff0c42
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,63 @@
+###############################################################################
+# Set default behavior to automatically normalize line endings.
+###############################################################################
+* text=auto
+
+###############################################################################
+# Set default behavior for command prompt diff.
+#
+# This is need for earlier builds of msysgit that does not have it on by
+# default for csharp files.
+# Note: This is only used by command line
+###############################################################################
+#*.cs diff=csharp
+
+###############################################################################
+# Set the merge driver for project and solution files
+#
+# Merging from the command prompt will add diff markers to the files if there
+# are conflicts (Merging from VS is not affected by the settings below, in VS
+# the diff markers are never inserted). Diff markers may cause the following
+# file extensions to fail to load in VS. An alternative would be to treat
+# these files as binary and thus will always conflict and require user
+# intervention with every merge. To do so, just uncomment the entries below
+###############################################################################
+#*.sln merge=binary
+#*.csproj merge=binary
+#*.vbproj merge=binary
+#*.vcxproj merge=binary
+#*.vcproj merge=binary
+#*.dbproj merge=binary
+#*.fsproj merge=binary
+#*.lsproj merge=binary
+#*.wixproj merge=binary
+#*.modelproj merge=binary
+#*.sqlproj merge=binary
+#*.wwaproj merge=binary
+
+###############################################################################
+# behavior for image files
+#
+# image files are treated as binary by default.
+###############################################################################
+#*.jpg binary
+#*.png binary
+#*.gif binary
+
+###############################################################################
+# diff behavior for common document formats
+#
+# Convert binary document formats to text before diffing them. This feature
+# is only available from the command line. Turn it on by uncommenting the
+# entries below.
+###############################################################################
+#*.doc diff=astextplain
+#*.DOC diff=astextplain
+#*.docx diff=astextplain
+#*.DOCX diff=astextplain
+#*.dot diff=astextplain
+#*.DOT diff=astextplain
+#*.pdf diff=astextplain
+#*.PDF diff=astextplain
+#*.rtf diff=astextplain
+#*.RTF diff=astextplain
diff --git a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml
index 128f3ae..8be4995 100644
--- a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml
+++ b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml
@@ -98,9 +98,9 @@
@@ -273,7 +273,8 @@
Margin="180,0,0,0"
VerticalAlignment="Center"
Panel.ZIndex="1"
- Content="正在操作:" />
+ d:Content="正在操作:"
+ Content="{Binding LblMsgStr}" />
/// PDDBuyerOrderReadCtrl.xaml 的交互逻辑
///
- public partial class PDDBuyerOrderReadCtrl : UserControl
+ public partial class PDDBuyerOrderReadCtrl : UserControl, INotifyPropertyChanged
{
private static readonly object locker = new object();
+ string lblMsgStr = "当前没有任何操作";
+ public string LblMsgStr
+ {
+ get { return lblMsgStr; }
+ set
+ {
+ if (lblMsgStr != value)
+ {
+ lblMsgStr = value;
+ OnPropertyChanged(new PropertyChangedEventArgs("LblMsgStr"));
+ }
+ }
+ }
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ private void OnPropertyChanged(PropertyChangedEventArgs propertyChangedEventArgs)
+ {
+ PropertyChanged?.Invoke(this, propertyChangedEventArgs);
+ }
+
Dictionary dicPddPickInfo = new Dictionary();
ConcurrentList lstSyncLogistics = new ConcurrentList();
ChromiumWebBrowser cefWebBrowser = null;
- public string cefAddress = "";
+ ChromiumWebBrowser cefShowShopOrderLstWebBrowser = null;
+ public string cefAddress = "";
public static ConcurrentList lstPddBuyerOrderInfoLite { get; set; } = new ConcurrentList();
public static ObservableCollection lstFilterPddBuyerOrderInfoLite { get; set; } = new ObservableCollection();
public static ConcurrentList lstPddBuyerAfterSaleInfoLite { get; set; } = new ConcurrentList();
public static ObservableCollectionThreadSafe lstFilterPddBuyerAfterSaleInfoLite { get; set; } = new ObservableCollectionThreadSafe();
public static ConcurrentList lstPddBuyerOrderVoidAfterSaleOrderSn { get; set; } = new ConcurrentList();
public CancellationTokenSource cancellationTokenSource { get; set; } = new CancellationTokenSource();
- //public ChromiumWebBrowser cefWebBrowser = null;
public BuyerReadOrderConfig buyerReadOrderConfig = new BuyerReadOrderConfig();
public DateTime nextGetOrderTime = DateTime.MinValue;
public DateTime lastCefReadOrderTime = DateTime.Now;
@@ -105,7 +128,9 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
public PDDBuyerOrderReadCtrl()
{
InitializeComponent();
- }
+
+ this.lblMsg.DataContext = this;
+ }
void filterBuyerOrder()
{
@@ -157,8 +182,9 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
- {
- this.lbPddBuyer.ItemsSource = GlobalConfig.PDDBuyerLoginList;
+ {
+ //this.DataContext = this;
+ this.lbPddBuyer.ItemsSource = GlobalConfig.PDDBuyerLoginList;
buyerReadOrderConfig = NaiBa.Util.Helper.ConfigHelper.LoadConfig("pdd_buyer_read_order_config");
if (buyerReadOrderConfig == null)
@@ -262,24 +288,46 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
{
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);
- }));
- }
+ Thread.Sleep(1);
+ Dispatcher.Invoke(new Action(() =>
+ {
+ if (cefWebBrowser == null)
+ {
+ cefWebBrowser = WPFCEFBrowser.CreateChromiumWebBrowser("about:blank", false);
+ 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 CefKeyboardHandler();
+ cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd;
+ cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged;
+ cefWebBrowser.LoadError += CefWebBrowser_LoadError;
+ Grid.SetRow(cefWebBrowser, 0);
+ this.GridCef.Children.Add(cefWebBrowser);
+ }
+ if (buyer.wpf_browser == null)
+ buyer.wpf_browser = cefWebBrowser;
+
+ if (cefShowShopOrderLstWebBrowser == null)
+ {
+ cefShowShopOrderLstWebBrowser = WPFCEFBrowser.CreateChromiumWebBrowser("about:blank", false);
+ LocalResourceRequestHandler resourceRequestHandler = new LocalResourceRequestHandler();
+ resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete;
+ resourceRequestHandler.BeforeResourceLoadEvent += RequestHandler_BeforeResourceLoad;
+ cefShowShopOrderLstWebBrowser.RequestHandler = new LocalRequestHandler(resourceRequestHandler);
+ var lifeSapnHandler = new LocalLifeSpanHandler(PopWindowType.SelfWindow);
+ cefShowShopOrderLstWebBrowser.LifeSpanHandler = lifeSapnHandler;
+ cefShowShopOrderLstWebBrowser.KeyboardHandler = new CefKeyboardHandler();
+ cefShowShopOrderLstWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd;
+ cefShowShopOrderLstWebBrowser.AddressChanged += CefWebBrowser_AddressChanged;
+ cefShowShopOrderLstWebBrowser.LoadError += CefWebBrowser_LoadError;
+ Grid.SetRow(cefShowShopOrderLstWebBrowser, 0);
+ this.GridCef.Children.Add(cefShowShopOrderLstWebBrowser);
+ }
+ }));
+ }
}
private void CefWebBrowser_LoadError(object sender, LoadErrorEventArgs e)
@@ -317,11 +365,17 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
var noPickupPackageData = BaseRegex.GetJsonObjStrJson(ref data1, "noPickupPackageData").FirstOrDefault();
if (!noPickupPackageData.IsNullOrEmpty() && send1 is ChromiumWebBrowser cef)
{
- var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(buy => buy.wpf_browser == cef);
- if (buyer != null)
+ var cookies = WPFCEFBrowser.GetCookieList("yangkeduo.com", cef.GetCookieManager(null));
+ var pddUserId = cookies.FirstOrDefault(c => c.Name == "pdd_user_id")?.Value;
+
+ if (!string.IsNullOrEmpty(pddUserId))
{
- dicPddPickInfo[buyer] = JsonHelper.DeserializeJsonToObject(noPickupPackageData);
- SetPickUpNo(dicPddPickInfo[buyer]);
+ var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(buy => buy.buyer_id == pddUserId);
+ if (buyer != null)
+ {
+ dicPddPickInfo[buyer] = JsonHelper.DeserializeJsonToObject(noPickupPackageData);
+ SetPickUpNo(dicPddPickInfo[buyer]);
+ }
}
}
}
@@ -393,8 +447,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}
// 读订单
- if (/*(cefAddress.Contains("orders.html")) &&*/ url1.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/aristotle/order_list_v"))
- //https://mobile.yangkeduo.com/proxy/api/api/aristotle/order_list_v4?pdduid=6766109923730
+ if (/*(cefAddress.Contains("orders.html")) &&*/ url1.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/aristotle/order_list_v")) //https://mobile.yangkeduo.com/proxy/api/api/aristotle/order_list_v4?pdduid=6766109923730
{
await Task.Run(() =>
{
@@ -1411,7 +1464,8 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
TimeSpan PauseTick = new TimeSpan(1);
- private void chkAutoReadBuyerOrder_CheckedChanged(object sender, RoutedEventArgs e)
+
+ private void chkAutoReadBuyerOrder_CheckedChanged(object sender, RoutedEventArgs e)
{
if (isLoad)
{
@@ -1433,13 +1487,361 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
void GetOrderAndAfterSale()
{
- GetPddOrder();
+ ScrollGetPddOrder();
//MakeWxToPddAfterSales();
nextGetOrderTime = DateTime.Now.AddMinutes(25);
}
- void GetPddOrder()
+ void JsGetPddOrder()
+ {
+ isReadBuyerOrder = true;
+ lstPddBuyerOrderVoidAfterSaleOrderSn.Clear();
+
+ if (cancellationTokenSource != null)
+ cancellationTokenSource.Cancel();
+ cancellationTokenSource = new CancellationTokenSource();
+
+ Task.Run(() =>
+ {
+ var tokenSource = cancellationTokenSource;
+ while (isInitBuyerOrder || isInitBuyerAfterSale)
+ {
+ if (tokenSource.IsCancellationRequested)
+ {
+ BindBuyerOrderReadInfo(null, "已取消读取");
+ break;
+ }
+ Thread.Sleep(500);
+ }
+
+ currentReadBuyer = "";
+
+ foreach (var buyer in GlobalConfig.PDDBuyerLoginList)
+ {
+ 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;
+ }
+ }));
+
+ if (tokenSource.IsCancellationRequested)
+ break;
+
+ PddMobileLoginViewModel.CheckBuyerLogin(new List() { buyer });
+ if (buyer.status != "在线")
+ continue;
+
+ try
+ {
+ bool isInitial = false;
+ while (isInitial == false)
+ {
+ Thread.Sleep(100);
+ Dispatcher.Invoke(new Action(() =>
+ {
+ if (buyer.wpf_browser != null && buyer.wpf_browser.IsBrowserInitialized)
+ {
+ 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));
+ 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));
+
+ string readBuyer = "";
+ int top = 0;
+ int times = 0;
+
+ #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() { 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);
+ }
+ }
+ if (tokenSource.IsCancellationRequested)
+ {
+ BindBuyerOrderReadInfo(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");
+
+ 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;
+ 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() { buyer });
+ if (buyer.status != "在线")
+ {
+ BindBuyerOrderReadInfo(buyer, "店铺掉线");
+ break;
+ }
+ BindBuyerOrderReadInfo(buyer, "停滞时间超过30秒,跳过");
+ break;
+ }
+
+ if (times % 100 == 0)
+ {
+ PddMobileLoginViewModel.CheckBuyerLogin(new List() { buyer });
+ }
+ if (buyer.status != "在线")
+ break;
+ times++;
+
+ 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 (isSkipNext)
+ {
+ isSkipNext = false;
+ continue;
+ }
+ if (tokenSource.IsCancellationRequested)
+ {
+ BindBuyerOrderReadInfo(buyer, "已取消读取");
+ break;
+ }
+ Thread.Sleep(Randomx.GetId(2000, 3000));
+
+ Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = buyer.buyer_nick + " 已发货读取中"; }));
+ BindBuyerOrderReadInfo(buyer, "正在读取已发货");
+
+ // 已发货
+ readBuyer = buyer.buyer_id;
+ currentReadBuyer = buyer.buyer_id;
+ buyer.wpf_browser.Load("https://mobile.yangkeduo.com/orders.html?type=3");
+
+ 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));
+
+ top = 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() { 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);
+ }
+ }
+ if (isSkipNext)
+ {
+ isSkipNext = false;
+ continue;
+ }
+ if (tokenSource.IsCancellationRequested)
+ {
+ BindBuyerOrderReadInfo(buyer, "已取消读取");
+ break;
+ }
+ }
+ catch (Exception ex)
+ {
+ if (isSkipNext)
+ {
+ isSkipNext = false;
+ continue;
+ }
+ }
+ Thread.Sleep(Randomx.GetId(6000, 8000));
+ }
+ isReadBuyerOrder = false;
+
+ Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = "订单读取已结束,等待下次读取"; }));
+ BindBuyerOrderReadInfo(null, "订单读取已结束,等待下次读取");
+ }, cancellationTokenSource.Token);
+ }
+
+ void ScrollGetPddOrder()
{
isReadBuyerOrder = true;
lstPddBuyerOrderVoidAfterSaleOrderSn.Clear();
@@ -1455,7 +1857,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
{
if (tokenSource.IsCancellationRequested)
{
- BindBuyer(null, "已取消读取");
+ BindBuyerOrderReadInfo(null, "已取消读取");
break;
}
Thread.Sleep(500);
@@ -1485,17 +1887,6 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
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;
@@ -1518,13 +1909,13 @@ 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/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));
-
buyer.wpf_browser.Load("https://mobile.yangkeduo.com/personal.html");
Thread.Sleep(Randomx.GetId(2000, 3000));
- string readBuyer = "";
+ 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));
+
+ string readBuyer = "";
int top = 0;
int times = 0;
@@ -1551,7 +1942,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
Thread.Sleep(Randomx.GetId(2000, 3000));
Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = buyer.buyer_nick + " 售后读取中"; }));
- BindBuyer(buyer, "正在读取售后");
+ BindBuyerOrderReadInfo(buyer, "正在读取售后");
top = 0;
times = 0;
@@ -1563,7 +1954,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
if (tokenSource.IsCancellationRequested)
{
- BindBuyer(buyer, "已取消读取");
+ BindBuyerOrderReadInfo(buyer, "已取消读取");
break;
}
@@ -1572,10 +1963,10 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
PddMobileLoginViewModel.CheckBuyerLogin(new List() { buyer });
if (buyer.status != "在线")
{
- BindBuyer(buyer, "店铺掉线");
+ BindBuyerOrderReadInfo(buyer, "店铺掉线");
break;
}
- BindBuyer(buyer, "停滞时间超过30秒,跳过");
+ BindBuyerOrderReadInfo(buyer, "停滞时间超过30秒,跳过");
break;
}
@@ -1603,7 +1994,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}
if (tokenSource.IsCancellationRequested)
{
- BindBuyer(buyer, "已取消读取");
+ BindBuyerOrderReadInfo(buyer, "已取消读取");
break;
}
Thread.Sleep(Randomx.GetId(2000, 3000));
@@ -1631,7 +2022,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
Thread.Sleep(Randomx.GetId(2000, 3000));
Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = buyer.buyer_nick + " 待发货读取中"; }));
- BindBuyer(buyer, "正在读取待发货");
+ BindBuyerOrderReadInfo(buyer, "正在读取待发货");
top = 0;
lastCefReadOrderTime = DateTime.Now;
@@ -1642,7 +2033,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
if (tokenSource.IsCancellationRequested)
{
- BindBuyer(buyer, "已取消读取");
+ BindBuyerOrderReadInfo(buyer, "已取消读取");
break;
}
@@ -1651,10 +2042,10 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
PddMobileLoginViewModel.CheckBuyerLogin(new List() { buyer });
if (buyer.status != "在线")
{
- BindBuyer(buyer, "店铺掉线");
+ BindBuyerOrderReadInfo(buyer, "店铺掉线");
break;
}
- BindBuyer(buyer, "停滞时间超过30秒,跳过");
+ BindBuyerOrderReadInfo(buyer, "停滞时间超过30秒,跳过");
break;
}
@@ -1695,13 +2086,13 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}
if (tokenSource.IsCancellationRequested)
{
- BindBuyer(buyer, "已取消读取");
+ BindBuyerOrderReadInfo(buyer, "已取消读取");
break;
}
Thread.Sleep(Randomx.GetId(2000, 3000));
Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = buyer.buyer_nick + " 已发货读取中"; }));
- BindBuyer(buyer, "正在读取已发货");
+ BindBuyerOrderReadInfo(buyer, "正在读取已发货");
// 已发货
readBuyer = buyer.buyer_id;
@@ -1732,7 +2123,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
if (tokenSource.IsCancellationRequested)
{
- BindBuyer(buyer, "已取消读取");
+ BindBuyerOrderReadInfo(buyer, "已取消读取");
break;
}
@@ -1741,10 +2132,10 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
PddMobileLoginViewModel.CheckBuyerLogin(new List() { buyer });
if (buyer.status != "在线")
{
- BindBuyer(buyer, "店铺掉线");
+ BindBuyerOrderReadInfo(buyer, "店铺掉线");
break;
}
- BindBuyer(buyer, "停滞时间超过30秒,跳过");
+ BindBuyerOrderReadInfo(buyer, "停滞时间超过30秒,跳过");
break;
}
@@ -1777,14 +2168,9 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}
if (tokenSource.IsCancellationRequested)
{
- BindBuyer(buyer, "已取消读取");
+ BindBuyerOrderReadInfo(buyer, "已取消读取");
break;
}
- //Invoke(new Action(() =>
- //{
- // if (row.Cells["colMessage"].Value.ParseToString().StartsWith("正在读取"))
- // BindBuyer(buyer, " ");
- //}));
}
catch (Exception ex)
{
@@ -1799,11 +2185,13 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
isReadBuyerOrder = false;
Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = "订单读取已结束,等待下次读取"; }));
- }, cancellationTokenSource.Token);
+ BindBuyerOrderReadInfo(null, "订单读取已结束,等待下次读取");
+ }, cancellationTokenSource.Token);
}
- private void BindBuyer(BuyerLoginInfo buyer, string msg = "", List selectIds = null)
+ private void BindBuyerOrderReadInfo(BuyerLoginInfo buyer, string msg = "", List selectIds = null)
{
+ this.LblMsgStr = buyer?.buyer_name + " " + msg + " " + DateTime.Now.ToString("yyMMdd HH:mm:ss");
}
private void btnSendBuyerOrder_Click(object sender, RoutedEventArgs e)
@@ -2826,40 +3214,96 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
Panel.SetZIndex(MainWindow.Instance.gridTbBuyerOrderReadCtrl, -1);
}
- private void CheckBox_Click(object sender, RoutedEventArgs e)
+ private async void CheckBox_Click(object sender, RoutedEventArgs e)
{
- if (sender is CheckBox chk)
- {
- if (chk.DataContext is BuyerLoginInfo pddBuyer)
- {
- foreach (var buyer in GlobalConfig.PDDBuyerLoginList)
- {
- buyer.IsSelect = false;
- }
- pddBuyer.IsSelect = true;
- if (pddBuyer.wpf_browser != null)
- Panel.SetZIndex(pddBuyer.wpf_browser, maxZIndex++);
- }
- }
- //if (e.Source)
- }
+ //if (sender is CheckBox chk)
+ //{
+ // if (chk.DataContext is BuyerLoginInfo pddBuyer)
+ // {
+ // foreach (var buyer in GlobalConfig.PDDBuyerLoginList)
+ // {
+ // buyer.IsSelect = false;
+ // }
+ // pddBuyer.IsSelect = true;
+ // if (pddBuyer.wpf_browser != null)
+ // Panel.SetZIndex(pddBuyer.wpf_browser, maxZIndex++);
+ // }
+ //}
+ //if (e.Source)
+ if (sender is CheckBox chk)
+ {
+ if (chk.DataContext is BuyerLoginInfo pddBuyer)
+ {
+ foreach (var buyer in GlobalConfig.PDDBuyerLoginList)
+ {
+ buyer.IsSelect = false;
+ }
+ pddBuyer.IsSelect = true;
+ if (currentReadBuyer == pddBuyer.buyer_id && pddBuyer.wpf_browser != null)
+ Panel.SetZIndex(pddBuyer.wpf_browser, maxZIndex++);
+ else if (cefShowShopOrderLstWebBrowser != null)
+ {
+ WPFCEFBrowser.DeleteCookie(cefShowShopOrderLstWebBrowser.GetCookieManager());
+ var cookieLst = JsonHelper.DeserializeJsonToList(pddBuyer?.cookie);
+ //var t = WPFCEFBrowser.SetCookieAsync(JsonHelper.SerializeObject(cookieLst), cefShowShopOrderLstWebBrowser.GetCookieManager(null));
+ //t.Wait();
+ foreach (var cook in cookieLst)
+ {
+ await WPFCEFBrowser.SetCookieAsync(cook.Domain.Trim('.'), cook.Name + "=" + cook.Value + ";", cefShowShopOrderLstWebBrowser.GetCookieManager(null));
+ }
- private void txtBuyerNick_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
+ Panel.SetZIndex(this.cefShowShopOrderLstWebBrowser, maxZIndex++);
+ //cefShowShopOrderLstWebBrowser.Load("https://mobile.yangkeduo.com");
+ cefShowShopOrderLstWebBrowser.Load("https://mobile.yangkeduo.com/personal.html");
+ }
+ }
+ }
+ }
+
+ private async void txtBuyerNick_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
- if (sender is TextBox txt)
- {
- if (txt.DataContext is BuyerLoginInfo pddBuyer)
- {
- foreach (var buyer in GlobalConfig.PDDBuyerLoginList)
- {
- buyer.IsSelect = false;
- }
- pddBuyer.IsSelect = true;
- if (pddBuyer.wpf_browser != null)
- Panel.SetZIndex(pddBuyer.wpf_browser, maxZIndex++);
- }
- }
- }
+ //if (sender is TextBox txt)
+ //{
+ // if (txt.DataContext is BuyerLoginInfo pddBuyer)
+ // {
+ // foreach (var buyer in GlobalConfig.PDDBuyerLoginList)
+ // {
+ // buyer.IsSelect = false;
+ // }
+ // pddBuyer.IsSelect = true;
+ // if (pddBuyer.wpf_browser != null)
+ // Panel.SetZIndex(pddBuyer.wpf_browser, maxZIndex++);
+ // }
+ //}
+ if (sender is TextBox txt)
+ {
+ if (txt.DataContext is BuyerLoginInfo pddBuyer)
+ {
+ foreach (var buyer in GlobalConfig.PDDBuyerLoginList)
+ {
+ buyer.IsSelect = false;
+ }
+ pddBuyer.IsSelect = true;
+ if (currentReadBuyer == pddBuyer.buyer_id && pddBuyer.wpf_browser != null)
+ Panel.SetZIndex(pddBuyer.wpf_browser, maxZIndex++);
+ else if (cefShowShopOrderLstWebBrowser != null)
+ {
+ WPFCEFBrowser.DeleteCookie(cefShowShopOrderLstWebBrowser.GetCookieManager());
+ var cookieLst = JsonHelper.DeserializeJsonToList(pddBuyer?.cookie);
+ //var t = WPFCEFBrowser.SetCookieAsync(JsonHelper.SerializeObject(cookieLst), cefShowShopOrderLstWebBrowser.GetCookieManager(null));
+ //t.Wait();
+ foreach (var cook in cookieLst)
+ {
+ await WPFCEFBrowser.SetCookieAsync(cook.Domain.Trim('.'), cook.Name + "=" + cook.Value + ";", cefShowShopOrderLstWebBrowser.GetCookieManager(null));
+ }
+
+ Panel.SetZIndex(this.cefShowShopOrderLstWebBrowser, maxZIndex++);
+ //cefShowShopOrderLstWebBrowser.Load("https://mobile.yangkeduo.com");
+ cefShowShopOrderLstWebBrowser.Load("https://mobile.yangkeduo.com/personal.html");
+ }
+ }
+ }
+ }
private void txtBuyerNick_Loaded(object sender, RoutedEventArgs e)
{
diff --git a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDMultiBuyerOrderReadCtrl.xaml b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDMultiBuyerOrderReadCtrl.xaml
new file mode 100644
index 0000000..2514a30
--- /dev/null
+++ b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDMultiBuyerOrderReadCtrl.xaml
@@ -0,0 +1,735 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDMultiBuyerOrderReadCtrl.xaml.cs b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDMultiBuyerOrderReadCtrl.xaml.cs
new file mode 100644
index 0000000..2a67a9e
--- /dev/null
+++ b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDMultiBuyerOrderReadCtrl.xaml.cs
@@ -0,0 +1,2991 @@
+using _29WxOrderWpf.BaseWindows;
+using _29WxOrderWpf.CefHelper;
+using _29WxOrderWpf.Ctrls.OrderCtrls;
+using _29WxOrderWpf.ViewModels;
+using AllBase;
+using AllBase.Helper;
+using AllBase.Model;
+using AllBase.Model.DBModel;
+using AllBase.Model.Result;
+using AllBase.Util;
+using CefSharp;
+using CefSharp.DevTools.LayerTree;
+using CefSharp.DevTools.Network;
+using CefSharp.Handler;
+using CefSharp.Wpf;
+using NaiBa.Util;
+using NaiBa.Util.Extension;
+using Newtonsoft.Json.Linq;
+using NPOI.OpenXmlFormats.Dml.Chart;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Reflection;
+using System.Security.Cryptography;
+using System.Security.Cryptography.X509Certificates;
+using System.Security.Policy;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Xml.XPath;
+using Work;
+using Work._29Tools.BLL;
+using Work._29Tools.CefTools;
+using Work.BaseForms;
+using Work.BuyUsers;
+using WxOrder.Framework.Commons;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement.Tab;
+
+namespace _29WxOrderWpf.Ctrls.BuyerCtrls
+{
+ ///
+ /// PDDMultiBuyerOrderReadCtrl.xaml 的交互逻辑
+ ///
+ public partial class PDDMultiBuyerOrderReadCtrl : UserControl
+ {
+ private static readonly object locker = new object();
+
+ Dictionary dicPddPickInfo = new Dictionary();
+ ConcurrentList lstSyncLogistics = new ConcurrentList();
+
+ ChromiumWebBrowser cefWebBrowser = null;
+ public string cefAddress = "";
+ public static ConcurrentList lstPddBuyerOrderInfoLite { get; set; } = new ConcurrentList();
+ public static ObservableCollection lstFilterPddBuyerOrderInfoLite { get; set; } = new ObservableCollection();
+ public static ConcurrentList lstPddBuyerAfterSaleInfoLite { get; set; } = new ConcurrentList();
+ public static ObservableCollectionThreadSafe lstFilterPddBuyerAfterSaleInfoLite { get; set; } = new ObservableCollectionThreadSafe();
+ public static ConcurrentList lstPddBuyerOrderVoidAfterSaleOrderSn { get; set; } = new ConcurrentList();
+ public CancellationTokenSource cancellationTokenSource { get; set; } = new CancellationTokenSource();
+ //public ChromiumWebBrowser cefWebBrowser = null;
+ public BuyerReadOrderConfig buyerReadOrderConfig = new BuyerReadOrderConfig();
+ public DateTime nextGetOrderTime = DateTime.MinValue;
+ public DateTime lastCefReadOrderTime = DateTime.Now;
+ ///
+ /// 是否正在读买手单
+ ///
+ bool isReadBuyerOrder = false;
+ ///
+ /// 是否已初始化已读的买手单
+ ///
+ bool isInitBuyerOrder = false;
+ bool isSkipNext = false;
+ ///
+ /// 是否已初始化已读的售后单
+ ///
+ bool isInitBuyerAfterSale = false;
+ ///
+ /// 当前正在读单的买手信息
+ ///
+ string currentReadBuyer = "";
+ ///
+ /// 过滤查询的订单文本信息;
+ ///
+ string filterTxt = "";
+ ///
+ /// 是否过滤无微信系统订单号的拼多多买手单
+ ///
+ bool isHideNoWxOrderNo = true;
+ ///
+ /// 软件是否完成加载
+ ///
+ bool isLoad = false;
+ int maxZIndex = 1;
+
+ public PDDMultiBuyerOrderReadCtrl()
+ {
+ InitializeComponent();
+ }
+
+ void filterBuyerOrder()
+ {
+ lstFilterPddBuyerOrderInfoLite = new ObservableCollection(lstPddBuyerOrderInfoLite.Where(o => filterOneBuyerOrder(o) == false));
+ if (dgBuyerOrder != null)
+ this.dgBuyerOrder.ItemsSource = lstFilterPddBuyerOrderInfoLite;
+
+ lstFilterPddBuyerAfterSaleInfoLite = new ObservableCollectionThreadSafe(lstPddBuyerAfterSaleInfoLite.Where(o => filterOneBuyerAfterSale(o) == false));
+ if (dgBuyerAfterSale != null)
+ this.dgBuyerAfterSale.ItemsSource = lstFilterPddBuyerAfterSaleInfoLite;
+ }
+
+ ///
+ /// 过滤订单,被过滤掉返回true,否则返回false
+ ///
+ ///
+ ///
+ bool filterOneBuyerOrder(PddBuyerOrderLiteInfo order)
+ {
+ if (order == null)
+ return true;
+
+ if (!GlobalConfig.PDDBuyerLoginList.Any(u => u.buyer_name == order.buyerName))
+ return true;
+ if (order.OrderTime < new DateTime(2025, 6, 29))
+ return true;
+ if (isHideNoWxOrderNo && order.ShopOrderIdStr.IsNullOrEmpty())
+ return true;
+ if (!string.IsNullOrEmpty(filterTxt) && !order.order_sn.Contains(filterTxt) && !order.ShopOrderIdStr.ParseToString().Contains(filterTxt) &&
+ !order.tracking_number.Contains(filterTxt) &&
+ !order.sendStatus.ParseToString().Contains(filterTxt))
+ return true;
+ return false;
+ }
+
+ bool filterOneBuyerAfterSale(PddBuyerAfterSaleLiteInfo afterSale)
+ {
+ if (afterSale == null)
+ return true;
+
+ if (!GlobalConfig.PDDBuyerLoginList.Any(u => u.buyer_name == afterSale.buyerName))
+ return true;
+ if (isHideNoWxOrderNo && afterSale.ShopOrderIdStr.IsNullOrEmpty())
+ return true;
+ if (!string.IsNullOrEmpty(filterTxt) && !afterSale.orderSn.Contains(filterTxt) && !afterSale.ShopOrderIdStr.ParseToString().Contains(filterTxt) &&
+ !afterSale.sendStatus.ParseToString().Contains(filterTxt))
+ return true;
+ return false;
+ }
+
+ private void UserControl_Loaded(object sender, RoutedEventArgs e)
+ {
+ this.lbPddBuyer.ItemsSource = GlobalConfig.PDDBuyerLoginList;
+
+ buyerReadOrderConfig = NaiBa.Util.Helper.ConfigHelper.LoadConfig("pdd_buyer_read_order_config");
+ if (buyerReadOrderConfig == null)
+ buyerReadOrderConfig = new BuyerReadOrderConfig();
+ this.chkAutoReadBuyerOrder.IsChecked = buyerReadOrderConfig.IsAutoReadOrder;
+ this.chkAutoAfterSale.IsChecked = buyerReadOrderConfig.IsAutoAfterSale;
+
+ lstPddBuyerOrderInfoLite = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("pdd_buyer_order_list");
+ if (lstPddBuyerOrderInfoLite == null)
+ lstPddBuyerOrderInfoLite = new ConcurrentList();
+
+ // 移除所有null值
+ lstPddBuyerOrderInfoLite.RemoveAll(o => o == null);
+ foreach (var item in lstPddBuyerOrderInfoLite.ToList())
+ {
+ if (item.OrderTime < DateTime.Now.AddMonths(-1))
+ lstPddBuyerOrderInfoLite.Remove(item);
+ if (item.WxSendTypeStr == "是")
+ item.WxSendTypeStr = "直发";
+ }
+
+ lstPddBuyerAfterSaleInfoLite = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("pdd_buyer_after_sale_list");
+ if (lstPddBuyerAfterSaleInfoLite == null)
+ lstPddBuyerAfterSaleInfoLite = new ConcurrentList();
+
+ // 移除所有null值
+ lstPddBuyerAfterSaleInfoLite.RemoveAll(af => af == null);
+ foreach (var item in lstPddBuyerAfterSaleInfoLite.ToList())
+ {
+ if (item.orderDate < DateTime.Now.AddMonths(-2).ToString("yyMMdd").ParseToInt())
+ lstPddBuyerAfterSaleInfoLite.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 (!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;
+ }));
+ }
+ });
+ }
+
+ public void InitCef()
+ {
+ 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)
+ {
+ }
+ private void CefWebBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
+ {
+ }
+ private void CefWebBrowser_AddressChanged(object sender, DependencyPropertyChangedEventArgs e)
+ {
+ cefAddress = e.NewValue.ParseToString();
+ }
+
+
+ private bool RequestHandler_BeforeResourceLoad(object sender, string url, string postData, IRequest request)
+ {
+ return false;
+ }
+ private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData, IRequest request)
+ {
+ var cookie1 = request.Headers["Cookie"];
+ Task.Run(async() =>
+ {
+ var url1 = url;
+ var data1 = responseData;
+ var send1 = sender;
+ //https://mobile.yangkeduo.com/psnl_goods_help.html?_t_module_name=assistant_search&refer_scene=no_pickup_package_express&refer_page_name=goods_express&refer_page_id=10007_1790161262817_kcbn4ajosu&refer_page_sn=10007
+ //https://mobile.yangkeduo.com/psnl_goods_help.html?_t_module_name=assistant_search&refer_scene=no_pickup_package_express&refer_page_name=goods_express&refer_page_id=10007_1790161262817_kcbn4ajosu&refer_page_sn=10007&show_no_pickup_package=0&tab_id=400&tab_type=1&list_index=80
+ if (url1.StartsWith ("https://mobile.yangkeduo.com/psnl_goods_help.html?_t_module_name=assistant_search&refer_scene=no_pickup_package_express&refer_page_name=goods_express") ||
+ data1.Contains("\"pick_code\":\"取件码") /*|| data.Contains("21-2110")*/)
+ {
+ try
+ {
+ var combine_track_list = BaseRegex.GetJsonArrStrJson(ref data1, "combine_track_list");
+ var noPickupPackageData = BaseRegex.GetJsonObjStrJson(ref data1, "noPickupPackageData").FirstOrDefault();
+ if (!noPickupPackageData.IsNullOrEmpty() && send1 is ChromiumWebBrowser cef)
+ {
+ var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(buy => buy.wpf_browser == cef);
+ if (buyer != null)
+ {
+ dicPddPickInfo[buyer] = JsonHelper.DeserializeJsonToObject(noPickupPackageData);
+ SetPickUpNo(dicPddPickInfo[buyer]);
+ }
+ }
+ }
+ catch
+ {
+ }
+ }
+
+
+ if (data1.Contains("214874201671006"))
+ {
+
+ }
+
+ //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
+ {
+ await 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"))
+ {
+ await 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 (/*(cefAddress.Contains("orders.html")) &&*/ url1.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/aristotle/order_list_v"))
+ //https://mobile.yangkeduo.com/proxy/api/api/aristotle/order_list_v4?pdduid=6766109923730
+ {
+ await Task.Run(() =>
+ {
+ CefReadBuyerOrder(url1, data1);
+ });
+ }
+
+ // 售后 第一页
+ if (url1.StartsWith("https://mobile.yangkeduo.com/complaint_list.html"))
+ {
+ await 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
+ {
+
+ }
+ }
+ }
+ });
+ }
+ // 读取售后
+ if (url1.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/blade/after_sales_list"))
+ {
+ await Task.Run(() =>
+ {
+ CefReadBuyerAfterSale(url1, data1);
+ });
+ }
+ });
+ }
+
+ ///
+ /// 读取中转仓拍单订单
+ ///
+ ///
+ List GetOrderTransitWarehouseInfo(string out_order_nos)
+ {
+ if (string.IsNullOrEmpty(out_order_nos))
+ return new List();
+
+ var url3 = BaseClass.Build29WxObjString("order/wx_get_transit_order");
+ var data3 = UserLogin.GetSignaturex();
+ data3 += "&out_order_no=" + out_order_nos;
+ var html3 = GetHtml.PostUtf8(url3, data3);
+ if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
+ html3 = 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());
+ if (transitOrderList == null)
+ transitOrderList = new List();
+ // 直接过滤掉仓库作废单
+ //transitOrderList = transitOrderList.Where(t => t.order_void_status != 1).ToList();
+ }
+ catch
+ {
+ return new List();
+ }
+ return transitOrderList;
+ }
+
+ List GetOrderItemExtInfo(string out_order_nos)
+ {
+ if (out_order_nos.IsNullOrEmpty())
+ return new List();
+ var url3 = BaseClass.Build29WxObjString("order/wx_get_order_item_ext_info");
+ var data3 = UserLogin.GetSignaturex();
+ data3 += "&out_order_id_in=" + out_order_nos;
+ var html3 = GetHtml.PostUtf8(url3, data3);
+ if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
+ html3 = 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());
+ if (transitOrderList == null)
+ transitOrderList = new List();
+ // 直接过滤掉仓库作废单
+ //transitOrderList = transitOrderList.Where(t => t.order_void_status != 1).ToList();
+ }
+ catch (Exception ex)
+ {
+ transitOrderList = new List();
+ }
+ return transitOrderList;
+ }
+
+ ///
+ /// 读取订单详情信息
+ ///
+ ///
+ ///
+ List GetOrderInfo(string order_ids)
+ {
+ if (string.IsNullOrEmpty(order_ids))
+ return new List();
+
+ Thread.Sleep(100);
+ var url1 = BaseClass.Build29WxObjString("order/get_erp_order_list");
+ var data1 = UserLogin.GetSignaturex();
+ data1 += "&erp_order_id_in=" + order_ids;
+ data1 += "&page_size=" + 100;
+ var html1 = GetHtml.PostUtf8(url1, data1);
+ if (string.IsNullOrEmpty(html1) || !html1.Contains("\"code\":200"))
+ html1 = GetHtml.PostUtf8(url1, data1);
+ if (string.IsNullOrEmpty(html1) || !html1.Contains("\"code\":200"))
+ {
+ //BaseMsgWindow.ShowError("订单读取失败 " + BaseRegex.GetStringJson(ref html, "msg"));
+ //break;
+ }
+ List orders = new List();
+ try
+ {
+ orders = JsonHelper.DeserializeJsonToList(JObject.Parse(html1)["data"].ParseToString());
+ if (orders == null)
+ orders = new List();
+
+ var orderItems = OrderListCtrl.GetOrderItemInfo(order_ids);
+ foreach (var orderItem in orderItems)
+ {
+ var order = orders.FirstOrDefault(o => o.order_id == orderItem.order_id);
+ orderItem.ItemOrder = order;
+ order.orderItems.Add(orderItem);
+ }
+ return orders;
+ }
+ catch
+ {
+ return new List();
+ }
+ }
+
+
+ public static List GetOrderAfterSales(string order_ids)
+ {
+ if (order_ids.IsNullOrEmpty())
+ return new List();
+
+ var url6 = BaseClass.Build29WxObjString("order/wx_get_buyer_after_sale_list");
+ var data6 = UserLogin.GetSignaturex();
+ data6 += "&wx_order_id_in=" + order_ids;
+ var html6 = GetHtml.PostUtf8(url6, data6);
+ if (string.IsNullOrEmpty(html6) || !html6.Contains("\"code\":200"))
+ html6 = GetHtml.PostUtf8(url6, data6);
+ if (string.IsNullOrEmpty(html6) || !html6.Contains("\"code\":200"))
+ {
+ BaseMsgWindow.ShowAnimateMessage("订单读取失败(买手售后) " + BaseRegex.GetStringJson(ref html6, "msg"), "Error", 5);
+ }
+ List pddBuyerAfterSales = new List();
+ try
+ {
+ pddBuyerAfterSales = JsonHelper.DeserializeJsonToList(JObject.Parse(html6)["data"].ParseToString())
+ .OrderByDescending(p => p.TransitCreateTime).ToList();
+ }
+ catch { }
+ return pddBuyerAfterSales;
+ }
+
+ void UpdateOrderStatus(PddBuyerOrderLiteInfo pdd_order, oms_wei_order_info wx_order, oms_wei_order_item_info wx_order_item, oms_wei_external_procurement_log_info wx_transit_order)
+ {
+ pdd_order.ShopIdStr = (wx_order?.shop_id).ParseToString();
+ pdd_order.WxOrderStatus = wx_order?.status;
+ pdd_order.ShopOrderIdStr = wx_order_item?.order_id ?? wx_transit_order?.order_no;
+ pdd_order.ShopOrderSkuIdStr = wx_order_item?.sku_id ?? wx_transit_order?.order_sku_id;
+ pdd_order.ShopOrderSkuNameStr = wx_order_item?.SkuAttrStr;
+ pdd_order.WxOrderCreateTime = wx_order_item?.ItemOrder?.create_time == null ? DateTime.MinValue : BaseClass.StampToDateTime((wx_order_item?.ItemOrder?.create_time).ParseToInt());
+ pdd_order.ShopOrderRefundStr = ""; // (/*refund_item?.count > 0 &&*/ wx_order_item.refund_status > 1) ? "店铺售后" : "";
+ if (wx_order_item?.refund_status > 1)
+ {
+ pdd_order.ShopOrderRefundStr = "店铺售后";
+ pdd_order.wxRefundStatus = pdd_order.order_status_prompt.Contains("待发货") ? "待退款" : "待退货";
+ }
+ pdd_order.TransitBuyerOrderRefundStatus = wx_transit_order?.refund_status;
+ pdd_order.TransitWarehouseIdStr = wx_transit_order?.platform;
+ pdd_order.TransitWarehouseOrderCodeStr = wx_transit_order?.order_code;
+ pdd_order.Express1WaybillStr = wx_transit_order?.express_1_waybill;
+ pdd_order.Express1CompanyStr = wx_transit_order?.express_1_company;
+ pdd_order.Express2WaybillStr = wx_transit_order?.express_2_waybill;
+ pdd_order.Express2CompanyStr = wx_transit_order?.express_2_company;
+ pdd_order.TransferWareHouseStatus = wx_transit_order?.transfer_warehouse_status.ParseToString();
+ pdd_order.WxOrderVoidStatus = wx_transit_order?.order_void_status.ParseToString();
+ pdd_order.PreAllocatedOrderNoStr = wx_transit_order?.pre_allocated_order_no.ParseToString();
+ // 更新订单中转取号状态
+ pdd_order.sendStatus = (pdd_order.TransitOrderStatus + " " + pdd_order.ShopOrderRefundStr).Trim();
+ if (pdd_order.WxOrderVoidStatus == "1")
+ {
+ pdd_order.sendStatus += " 已作废";
+ }
+ pdd_order.TransitCreateTime = wx_transit_order?.created_time ?? DateTime.MinValue;
+ pdd_order.TransitPickupTime = wx_transit_order?.pickup_time ?? DateTime.MaxValue.AddMonths(-1);
+ pdd_order.TransitWarehouseRawMessage = wx_transit_order?.raw_message;
+ }
+
+ void UpdateAfterSaleStatus(PddBuyerAfterSaleLiteInfo pdd_afterSale, oms_wei_order_info wx_order, oms_wei_order_item_info wx_order_item,
+ oms_wei_external_procurement_log_info wx_transit_order, order_pdd_buyer_after_sale buyer_after_sale)
+ {
+ pdd_afterSale.ShopIdStr = (wx_order?.shop_id).ParseToString();
+ pdd_afterSale.ShopOrderIdStr = wx_order_item?.order_id ?? wx_transit_order?.order_no;
+ pdd_afterSale.ShopOrderSkuIdStr = wx_order_item?.sku_id ?? wx_transit_order?.order_sku_id;
+ pdd_afterSale.ShopOrderSkuNameStr = wx_order_item?.SkuAttrStr;
+ pdd_afterSale.WxOrderCreateTime = wx_order_item?.ItemOrder?.create_time == null ? DateTime.MinValue : BaseClass.StampToDateTime((wx_order_item?.ItemOrder?.create_time).ParseToInt());
+ pdd_afterSale.ShopOrderRefundStr = ""; // (/*refund_item?.count > 0 &&*/ wx_order_item?.refund_status > 1) ? "店铺售后" : "";
+ if (wx_order_item?.refund_status > 1)
+ {
+ pdd_afterSale.ShopOrderRefundStr = "店铺售后";
+ }
+ pdd_afterSale.TransitBuyerOrderRefundStatus = wx_transit_order?.refund_status;
+ pdd_afterSale.TransitWarehouseIdStr = wx_transit_order?.platform;
+ pdd_afterSale.TransitWarehouseOrderCodeStr = wx_transit_order?.order_code;
+ pdd_afterSale.Express1WaybillStr = wx_transit_order?.express_1_waybill;
+ pdd_afterSale.Express1CompanyStr = wx_transit_order?.express_1_company;
+ pdd_afterSale.Express2WaybillStr = wx_transit_order?.express_2_waybill;
+ pdd_afterSale.Express2CompanyStr = wx_transit_order?.express_2_company;
+ pdd_afterSale.TransferWareHouseStatus = wx_transit_order?.transfer_warehouse_status.ParseToString();
+ pdd_afterSale.WxOrderVoidStatus = wx_transit_order?.order_void_status.ParseToString();
+ pdd_afterSale.PreAllocatedOrderNoStr = wx_transit_order?.pre_allocated_order_no.ParseToString();
+ // 更新订单中转取号状态
+ pdd_afterSale.sendStatus = (pdd_afterSale.TransitOrderStatus + " " + pdd_afterSale.ShopOrderRefundStr).Trim();
+ pdd_afterSale.TransitCreateTime = wx_transit_order?.created_time ?? DateTime.MinValue;
+ pdd_afterSale.TransitPickupTime = wx_transit_order?.pickup_time ?? DateTime.MaxValue.AddMonths(-1);
+ pdd_afterSale.AfterSaleAddress = buyer_after_sale?.afterSaleAddress;
+ }
+
+ 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 = "";
+ PddMobileLoginViewModel.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_nos = string.Join(",", list.Select(bo => bo.order_sn));
+
+ if (out_order_nos.Contains("260817-535832839751006"))
+ {
+
+ }
+
+ // 装载同步单
+ var syncOrderList = OrderListCtrl.GetSyncLogistics(out_order_nos);
+ foreach (var syncOrder in syncOrderList)
+ {
+ if (!lstSyncLogistics.Contains(syncOrder))
+ lstSyncLogistics.Add(syncOrder);
+ else
+ {
+ lstSyncLogistics.RemoveAll(o => o.order_id == syncOrder.order_id);
+ lstSyncLogistics.Add(syncOrder);
+ }
+ }
+ // 根据拼多多外采订单列表查询中转仓订单信息
+ var transitOrderList = GetOrderTransitWarehouseInfo(out_order_nos);
+ // 根据拼多多外采订单列表查询订单扩展信息
+ var orderExtList = GetOrderItemExtInfo(out_order_nos);
+
+ // 根据仓库订单和扩展订单获取微信订单信息
+ var order_id_lst = transitOrderList.Select(ts => ts.order_no).ToList();
+ order_id_lst.AddRange(orderExtList.Select(ts => ts.order_id));
+ var order_ids = string.Join(",", order_id_lst.Distinct());
+ var orders = GetOrderInfo(order_ids);
+
+ //var buyerAfterSales = GetOrderAfterSales(order_ids);
+
+ // 处理这些获取到的微信订单
+ foreach (var order in orders)
+ {
+ foreach (var orderItem in order.orderItems)
+ {
+ if (orderItem.ItemOrder.orderItems.Count > 1)
+ orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id && t.order_sku_id == orderItem.sku_id));
+ else
+ orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id));
+ }
+ }
+ // 获取订单售后,暂时关闭,使用订单详情售后状态字段
+ //var refunds = GetOrderRefundInfo(order_ids);
+
+ foreach (PddBuyerOrderLiteInfo o in list)
+ {
+ o.buyerId = buyer.buyer_id;
+ o.buyerName = buyer.buyer_name;
+
+ if (o.order_sn == "260923-573109716621688")
+ {
+
+ }
+
+ // 查找店铺订单并更新店铺订单状态
+ var orderItemExt = orderExtList.FirstOrDefault(oie => oie.out_order_id == o.order_sn && oie.buy_type == "直发");
+ if (orderItemExt != null)
+ {
+ o.WxSendTypeStr = "直发";
+ o.ShopOrderIdStr = orderItemExt.order_id;
+ o.ShopOrderSkuIdStr = orderItemExt.sku_id;
+ o.sendStatus = "";
+ var wxOrder = orders.FirstOrDefault(ord => ord.order_id == o.ShopOrderIdStr);
+ if (wxOrder != null)
+ {
+ o.ShopOrderRefundStr = ""; // "店铺售后" 或者 "";
+ var wxOrderItem = wxOrder.orderItems.FirstOrDefault(oi => oi.sku_id == o.ShopOrderSkuIdStr);
+ if (wxOrderItem != null)
+ {
+ o.ShopOrderSkuNameStr = wxOrderItem.SkuAttrStr;
+ if (wxOrderItem?.refund_status > 1)
+ {
+ o.ShopOrderRefundStr = "店铺售后";
+ }
+ }
+ o.WxOrderStatus = wxOrder?.status;
+ o.OutAfterSaleStatusStr = wxOrder.out_after_sale_status;
+ }
+ }
+ else
+ {
+ var transit_item = transitOrderList.FirstOrDefault(t1 => t1.out_order_no == o.order_sn);
+ oms_wei_order_info shopOrder = null;
+ oms_wei_order_item_info orderItem = null;
+ if (transit_item != null)
+ {
+ shopOrder = orders.FirstOrDefault(o1 => o1.order_id == transit_item.order_no);
+ orderItem = shopOrder?.orderItems.FirstOrDefault(oi => oi.ItemTransitOrders.Any(t1 => t1.out_order_no == o.order_sn));
+ //var refund_item = refunds.FirstOrDefault(ri => ri.order_id == order_item?.order_id) ?? order_item?.ItemRefund;
+ UpdateOrderStatus(o, shopOrder, orderItem, transit_item);
+ }
+ }
+
+ bool isUpdate = false;
+ PddBuyerOrderLiteInfo order = null;
+ Dispatcher.Invoke(new Action(() =>
+ {
+ order = lstPddBuyerOrderInfoLite.FirstOrDefault(or => or.order_sn == o.order_sn);
+ }));
+ if (order == null)
+ {
+ order = o;
+ isUpdate = true;
+ Dispatcher.Invoke(new Action(() =>
+ {
+ lstPddBuyerOrderInfoLite.Add(order);
+ }));
+ }
+ else
+ {
+ string orderStr = JsonHelper.SerializeObject(order);
+ string oStr = JsonHelper.SerializeObject(o);
+ if (JsonHelper.SerializeObject(order) != JsonHelper.SerializeObject(o))
+ {
+ order.WxSendTypeStr = o.WxSendTypeStr;
+ if (!o.tracking_number.IsNullOrEmpty() && o.tracking_number != order.tracking_number)
+ isUpdate = true;
+ if (!o.outExpressCompanyCode.IsNullOrEmpty() && o.outExpressCompanyCode != order.outExpressCompanyCode)
+ isUpdate = true;
+ if (o.order_status_prompt != order.order_status_prompt)
+ isUpdate = true;
+
+
+ if (order.WxSendTypeStr == "直发")
+ {
+ if (order.order_status_prompt.Contains("待发货") && !o.order_status_prompt.Contains("待发货"))
+ order.sendStatus = "";
+ if (order.sendStatus == "已发送待发货订单" && o.order_status_prompt.Contains("待收货"))
+ order.sendStatus = "";
+ }
+ else 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.order_time = o.order_time;
+ order.tracking_number = o.tracking_number;
+
+ order.TransitCreateTime = o.TransitCreateTime;
+ order.TransitPickupTime = o.TransitPickupTime;
+
+ order.TransitWarehouseRawMessage = o.TransitWarehouseRawMessage;
+ order.WxOrderCreateTime = o.WxOrderCreateTime;
+ order.ShopIdStr = o.ShopIdStr;
+ order.ShopOrderIdStr = o.ShopOrderIdStr;
+ order.ShopOrderSkuIdStr = o.ShopOrderSkuIdStr;
+ order.ShopOrderSkuNameStr = o.ShopOrderSkuNameStr;
+ order.TransitBuyerOrderRefundStatus = o.TransitBuyerOrderRefundStatus;
+ order.TransitWarehouseIdStr = o.TransitWarehouseIdStr;
+ order.TransitWarehouseOrderCodeStr = o.TransitWarehouseOrderCodeStr;
+ order.Express1WaybillStr = o.Express1WaybillStr;
+ order.Express1CompanyStr = o.Express1CompanyStr;
+ order.Express2WaybillStr = o.Express2WaybillStr;
+ order.Express2CompanyStr = o.Express2CompanyStr;
+ order.TransferWareHouseStatus = o.TransferWareHouseStatus;
+ order.WxOrderVoidStatus = o.WxOrderVoidStatus;
+ order.PreAllocatedOrderNoStr = o.PreAllocatedOrderNoStr;
+ order.ShopOrderRefundStr = o.ShopOrderRefundStr; // "" 或者 "店铺售后"
+ order.OutAfterSaleStatusStr = o.OutAfterSaleStatusStr; // 店铺售后状态文本描述
+ order.wxRefundStatus = o.wxRefundStatus;
+ order.WxOrderStatus = o.WxOrderStatus;
+
+
+ var index = lstPddBuyerOrderInfoLite.IndexOf(order);
+ Dispatcher.Invoke(new Action(() =>
+ {
+ lstPddBuyerOrderInfoLite.Remove(order);
+ lstPddBuyerOrderInfoLite.Insert(index, order);
+ }));
+ }
+ }
+
+ if (filterOneBuyerOrder(order) == false)
+ {
+ Dispatcher.Invoke(new Action(() =>
+ {
+ var orderExist = lstFilterPddBuyerOrderInfoLite.FirstOrDefault(oe => oe.order_sn == order.order_sn);
+ if (orderExist == null)
+ {
+ lstFilterPddBuyerOrderInfoLite.Add(order);
+ }
+ else
+ {
+ var index = lstFilterPddBuyerOrderInfoLite.IndexOf(orderExist);
+ lstFilterPddBuyerOrderInfoLite.Remove(orderExist);
+ lstFilterPddBuyerOrderInfoLite.Insert(index, order);
+ }
+ }));
+ }
+
+ Task.Run(() =>
+ {
+ // 根据订单状态 取号/修改取号
+ if (order.WxSendTypeStr == "直发")
+ {
+ // 微信售后,客户端取消直发买手订单
+ if (order.ShopOrderRefundStr.ParseToString().Contains("售后"))
+ {
+ if (!",2,3,4,5,7,8,10,31,".Contains("," + (order.after_sales?.after_sales_status).ParseToString() + ","))
+ {
+ // 待发货直接售后,并通知中转仓接口修改退货状态
+ var afterSaleRst = PddDirectAutoAfterSale(order);
+ isUpdate = true;
+ }
+ }
+ if (GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill != true)
+ SendOrderE57(order);
+ }
+ else
+ {
+ // 微信售后,服务端自动作废订单,客户端取消买手订单即可
+ if (order.ShopOrderRefundStr.ParseToString().Contains("售后"))
+ {
+ if (!",2,3,4,5,7,8,10,31,".Contains("," + (order.after_sales?.after_sales_status).ParseToString() + ","))
+ {
+ // 待发货直接售后,并通知中转仓接口修改退货状态
+ var afterSaleRst = PddTransitAutoAfterSale(order);
+ isUpdate = true;
+ }
+ }
+ if (order.TransitWarehouseRawMessage.ParseToString().Contains("超出派送范围"))
+ {
+ if (!",2,3,4,5,7,8,10,31,".Contains("," + (order.after_sales?.after_sales_status).ParseToString() + ","))
+ {
+ // 待发货直接售后,并通知中转仓接口修改退货状态
+ var afterSaleRst = PddTransitAutoAfterSale(order);
+ isUpdate = true;
+ }
+ }
+ SendTransitOrderE57(order);
+ }
+
+ if (order.order_sn == "260924-431226960203223")
+ {
+ }
+ if (order.ShopOrderIdStr == "3739392779260688128")
+ {
+ }
+ if (order.WxSendTypeStr == "直发")
+ {
+ if (GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill && !string.IsNullOrEmpty(order.tracking_number) && order.WxOrderStatus < 30)
+ if (!lstSyncLogistics.Any(o => o.order_id == order.order_sn) || lstSyncLogistics.Any(o => o.order_id == order.order_sn && o.tracking_number.IsNullOrEmpty()))
+ isUpdate = true;
+ }
+ if (isUpdate && !string.IsNullOrEmpty(order.ShopOrderIdStr)/* && order.WxSendTypeStr != "直发"*/)
+ {
+
+ // 买手订单状态记录到数据库
+ order_pdd_buyer_order pddBuyerOrder = new order_pdd_buyer_order()
+ {
+ after_sales_status = (order.after_sales?.after_sales_status).ParseToInt(),
+ buyerId = order.buyerId,
+ buyerName = order.buyerName,
+ order_amount = order.order_amount.ParseToInt(),
+ order_sn = order.order_sn,
+ order_status_prompt = order.order_status_prompt,
+ outExpressCompanyCode = order.outExpressCompanyCode,
+ order_time = order.order_time,
+ pre_allocated_order_no = order.PreAllocatedOrderNoStr.ParseToInt(),
+ tracking_number = order.tracking_number,
+ TransitCreateTime = order.TransitCreateTime,
+ //TransitPickupTime = order.TransitPickupTime,
+ wx_order_id = order.ShopOrderIdStr,
+ wx_sku_id = order.ShopOrderSkuIdStr,
+ wx_send_type = order.WxSendTypeStr == "直发" ? 1 : 0,
+ };
+ var url3 = BaseClass.Build29WxObjString("order/wx_add_mdy_buyer_order");
+ var data3 = UserLogin.GetSignaturex();
+ data3 += "&after_sales_status=" + pddBuyerOrder.after_sales_status;
+ data3 += "&buyerId=" + pddBuyerOrder.buyerId;
+ data3 += "&buyerName=" + pddBuyerOrder.buyerName;
+ data3 += "&order_amount=" + pddBuyerOrder.order_amount;
+ data3 += "&pdd_order_sn=" + pddBuyerOrder.order_sn;
+ data3 += "&order_status_prompt=" + pddBuyerOrder.order_status_prompt;
+ data3 += "&outExpressCompanyCode=" + pddBuyerOrder.outExpressCompanyCode;
+ data3 += "&order_time=" + pddBuyerOrder.order_time;
+ data3 += "&pre_allocated_order_no=" + pddBuyerOrder.pre_allocated_order_no;
+ data3 += "&tracking_number=" + pddBuyerOrder.tracking_number;
+ data3 += "&TransitCreateTime=" + pddBuyerOrder.TransitCreateTime.ToString("yyyy-MM-dd HH:mm:ss");
+ //data3 += "&TransitPickupTime=" + pddBuyerOrder.TransitPickupTime.ToString("yyyy-MM-dd HH:mm:ss");
+ data3 += "&wx_order_id=" + pddBuyerOrder.wx_order_id;
+ data3 += "&wx_sku_id=" + pddBuyerOrder.wx_sku_id;
+ data3 += "&wx_send_type=" + pddBuyerOrder.wx_send_type;
+ var html3 = GetHtml.PostUtf8(url3, data3);
+ if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
+ html3 = GetHtml.PostUtf8(url3, data3);
+
+ //勾选了调用同步单接口,必须直发且库里已有物流单号
+ if (order.WxSendTypeStr == "直发")
+ {
+ if (GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill && !string.IsNullOrEmpty(order.tracking_number) && html3.Contains("\"code\":200"))
+ if (!lstSyncLogistics.Any(o => o.order_id == order.order_sn) || lstSyncLogistics.Any(o => o.order_id == order.order_sn && o.tracking_number.IsNullOrEmpty()))
+ SendAsyncWaybillOrder(order);
+ }
+ }
+
+ if (order.order_sn == "260924-431226960203223")
+ {
+
+ }
+
+ // 填写取件码
+ if (order.WxSendTypeStr == "直发")
+ {
+ if (GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill && !string.IsNullOrEmpty(order.tracking_number))
+ {
+ if (lstSyncLogistics.Any(o => o.order_id == order.order_sn))
+ if (lstSyncLogistics.Any(o => o.order_id == order.order_sn && (o.upload_pickup_status == 0 || o.pickup_code.IsNullOrEmpty())))
+ SetPickUpNo(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"))
+ //if (!data.Contains("/complaints_new_detail.html?after_sales_id="))
+ {
+ Dispatcher.Invoke(new Action(() =>
+ {
+ lblMsg.Content = buyer.buyer_name + " 获取到空售后列表,退出自动滑动 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+ }));
+ currentReadBuyer = "";
+ //return;
+ }
+ //{\"error_code\":50000,\"error_msg\":\"http error:504\"}
+ //{"errorCode":72004,"errorMsg":"","error_code":72004,"error_msg":"","result":null}
+ if (data.Contains("\"error_code\":40001") || data.Contains("\"error_code\":50000") || data.Contains("\"error_code\":72004"))
+ {
+ PddMobileLoginViewModel.CheckBuyerLogin(new List { buyer }, false);
+ if (buyer.status == "掉线")
+ currentReadBuyer = "";
+ 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());
+
+ var out_order_nos = string.Join(",", list.Select(bo => bo.orderSn));
+ var transitOrderList = GetOrderTransitWarehouseInfo(out_order_nos);
+ var orderExtList = GetOrderItemExtInfo(out_order_nos);
+
+ // 根据仓库订单和扩展订单获取微信订单信息
+ var order_id_lst = transitOrderList.Select(ts => ts.order_no).ToList();
+ order_id_lst.AddRange(orderExtList.Select(ts => ts.order_id));
+ var order_ids = string.Join(",", order_id_lst.Distinct());
+
+ var orders = GetOrderInfo(order_ids);
+ foreach (var order in orders)
+ {
+ foreach (var orderItem in order.orderItems)
+ {
+ if (orderItem.ItemOrder.orderItems.Count > 1)
+ orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id && t.order_sku_id == orderItem.sku_id));
+ else
+ orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id));
+ }
+ }
+ // 获取订单售后,暂时关闭,使用订单详情售后状态字段
+ //var refunds = GetOrderRefundInfo(order_ids);
+ var buyerAfterSales = GetOrderAfterSales(order_ids);
+
+ // 实时更新订单,暂时作废
+ //MainWindow.Instance.orderListCtrl.GetOrder(order_ids);
+
+ foreach (PddBuyerAfterSaleLiteInfo af in list)
+ {
+ af.buyerId = buyer.buyer_id;
+ af.buyerName = buyer.buyer_name;
+
+ oms_wei_external_procurement_log_info transitItem = null;
+ oms_wei_order_info shopOrder = null;
+ oms_wei_order_item_info orderItem = null;
+ //oms_wei_refund_info refundItem = null;
+ order_pdd_buyer_after_sale buyerAfterSale = null;
+
+ // 查找店铺订单并更新店铺订单状态
+ // 直发订单
+ var orderItemExt = orderExtList.FirstOrDefault(oie => oie.out_order_id == af.orderSn && oie.buy_type == "直发");
+ if (orderItemExt != null)
+ {
+ af.WxSendTypeStr = "直发";
+ af.ShopOrderIdStr = orderItemExt.order_id;
+ af.ShopOrderSkuIdStr = orderItemExt.sku_id;
+ af.sendStatus = "";
+ var wxOrder = orders.FirstOrDefault(ord => ord.order_id == af.ShopOrderIdStr);
+ if (wxOrder != null)
+ {
+ var wxOrderItem = wxOrder.orderItems.FirstOrDefault(oi => oi.sku_id == af.ShopOrderSkuIdStr);
+ if (wxOrderItem != null)
+ {
+ af.ShopOrderSkuNameStr = wxOrderItem.SkuAttrStr;
+ af.ShopOrderOutAfterSaleStatusStr = wxOrder.out_after_sale_status;
+ }
+ }
+ }
+ else
+ {
+ transitItem = transitOrderList.FirstOrDefault(t1 => t1.out_order_no == af.orderSn);
+ if (transitItem != null)
+ {
+ shopOrder = orders.FirstOrDefault(o1 => o1.order_id == transitItem.order_no);
+ orderItem = shopOrder?.orderItems.FirstOrDefault(oi => oi.ItemTransitOrders.Any(t1 => t1.out_order_no == af.orderSn));
+ buyerAfterSale = buyerAfterSales.FirstOrDefault(ba => ba.orderSn == transitItem.out_order_no && !ba.afterSaleAddress.IsNullOrEmpty());
+ //refundItem = refunds.FirstOrDefault(ri => ri.order_id == orderItem?.order_id) ?? orderItem?.ItemRefund;
+
+ UpdateAfterSaleStatus(af, shopOrder, orderItem, transitItem, buyerAfterSale);
+ }
+ }
+
+ if (af.ShopOrderIdStr == "3738122233932312576" || af.orderSn== "260803-433020014881353") //260803-433020014881353
+ {
+
+ }
+
+ bool isUpdate = false;
+ PddBuyerAfterSaleLiteInfo afterSale = null;
+ //lock (locker)
+ var success = false;
+ for (int i = 0; i < 10 && success == false; i++)
+ {
+ Thread.Sleep(1);
+ try
+ {
+ afterSale = lstPddBuyerAfterSaleInfoLite.ToList().FirstOrDefault(aft => aft.afterSalesId == af.afterSalesId);
+ success = true;
+ }
+ catch
+ {
+ }
+ }
+ if (afterSale == null)
+ {
+ isUpdate = true;
+ afterSale = af;
+ lstPddBuyerAfterSaleInfoLite.Add(afterSale);
+ }
+ else
+ {
+ var afterSaleTmp = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(afterSale));
+ //afterSaleTmp.sendStatus = ""; // 比较订单变化,如果有变化,才写库或者处理(设置为空强制变化)
+ afterSaleTmp.AfterSaleStatusOldStr = null; // 设置null,比较订单变化,如果有变化,才写
+ 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}}"
+ var afterSaleTmpStr = JsonHelper.SerializeObject(afterSaleTmp);
+ var afTmpStr = JsonHelper.SerializeObject(afTmp);
+ if (JsonHelper.SerializeObject(afterSaleTmp) != JsonHelper.SerializeObject(afTmp))
+ {
+ isUpdate = true;
+
+ afterSale.WxSendTypeStr = af.WxSendTypeStr;
+ if (afterSale.WxSendTypeStr == "直发")
+ {
+ //if (order.order_status_prompt.Contains("待发货") && !o.order_status_prompt.Contains("待发货"))
+ // order.sendStatus = "";
+ //if (order.sendStatus == "已发送待发货订单" && o.order_status_prompt.Contains("待收货"))
+ // order.sendStatus = "";
+ }
+ else if (!af.sendStatus.IsNullOrEmpty())
+ {
+ afterSale.sendStatus = af.sendStatus;
+ }
+
+ 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));
+
+ afterSale.TransitCreateTime = af.TransitCreateTime;
+ afterSale.TransitPickupTime = af.TransitPickupTime;
+ afterSale.WxOrderCreateTime = af.WxOrderCreateTime;
+ afterSale.ShopIdStr = af.ShopIdStr;
+ afterSale.ShopOrderIdStr = af.ShopOrderIdStr;
+ afterSale.ShopOrderSkuIdStr = af.ShopOrderSkuIdStr;
+ afterSale.ShopOrderSkuNameStr = af.ShopOrderSkuNameStr;
+ afterSale.ShopOrderOutAfterSaleStatusStr = af.ShopOrderOutAfterSaleStatusStr;
+ afterSale.TransitBuyerOrderRefundStatus = af.TransitBuyerOrderRefundStatus;
+ afterSale.TransitWarehouseIdStr = af.TransitWarehouseIdStr;
+ afterSale.TransitWarehouseOrderCodeStr = af.TransitWarehouseOrderCodeStr;
+ afterSale.Express1WaybillStr = af.Express1WaybillStr;
+ afterSale.Express1CompanyStr = af.Express1CompanyStr;
+ afterSale.Express2WaybillStr = af.Express2WaybillStr;
+ afterSale.Express2CompanyStr = af.Express2CompanyStr;
+ afterSale.TransferWareHouseStatus = af.TransferWareHouseStatus;
+ afterSale.WxOrderVoidStatus = af.WxOrderVoidStatus;
+ afterSale.PreAllocatedOrderNoStr = af.PreAllocatedOrderNoStr;
+ afterSale.ShopOrderRefundStr = af.ShopOrderRefundStr;
+ afterSale.AfterSaleAddress = af.AfterSaleAddress;
+ //afterSale.wxRefundStatus = af.wxRefundStatus;
+
+ // 移除,添加 自动更新列表显示
+ Dispatcher.Invoke(new Action(() =>
+ {
+ var index = lstPddBuyerAfterSaleInfoLite.IndexOf(afterSale);
+ lstPddBuyerAfterSaleInfoLite.Remove(afterSale);
+ lstPddBuyerAfterSaleInfoLite.Insert(index, afterSale);
+ }));
+ }
+ }
+ // 过滤显示订单
+ if (filterOneBuyerAfterSale(afterSale) == false)
+ {
+ Dispatcher.Invoke(new Action(() =>
+ {
+ var afterSaleExist = lstFilterPddBuyerAfterSaleInfoLite.FirstOrDefault(afe => afe.orderSn == afterSale.orderSn);
+ if (afterSaleExist == null)
+ {
+ lstFilterPddBuyerAfterSaleInfoLite.Add(afterSale);
+ }
+ else
+ {
+ var index = lstFilterPddBuyerAfterSaleInfoLite.IndexOf(afterSaleExist);
+
+ lstFilterPddBuyerAfterSaleInfoLite.Remove(afterSaleExist);
+ lstFilterPddBuyerAfterSaleInfoLite.Insert(index, afterSale);
+ }
+ }));
+ }
+
+ 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 (afterSale?.ShopIdStr == "3738859887048176128")
+ {
+
+ }
+
+ // 记录直发或者中转仓订单买手售后情况
+ if (isUpdate && !string.IsNullOrEmpty(afterSale?.ShopOrderIdStr))
+ {
+ if (afterSale.WxSendTypeStr == "直发")
+ {
+ // 退款状态有变化才发起修改(退款状态不能从退款成功变成未退款)
+ PddBuyerAfterSaleLiteInfo afterSaleRefundSuccessExist = null;
+ afterSaleRefundSuccessExist = lstPddBuyerAfterSaleInfoLite.ToList().FirstOrDefault(a => a.afterSalesId != afterSale.afterSalesId &&
+ a.orderSn == afterSale.orderSn && !string.IsNullOrEmpty(a.AfterSaleStatusStr) && (a.AfterSaleStatusStr.Contains("退款成功") || a.AfterSaleStatusStr.Contains("交易已取消")));
+
+ if ((afterSaleRefundSuccessExist == null || afterSale.AfterSaleStatusStr == afterSaleRefundSuccessExist.AfterSaleStatusStr) &&
+ (afterSale.AfterSaleStatusOldStr != afterSale.AfterSaleStatusStr))
+ {
+ SendAfterSaleE57(afterSale);
+ afterSale.AfterSaleStatusOldStr = afterSale.AfterSaleStatusStr;
+ }
+ }
+ else
+ {
+ // 如果买手退款成功,仓库不是买手退款成功,则修改仓库售后字段为买手退款成功
+ if (afterSale.AfterSaleStatusStr.Contains("退款成功") || afterSale.AfterSaleStatusStr.Contains("交易已取消"))
+ {
+ if (afterSale.TransitBuyerOrderRefundStatus != "买手退款成功")
+ {
+ var orderTmp = new PddBuyerOrderLiteInfo() { ShopOrderIdStr = afterSale.ShopOrderIdStr, order_sn = afterSale.orderSn };
+ var refundRst = SendTransitAfterSaleE57(orderTmp, "买手退款成功");
+ if (refundRst.Contains("0") || refundRst.Contains("200"))
+ {
+ afterSale.afterSaleSendStatus = "退款成功 买手退款信息更新成功";
+ }
+ else
+ {
+ var msg = BaseRegex.GetStringXml(ref refundRst, "msg");
+ afterSale.afterSaleSendStatus = "退款成功 买手退款信息更新失败,服务端返回 " + msg;
+ }
+ }
+ }
+ // 如果中转仓表买手售后状态不等于买手售后单售后,更新仓库买手售后状态
+ else if (afterSale.TransitBuyerOrderRefundStatus != "买手退款成功" && afterSale.TransitBuyerOrderRefundStatus != afterSale.AfterSaleStatusStr)
+ {
+ if (afterSale.ShopOrderIdStr == "3738552208766960384")
+ {
+
+ }
+ var afterSaleExistList = lstPddBuyerAfterSaleInfoLite.Where(a => a.orderSn == afterSale.orderSn).ToList();
+
+ if ((afterSale.AfterSaleStatusStr == "退款失败" || afterSale.AfterSaleStatusStr == "申请已撤销") &&
+ afterSaleExistList.Any(a => a.AfterSaleStatusStr != "退款失败" && a.AfterSaleStatusStr != "申请已撤销"))
+ {
+ }
+ else
+ {
+ //if (!afterSale.AfterSaleStatusStr.Contains("关闭") && !afterSale.AfterSaleStatusStr.Contains("撤销") && !afterSale.AfterSaleStatusStr.Contains("失败"))
+ var orderTmp = new PddBuyerOrderLiteInfo() { ShopOrderIdStr = afterSale.ShopOrderIdStr, order_sn = afterSale.orderSn };
+ var refundRst = SendTransitAfterSaleE57(orderTmp, afterSale.AfterSaleStatusStr);
+ if (refundRst.Contains("0") || refundRst.Contains("200"))
+ {
+ afterSale.afterSaleSendStatus = "买手退款信息更新成功";
+ }
+ else
+ {
+ var msg = BaseRegex.GetStringXml(ref refundRst, "msg");
+ afterSale.afterSaleSendStatus = "买手退款信息更新失败,服务端返回 " + msg;
+ }
+ }
+ }
+ }
+ }
+
+ // 买手已退款,尝试作废仓库订单
+ if (isUpdate && afterSale.TransitBuyerOrderRefundStatus == "买手退款成功" && afterSale.WxSendTypeStr != "直发")
+ {
+ // 订单是未退款的仓库单(因一个微信订单,可以作废重拍多次,可能存在多个拼多多买手单,此处要使用买手单号对应的 transitItem 作为是否作废的判断依据
+ if (orderItem != null && orderItem.refund_status <= 1 && transitItem != null && transitItem.order_void_status == 0)
+ {
+ // 如果当前账户店铺有订单未发货,尝试作废订单。
+ if (shopOrder != null && shopOrder.status == 20 && GlobalConfig.ShopLoginList.Any(s => s.ErpShopId.ParseToLong() == shopOrder.shop_id))
+ {
+ // 260718-221343925901688
+ // 260718-626513702541688
+ // 3737821766770121728
+ // 3737821766770121728
+ // 单次读取的订单放到一个列表,如果列表有就不再调用(每次订单列表模拟读取会有重复调用的可能)
+ if (!lstPddBuyerOrderVoidAfterSaleOrderSn.Contains(orderItem.order_id + orderItem.sku_id))
+ {
+ lstPddBuyerOrderVoidAfterSaleOrderSn.Add(orderItem.order_id + orderItem.sku_id);
+ OrderListRowItemCtrl.VoidOrder(orderItem, true);
+ }
+ }
+ }
+ }
+
+ // 获取买手退款地址并显示,如果是中转仓,填写退货地址并发送包裹
+ if (isUpdate && !string.IsNullOrEmpty(afterSale?.ShopOrderIdStr))
+ {
+ // 待用户发货 获取地址
+ if(string.IsNullOrWhiteSpace(afterSale.AfterSaleAddress))
+ {
+ }
+ }
+
+ // 记录到买手退货表
+ if (isUpdate && !string.IsNullOrEmpty(afterSale?.ShopOrderIdStr) /* && afterSale.WxSendTypeStr != "直发"*/)
+ {
+ // 买手退款单状态记录到数据库
+ order_pdd_buyer_after_sale pddBuyerAfterSale = new order_pdd_buyer_after_sale()
+ {
+ wx_send_type = afterSale.WxSendTypeStr == "直发" ? 1 : 0,
+ buyerId = afterSale.buyerId,
+ buyerName = afterSale.buyerName,
+ orderAmount = (afterSale.listItemAmountVO?.orderAmount).ParseToInt(),
+ orderSn = afterSale.orderSn,
+ afterSalesId = afterSale.afterSalesId.ParseToString(),
+ orderDate = afterSale.orderDate,
+ pre_allocated_order_no = afterSale.PreAllocatedOrderNoStr.ParseToInt(),
+ TransitCreateTime = afterSale.TransitCreateTime,
+ //TransitPickupTime = order.TransitPickupTime,
+ wx_order_id = afterSale.ShopOrderIdStr,
+ wx_sku_id = afterSale.ShopOrderSkuIdStr,
+ refundAmount = afterSale.listItemAmountVO?.refundAmount,
+ statusText = afterSale.AfterSaleStatusStr,
+ };
+ var url3 = BaseClass.Build29WxObjString("order/wx_add_mdy_buyer_after_sale");
+ var data3 = UserLogin.GetSignaturex();
+ data3 += "&wx_order_id=" + pddBuyerAfterSale.wx_order_id;
+ data3 += "&wx_sku_id=" + pddBuyerAfterSale.wx_sku_id;
+ data3 += "&TransitCreateTime=" + pddBuyerAfterSale.TransitCreateTime.ToString("yyyy-MM-dd HH:mm:ss");
+ data3 += "&pre_allocated_order_no=" + pddBuyerAfterSale.pre_allocated_order_no;
+ data3 += "&buyerId=" + pddBuyerAfterSale.buyerId;
+ data3 += "&buyerName=" + pddBuyerAfterSale.buyerName;
+ data3 += "&orderAmount=" + pddBuyerAfterSale.orderAmount;
+ data3 += "&orderSn=" + pddBuyerAfterSale.orderSn;
+ data3 += "&afterSalesId=" + pddBuyerAfterSale.afterSalesId;
+ data3 += "&orderDate=" + pddBuyerAfterSale.orderDate;
+ //data3 += "&TransitPickupTime=" + pddBuyerOrder.TransitPickupTime.ToString("yyyy-MM-dd HH:mm:ss");
+ data3 += "&refundAmount=" + pddBuyerAfterSale.refundAmount;
+ data3 += "&statusText=" + pddBuyerAfterSale.statusText;
+ data3 += "&wx_send_type=" + pddBuyerAfterSale.wx_send_type;
+
+ if(pddBuyerAfterSale.wx_send_type == 1)
+ {
+
+ }
+
+ var html3 = GetHtml.PostUtf8(url3, data3);
+ if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
+ html3 = GetHtml.PostUtf8(url3, data3);
+ }
+ }
+ NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_after_sale_list", lstPddBuyerAfterSaleInfoLite);
+ }
+
+
+ TimeSpan PauseTick = new TimeSpan(1);
+ private void chkAutoReadBuyerOrder_CheckedChanged(object sender, RoutedEventArgs e)
+ {
+ if (isLoad)
+ {
+ buyerReadOrderConfig.IsAutoReadOrder = chkAutoReadBuyerOrder.IsChecked == true;
+ NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_config", buyerReadOrderConfig);
+ //buyerOrderConfig = NaiBa.Util.Helper.ConfigHelper.LoadConfig("pdd_buyer_order_config");
+
+ if (buyerReadOrderConfig.IsAutoReadOrder)
+ nextGetOrderTime = DateTime.Now + PauseTick;
+ else
+ PauseTick = nextGetOrderTime - DateTime.Now;
+ }
+ }
+
+ private void btnSearch_Click(object sender, RoutedEventArgs e)
+ {
+ GetOrderAndAfterSale();
+ }
+
+ void GetOrderAndAfterSale()
+ {
+ GetPddOrder();
+ //MakeWxToPddAfterSales();
+
+ nextGetOrderTime = DateTime.Now.AddMinutes(25);
+ }
+
+ void GetPddOrder()
+ {
+ isReadBuyerOrder = true;
+ lstPddBuyerOrderVoidAfterSaleOrderSn.Clear();
+
+ 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)
+ {
+ 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;
+ }
+ }));
+
+ if (tokenSource.IsCancellationRequested)
+ break;
+
+ PddMobileLoginViewModel.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 && buyer.wpf_browser.IsBrowserInitialized)
+ {
+ 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));
+ t.Wait();
+
+ 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));
+
+ 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 == 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 + " 售后读取中"; }));
+ BindBuyer(buyer, "正在读取售后");
+
+ top = 0;
+ times = 0;
+ lastCefReadOrderTime = DateTime.Now;
+ while (currentReadBuyer == readBuyer)
+ {
+ if (isSkipNext)
+ break;
+
+ if (tokenSource.IsCancellationRequested)
+ {
+ BindBuyer(buyer, "已取消读取");
+ break;
+ }
+
+ if (lastCefReadOrderTime < DateTime.Now.AddSeconds(-30))
+ {
+ PddMobileLoginViewModel.CheckBuyerLogin(new List() { buyer });
+ if (buyer.status != "在线")
+ {
+ BindBuyer(buyer, "店铺掉线");
+ break;
+ }
+ BindBuyer(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);
+ }
+ }
+ 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");
+
+ 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 + " 待发货读取中"; }));
+ BindBuyer(buyer, "正在读取待发货");
+
+ top = 0;
+ lastCefReadOrderTime = DateTime.Now;
+ while (currentReadBuyer == readBuyer)
+ {
+ if (isSkipNext)
+ break;
+
+ if (tokenSource.IsCancellationRequested)
+ {
+ BindBuyer(buyer, "已取消读取");
+ break;
+ }
+
+ if (lastCefReadOrderTime < DateTime.Now.AddSeconds(-30))
+ {
+ PddMobileLoginViewModel.CheckBuyerLogin(new List() { buyer });
+ if (buyer.status != "在线")
+ {
+ BindBuyer(buyer, "店铺掉线");
+ break;
+ }
+ BindBuyer(buyer, "停滞时间超过30秒,跳过");
+ break;
+ }
+
+ if (times % 100 == 0)
+ {
+ PddMobileLoginViewModel.CheckBuyerLogin(new List() { buyer });
+ }
+ if (buyer.status != "在线")
+ break;
+ times++;
+
+ 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 (isSkipNext)
+ {
+ isSkipNext = false;
+ continue;
+ }
+ 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");
+
+ 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));
+
+ top = 0;
+ lastCefReadOrderTime = DateTime.Now;
+ while (currentReadBuyer == readBuyer)
+ {
+ if (isSkipNext)
+ break;
+
+ if (tokenSource.IsCancellationRequested)
+ {
+ BindBuyer(buyer, "已取消读取");
+ break;
+ }
+
+ if (lastCefReadOrderTime < DateTime.Now.AddSeconds(-30))
+ {
+ PddMobileLoginViewModel.CheckBuyerLogin(new List() { buyer });
+ if (buyer.status != "在线")
+ {
+ BindBuyer(buyer, "店铺掉线");
+ break;
+ }
+ BindBuyer(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);
+ }
+ }
+ if (isSkipNext)
+ {
+ isSkipNext = false;
+ continue;
+ }
+ if (tokenSource.IsCancellationRequested)
+ {
+ BindBuyer(buyer, "已取消读取");
+ break;
+ }
+ //Invoke(new Action(() =>
+ //{
+ // if (row.Cells["colMessage"].Value.ParseToString().StartsWith("正在读取"))
+ // BindBuyer(buyer, " ");
+ //}));
+ }
+ catch (Exception ex)
+ {
+ if (isSkipNext)
+ {
+ isSkipNext = false;
+ continue;
+ }
+ }
+ 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(() =>
+ {
+ var out_order_nos = buyerOrder.order_sn;
+ var transitOrderList = GetOrderTransitWarehouseInfo(out_order_nos);
+
+ var order_ids = string.Join(",", transitOrderList.Select(ts => ts.order_no));
+ var orders = GetOrderInfo(order_ids);
+ foreach (var order in orders)
+ {
+ foreach (var orderItem in order.orderItems)
+ {
+ // 中转仓订单
+ if (orderItem.ItemOrder.orderItems.Count > 1)
+ orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id && t.order_sku_id == orderItem.sku_id));
+ else
+ orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id));
+ }
+ }
+ //var refunds = GetOrderRefundInfo(order_ids);
+
+ // 查找店铺订单并更新店铺订单状态
+ //var ShopOrder = GlobalConfig.lstOrder.FirstOrDefault(o1 => o1.orderItems.Any(i1 => i1.ItemTransitOrders.Any(t1 => t1.out_order_no == buyerOrder.order_sn)));
+ //var ShopOrder = orders.FirstOrDefault(o1 => o1.orderItems.Any(i1 => i1.ItemTransitOrders.Any(t1 => t1.out_order_no == buyerOrder.order_sn)));
+ //if (ShopOrder != null)
+ var transit_item = transitOrderList.FirstOrDefault(t1 => t1.out_order_no == buyerOrder.order_sn);
+ if (transit_item != null)
+ {
+ var shopOrder = orders.FirstOrDefault(o => o.order_id == transit_item.order_no);
+ var order_item = shopOrder.orderItems.FirstOrDefault(oi => oi.ItemTransitOrders.Any(t1 => t1.out_order_no == buyerOrder.order_sn));
+ //var refund_item = refunds.FirstOrDefault(ri => ri.order_id == order_item.order_id) ?? order_item?.ItemRefund;
+
+ UpdateOrderStatus(buyerOrder, shopOrder, order_item, transit_item);
+ }
+
+ if (buyerOrder.WxSendTypeStr == "直发")
+ {
+ if (GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill)
+ SendAsyncWaybillOrder(buyerOrder, true);
+ else
+ SendOrderE57(buyerOrder);
+ }
+ else
+ 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 = "";
+ NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite);
+
+ // 仓库处理中
+ if (order.sendStatus.ParseToString().Contains("仓库处理中"))
+ {
+ // 仓库处理中超过10分钟认为已处理完成,否则跳过。
+ if (order.TransitCreateTime.AddMinutes(10) < DateTime.Now)
+ {
+ order.sendStatus = order.sendStatus.Replace("仓库处理中", "").Trim();
+ }
+ else
+ {
+ return;
+ }
+ }
+
+ // "已取号(更正)", 已取号, 提前取号, 取号失败
+ // 正在处理取号、已取号(包括提前取号更正的订单)、有售后或者没有中转仓(非中转系统订单)的订单,不发送
+ if (order.sendStatus == "已取号" || order.sendStatus == "已取号(更正)" ||
+ order.sendStatus.ParseToString().Contains("已作废") || order.sendStatus.ParseToString().Contains("售后") ||
+ order.TransitWarehouseIdStr.IsNullOrEmpty())
+ {
+ return;
+ }
+
+ // 物流单号为空,先判断是否需要提前取号,无需提前取号则直接返回
+ if (order.outExpressCompanyCode.IsNullOrEmpty() || order.tracking_number.IsNullOrEmpty())
+ {
+ // 如果是隔天订单,拍单20分钟后立即提前取号
+ if (!order.sendStatus.Contains("提前取号") && order.TransitCreateTime != DateTime.MinValue &&
+ DateTime.Now.Date > order.WxOrderCreateTime.Date && DateTime.Now > order.TransitCreateTime.AddMinutes(20))
+ {
+ JObject data = new JObject();
+ data["outOrderNo"] = order.order_sn;
+ //data["outOrderNo"] = order.TransitWarehouseOrderCodeStr;
+ data["warehouseCode"] = order.TransitWarehouseIdStr; //transit.TransId; // 中转仓仓库对应编码
+ data["platform"] = "WEISHOP";
+ var getVirtualTicketUrl = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/order/virtual/create";
+ var getVirtualTicketDataStr = JsonHelper.SerializeObject(data);
+
+ var getVirtualTicketRst = HttpResponseWXBLL.e57PostResponse(getVirtualTicketUrl, getVirtualTicketDataStr, "");
+ if (!getVirtualTicketRst.ParseToString().Contains("200") && !getVirtualTicketRst.ParseToString().Contains("0"))
+ {
+ string msg = "";
+ string code = "";
+ try
+ {
+ System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
+ xmlDoc.LoadXml(getVirtualTicketRst);
+ code = xmlDoc["AjaxResult"]["code"].InnerText;
+ msg = xmlDoc["AjaxResult"]["msg"].InnerText;
+ }
+ catch
+ {
+ msg = getVirtualTicketRst.ParseToString();
+ }
+ //BaseMsgForm.ShowError("拍单信息保存成功,接收到erp服务端传递的错误消息:" + msg, "订单提前取号失败");
+ order.sendStatus = "提前取号失败,服务端返回 " + msg;
+ }
+ }
+
+ return;
+ }
+
+ //// 如果物流不一致,提交物流信息 临时补救
+ //if (order.Express1CompanyStr != order.outExpressCompanyCode || order.Express1WaybillStr != order.tracking_number)
+ //{
+ // //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"))
+ // // html3 = GetHtml.PostUtf8(url3, data3);
+ // //if (html3.Contains("\"code\":200"))
+ // //{
+ // // order.sendStatus = "已提交";
+ // //}
+ //}
+ // 直接取号
+ if (order.sendStatus != "提前取号" && 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["outOrderNo"] = order.TransitWarehouseOrderCodeStr;
+ 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("0") || dispatchRst.Contains("200"))
+ {
+ var msg = BaseRegex.GetStringXml(ref dispatchRst, "msg");
+ order.sendStatus = "取号成功";
+ var shopOrder = GlobalConfig.lstOrder.FirstOrDefault(o => o.orderItems.Any(oi => oi.ItemTransitOrders.Any(t => t.out_order_no == order.order_sn)));
+ if (shopOrder != null)
+ {
+ var orderItem = shopOrder.orderItems.FirstOrDefault(oi => oi.ItemTransitOrders.Any(t => t.out_order_no == order.order_sn));
+ if (orderItem != null)
+ {
+ var transit = orderItem.ItemTransitOrders.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 = "直接取号失败,服务端返回 " + BaseRegex.GetStringXml(ref dispatchRst, "msg");
+ }
+ }
+ // 修改提前取号
+ else if (order.sendStatus == "提前取号" || order.sendStatus == "提前取号(旧订单)")
+ {
+ if (order.TransitPickupTime.AddHours(23) > DateTime.Now)
+ //if (order.TransitCreateTime.AddHours(23) > DateTime.Now)
+ {
+ order.sendStatus = "提前取号流程进行中";
+ return;
+ }
+
+ string url2 = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/update-upstream-waybill";
+ var data = new JObject();
+ data["outOrderNo"] = order.order_sn;
+ data["outExpressCompany"] = order.outExpressCompanyCode; // 物流公司编号
+ data["outExpressNo"] = order.tracking_number;
+ data["platform"] = "WEISHOP";
+ data["orderCode"] = order.TransitWarehouseOrderCodeStr; // 中转仓订单唯一标识码 = 外采订单号
+ var dataStr2 = JsonHelper.SerializeObject(data);
+ var dispatchRst = HttpResponseWXBLL.e57PostResponse(url2, dataStr2, "");
+
+ if (dispatchRst.Contains("0") || dispatchRst.Contains("200"))
+ {
+ var msg = BaseRegex.GetStringXml(ref dispatchRst, "msg");
+ if (order.OrderTime < new DateTime(2026, 6, 29) /*order.sendStatus == "提前取号(旧订单)"*/)
+ {
+ var url3 = BaseClass.Build29WxObjString("order/wx_update_erp_allocated_order_no");
+ var data3 = UserLogin.GetSignaturex();
+ data3 += "&out_order_no=" + order.order_sn;
+ data3 += "&pre_allocated_order_no=" + 3;
+ var html3 = GetHtml.PostUtf8(url3, data3);
+ if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
+ html3 = GetHtml.PostUtf8(url3, data3);
+ }
+
+ order.sendStatus = "修改提前取号成功";
+ var shopOrder = GlobalConfig.lstOrder.FirstOrDefault(o => o.orderItems.Any(oi => oi.ItemTransitOrders.Any(t => t.out_order_no == order.order_sn)));
+ if (shopOrder != null)
+ {
+ var orderItem = shopOrder.orderItems.FirstOrDefault(oi => oi.ItemTransitOrders.Any(t => t.out_order_no == order.order_sn));
+ if (orderItem != null)
+ {
+ var transit = orderItem.ItemTransitOrders.FirstOrDefault(t => t.out_order_no == order.order_sn);
+ if (transit != null)
+ transit.pre_allocated_order_no = 1;
+ }
+ }
+ }
+ else
+ {
+ order.sendStatus = "修改提前取号失败,服务端返回 " + BaseRegex.GetStringXml(ref dispatchRst, "msg");
+ }
+ }
+ }
+
+ ///
+ /// 调用e57接口更新web端订单数据信息
+ ///
+ ///
+ /// 手动强制重置状态,一定重新发送
+ public void SendOrderE57(PddBuyerOrderLiteInfo order, bool resetSendStatus = false)
+ {
+ if (order == null)
+ return;
+ if (resetSendStatus)
+ order.sendStatus = "";
+ Thread.Sleep(100);
+
+ if (GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill)
+ {
+ return;
+ }
+
+ if (order.sendStatus.ParseToString().Contains("同步单已发货"))
+ {
+ return;
+ }
+
+ if (order.sendStatus.ParseToString().Contains("外采订单已发货") || order.sendStatus.ParseToString().Contains("微信发货成功") ||
+ order.sendStatus.ParseToString().Contains("已发送待发货订单") || order.sendStatus.ParseToString().Contains("接收成功") ||
+ order.sendStatus.ParseToString().Contains("已发送售后订单"))
+ {
+ return;
+ }
+
+ JObject obj = new JObject();
+ obj["platform"] = "WEISHOP";
+ obj["outAmount"] = order.order_amount;
+ obj["outAccount"] = order.buyerName;
+ obj["outOrderNo"] = order.order_sn;
+ obj["orderId"] = order.ShopOrderIdStr;
+ if (!order.outPddToWxExpressCompanyCode.IsNullOrEmpty() && !order.tracking_number.IsNullOrEmpty())
+ {
+ obj["outExpressCompany"] = order.outPddToWxExpressCompanyCode;
+ obj["outExpressNo"] = order.tracking_number;
+ }
+ var dataStr = JsonHelper.SerializeObject(obj);
+ string url = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/bind/v2";
+ //成功 "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);
+ 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.ParseToString().Contains("微信发货成功"))
+ order.sendStatus = ("微信发货成功 " + sendStatusTmp).Trim();
+ if (code == "1" && !order.sendStatus.ParseToString().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);
+ }
+ }
+
+ public void SetPickUpNo(PddPickInfo pddPickInfo)
+ {
+ List orderSnTracks = new List();
+ foreach (var combine in pddPickInfo.combine_list)
+ {
+ foreach (var combine_track in combine.combine_track_list)
+ {
+ if (!orderSnTracks.Any(o => o.order_sn == combine_track.order_sn))
+ orderSnTracks.Add(combine_track);
+ }
+ }
+
+ if (orderSnTracks.Count == 0)
+ return;
+
+ //var syncOrderAllList = OrderListCtrl.GetSyncLogistics(string.Join(",", orderSnTracks.Select(o => o.order_sn)));
+ var syncOrderList = OrderListCtrl.GetSyncLogistics(string.Join(",", orderSnTracks.Select(o => o.order_sn)), 1);
+ foreach (var sOrder in syncOrderList)
+ {
+ var orderSnTrack = orderSnTracks.FirstOrDefault(o => o.order_sn == sOrder.order_id);
+ var pNull = orderSnTracks.Where(p => p.pick_code.IsNullOrEmpty()).ToList();
+ if (orderSnTrack.pick_code == null)
+ {
+
+ }
+ if (orderSnTrack != null && !string.IsNullOrEmpty(orderSnTrack.pick_code))
+ {
+ var pickupCode = orderSnTrack.pick_code.Replace("取件码", "").Replace("取件出示快递单号后五位", "").Trim();
+ if (!string.IsNullOrWhiteSpace(pickupCode))
+ {
+ var url4 = BaseClass.Build29WxObjString("vlc/UploadPickup");
+ var data4 = UserLogin.GetSignPostData(new
+ {
+ orderId = orderSnTrack.order_sn,
+ pickupCode = pickupCode,
+ });
+ var html4 = GetHtml.PostJson(url4, data4);
+ }
+ }
+ }
+ }
+
+ public void SetPickUpNo(PddBuyerOrderLiteInfo order)
+ {
+ try
+ {
+ var syncOrder = lstSyncLogistics.FirstOrDefault(o => o.order_id == order.order_sn);
+ if (syncOrder == null)
+ return;
+
+
+ if (lstSyncLogistics.Any(o => o.order_id == order.order_sn && (o.upload_pickup_status > 0 && o.pickup_code.IsNullOrEmpty())))
+ return;
+
+ var pickupCode = ""; // "21-22-2110";
+ //var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == order.buyerId);
+ //if (dicPddPickInfo.Keys.Contains(buyer))
+ foreach(var buyer in dicPddPickInfo.Keys)
+ {
+ try
+ {
+ var pddPickInfo = dicPddPickInfo[buyer];
+ foreach (var combine in pddPickInfo.combine_list)
+ {
+ foreach (var combine_track in combine.combine_track_list)
+ {
+ if (combine_track.order_sn == order.order_sn)
+ {
+ pickupCode = combine_track.pick_code.ParseToString().Replace("取件码", "").Replace("取件出示快递单号后五位", "").Trim();
+ }
+ }
+ }
+ }
+ catch
+ {
+ }
+ }
+
+ if (!string.IsNullOrEmpty(pickupCode))
+ {
+ // 填写取件码
+ var url4 = BaseClass.Build29WxObjString("vlc/UploadPickup");
+ var data4 = UserLogin.GetSignPostData(new
+ {
+ orderId = order.order_sn,
+ pickupCode = pickupCode,
+ });
+ var html4 = GetHtml.PostJson(url4, data4);
+ //{"data":true,"code":200,"msg":"操作成功","isSuccess":true}
+ }
+ }
+ catch
+ {
+
+ }
+ }
+
+ public void SendAsyncWaybillOrder(PddBuyerOrderLiteInfo order, bool showErrBox = false)
+ {
+ try
+ {
+ if (order.WxOrderStatus < 30 == false)
+ {
+ if (showErrBox) BaseMsgWindow.ShowError("订单已发货无需重复创建同步单!");
+ return;
+ }
+
+ // 取最新订单状态
+ var wxOrder = GetOrderInfo(order.ShopOrderIdStr).FirstOrDefault();
+ if (wxOrder == null)
+ throw new Exception("买手单对应微信订单不存在!");
+ var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ErpShopId == wxOrder.shop_id.ToString());
+ if (shop == null)
+ throw new Exception("买手单对应店铺不存在!");
+
+ if (order.WxOrderStatus < 30 == false)
+ {
+ if (showErrBox) BaseMsgWindow.ShowError("订单已发货无需重复创建同步单!");
+ return;
+ }
+
+ if (order.ShopOrderIdStr == "3739357317247975936")
+ {
+
+ }
+
+ //3739354841155797760
+ //3739338593856835840
+ //3739343419162669824
+ //3739334599561594624
+ //3739334374248562688
+ //3739334539482412288
+ var apiSearchDropship = new WxApiBLL().WxApiDropshipSearch(shop, order.ShopOrderIdStr, 100);
+ if (!apiSearchDropship.Contains("\"errcode\":0"))
+ throw new Exception("同步单代发查询失败!" + BaseRegex.GetStringJson(ref apiSearchDropship, "msg"));
+ var dsOrderId = JsonHelper.JObjectParse(apiSearchDropship)["ds_order_id_list"].FirstOrDefault().ParseToString();
+ if (string.IsNullOrEmpty(dsOrderId))
+ throw new Exception("同步单代发单号获取失败!");
+
+ var url3 = BaseClass.Build29WxObjString("vlc/Buy");
+ var data3 = UserLogin.GetSignPostData(new {
+ orderId = order.order_sn,
+ agentOrderId = dsOrderId,
+ });
+ var html3 = GetHtml.PostJson(url3, data3);
+ var test = "{\"data\":[{\"orderId\":\"260923-399088033421688\",\"trackingNumber\":\"37300000114322\",\"sourceTrackingNumber\":\"JT5528345110252\"}],\"code\":200,\"msg\":\"操作成功\",\"isSuccess\":true}";
+ //{"data":[{"orderId":"260923-399088033421688","trackingNumber":"37300000114322","sourceTrackingNumber":"JT5528345110252"}],"code":200,"msg":"操作成功","isSuccess":true}
+ //Result
+
+ if (html3.Contains("\"code\":200") || wxOrder.out_express_no != order.tracking_number)
+ {
+ var mainOrder = GlobalConfig.lstOrder.FirstOrDefault(o => o.order_id == order.ShopOrderIdStr);
+ if (mainOrder != null)
+ mainOrder.RealSyncWaybillId = mainOrder.SyncWaybillIdInfo = BaseRegex.GetStringJson(ref html3, "trackingNumber");
+
+ var url = BaseClass.Build29WxObjString("order/wx_update_erp_out_waybill_status");
+ var data = UserLogin.GetSignaturex();
+ data += "&order_id=" + order.ShopOrderIdStr;
+ data += "&out_express_company=" + order.outExpressCompanyCode;
+ data += "&out_express_no=" + order.tracking_number;
+ var html = GetHtml.PostUtf8(url, data);
+ if (!html.Contains("\"code\":200"))
+ html = GetHtml.PostUtf8(url, data);
+
+ // 更新拍单余额
+ StartUp.UpdateBalance();
+ }
+ else
+ {
+ var err = BaseRegex.GetStringJson(ref html3, "msg");
+ throw new Exception(err);
+ }
+ }
+ catch (Exception ex)
+ {
+ var mainOrder = GlobalConfig.lstOrder.FirstOrDefault(o => o.order_id == order.ShopOrderIdStr);
+ if (mainOrder != null)
+ {
+ var orderItem = mainOrder.orderItems?.FirstOrDefault(oi => oi.sku_id == order.ShopOrderSkuIdStr);
+ if (orderItem != null)
+ orderItem.SyncLogisticsMsg = ex.Message;
+ }
+
+ var url3 = BaseClass.Build29WxObjString("order/wx_add_mdy_buyer_order");
+ var data3 = UserLogin.GetSignaturex();
+ data3 += "&sync_logistics_msg=" + ex.Message;
+ data3 += "&pdd_order_sn=" + order.order_sn;
+ data3 += "&wx_order_id=" + order.ShopOrderIdStr;
+ data3 += "&wx_send_type=1";
+ var html3 = GetHtml.PostUtf8(url3, data3);
+ if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
+ html3 = GetHtml.PostUtf8(url3, data3);
+ if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
+ html3 = GetHtml.PostUtf8(url3, data3);
+
+ if (showErrBox)
+ {
+ BaseMsgWindow.ShowError("同步单创建失败:" + ex.Message);
+ }
+ }
+ }
+
+ // 向服务端更新售后退货信息更新状态 直发外采信息
+ public void SendAfterSaleE57(PddBuyerAfterSaleLiteInfo afterSale, bool resetSendStatus = false, bool isManualSendNoRecordCancelOrder = false)
+ {
+ if (resetSendStatus)
+ afterSale.sendStatus = "";
+
+ Thread.Sleep(100);
+
+ // 已退款成功且发送过的,不再发送
+ if (afterSale.listItemStatusVO.statusText.Contains("退款成功") && afterSale.sendStatus == "发送成功")
+ {
+ return;
+ }
+
+ JObject obj = new JObject();
+ obj["platform"] = "WEISHOP";
+ obj["outOrderNo"] = afterSale.orderSn;
+ //obj["order_id"] = afterSale.ShopOrderIdStr;
+ obj["orderId"] = afterSale.ShopOrderIdStr;
+ obj["afterSaleStatus"] = afterSale.listItemStatusVO.statusText;
+ var dataStr = JsonHelper.SerializeObject(obj);
+ string url = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/updateByOrderIdAfterSaleStatus";
+ //成功 "0SUCCESS"
+ //失败 已存在
+ //1505调用微信接口更新物流信息失败: 非法参数, 同运单号拦截 rid: 69d8ab9c-22baa3b1-67de0d95
+ var exportRst = HttpResponseWXBLL.e57PostResponse(url, dataStr, "");
+ for (int i = 0; i < 3 && exportRst.Contains("操作超时"); i++)
+ {
+ Thread.Sleep(210000);
+ HttpResponseWXBLL.e57PostResponse(url, dataStr, "");
+ }
+
+ if (exportRst.Contains("SUCCESS") || exportRst.Contains("更新外采订单的售后成功") || exportRst.Contains("0") || exportRst.Contains("200"))
+ {
+ afterSale.sendStatus = "发送成功";
+ NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_after_sale_list", lstPddBuyerAfterSaleInfoLite);
+ }
+ else
+ {
+ afterSale.sendStatus = "发送失败 服务端返回:" + BaseRegex.GetStringXmlByRegs(ref exportRst, exportRst, "msg");
+ NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_after_sale_list", lstPddBuyerAfterSaleInfoLite);
+ }
+
+ Dispatcher.Invoke(new Action(() =>
+ {
+ if (isManualSendNoRecordCancelOrder)
+ {
+ BaseMsgWindow.ShowInfo(afterSale.sendStatus);
+ }
+ }));
+ }
+
+ // 手动调用直发外采星系
+ public static string SendAfterSaleE57NeedManual(PddBuyerOrderLiteInfo order, string statusText)
+ {
+ Thread.Sleep(100);
+
+ // 发送过的,不再发送
+ if (order.OutAfterSaleStatusStr == statusText)
+ {
+ return "0SUCCESS";
+ }
+
+ JObject obj = new JObject();
+ obj["platform"] = "WEISHOP";
+ obj["outOrderNo"] = order.order_sn;
+ obj["orderId"] = order.ShopOrderIdStr;
+ obj["afterSaleStatus"] = statusText;
+ var dataStr = JsonHelper.SerializeObject(obj);
+ string url = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/updateByOrderIdAfterSaleStatus";
+ //成功 "0SUCCESS"
+ var exportRst = HttpResponseWXBLL.e57PostResponse(url, dataStr, "");
+ for (int i = 0; i < 3 && exportRst.Contains("操作超时"); i++)
+ {
+ Thread.Sleep(210000);
+ HttpResponseWXBLL.e57PostResponse(url, dataStr, "");
+ }
+
+ if (exportRst.Contains("SUCCESS") || exportRst.Contains("更新外采订单的售后成功") || exportRst.Contains("0") || exportRst.Contains("200"))
+ {
+ order.OutAfterSaleStatusStr = statusText;
+ return exportRst;
+ }
+ else
+ {
+ BaseMsgWindow.ShowAnimateMessage("订单 " + order.ShopOrderIdStr + " 修改售后状态失败 服务端返回:" + BaseRegex.GetStringXmlByRegs(ref exportRst, exportRst, "msg"), "Error", 6);
+ return exportRst;
+ }
+ }
+
+ ///
+ /// 通过服务端批量读取微信售后并触发拼多多售后或显示提示供买手手动退货
+ ///
+ public void MakeWxToPddAfterSales()
+ {
+ Task.Run(() =>
+ {
+ while (isReadBuyerOrder)
+ {
+ Thread.Sleep(500);
+ }
+
+ 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)
+ //{
+ // PddAutoAfterSale(order);
+ //}
+ }
+ }
+ catch (Exception ex)
+ {
+ }
+ }
+ }
+ });
+ }
+
+ ///
+ /// 处理一条售后,未发货的直接售后
+ ///
+ ///
+ ///
+ public string PddTransitAutoAfterSale(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.ShopOrderIdStr == "3737553300321619456")
+ {
+
+ }
+
+ if (!order.order_status_prompt.Contains("待发货"))
+ {
+ // 如果中转单没记录买手售后,写入买手售后信息
+ if (order.TransitBuyerOrderRefundStatus.IsNullOrEmpty())
+ {
+ var refundRst = SendTransitAfterSaleE57(order, "买手已发货,需手动申请售后");
+ }
+ return "{\"success\":false,\"msg\":\"仅未发货单可以自动退货\"}";
+ }
+
+ var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == order.buyerId);
+ var afterSaleRst = SimPddAfterSale(buyer, order);
+ if (afterSaleRst.Contains("\"after_sales_status\":1") || afterSaleRst.Contains("该订单已全额退款"))
+ {
+ // 保存退款成功状态
+ order.order_status_prompt = "退款成功";
+ // 中转仓订单买手号售后信息 存到服务端
+ var refundRst = SendTransitAfterSaleE57(order);
+ if (refundRst.Contains("0") || refundRst.Contains("200"))
+ {
+ order.sendStatus = "退款成功 买手退款信息更新成功";
+ }
+ else
+ {
+ var msg = BaseRegex.GetStringXml(ref refundRst, "msg");
+ order.sendStatus = "退款成功 买手退款信息更新失败,服务端返回 " + msg;
+ }
+ NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite);
+ return "{\"success\":true,\"msg\":\"操作成功\"}";
+ }
+ else
+ {
+ var error_msg = BaseRegex.GetStringJsonByRegs(ref afterSaleRst, afterSaleRst, "msg", "error_msg");
+ if (string.IsNullOrEmpty(error_msg))
+ error_msg = afterSaleRst;
+ return "{\"success\":false,\"msg\":\"" + error_msg + "\"}";
+ }
+ }
+
+
+ ///
+ /// 处理一条直发拍单的售后,未发货的直接售后
+ ///
+ ///
+ ///
+ public string PddDirectAutoAfterSale(PddBuyerOrderLiteInfo order)
+ {
+ if (!order.order_status_prompt.Contains("待发货"))
+ {
+ if (order.OutAfterSaleStatusStr.IsNullOrEmpty())
+ {
+ var refundRst = SendAfterSaleE57NeedManual(order, "已发货,需手动申请售后");
+ }
+ return "{\"success\":false,\"msg\":\"仅未发货单可以自动退货\"}";
+ }
+
+ var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == order.buyerId);
+ var afterSaleRst = SimPddAfterSale(buyer, order);
+ if (afterSaleRst.Contains("\"after_sales_status\":1") || afterSaleRst.Contains("该订单已全额退款"))
+ {
+ // 保存退款成功状态
+ order.order_status_prompt = "退款成功";
+ // 中转仓订单买手号售后信息 存到服务端
+ var refundRst = SendAfterSaleE57NeedManual(order, "退款成功");
+ if (refundRst.Contains("0") || refundRst.Contains("200"))
+ {
+ order.sendStatus = "退款成功 买手退款信息更新成功";
+ }
+ else
+ {
+ var msg = BaseRegex.GetStringXml(ref refundRst, "msg");
+ order.sendStatus = "退款成功 买手退款信息更新失败,服务端返回 " + msg;
+ }
+ NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite);
+ return "{\"success\":true,\"msg\":\"操作成功\"}";
+ }
+ else
+ {
+ var error_msg = BaseRegex.GetStringXmlByRegs(ref afterSaleRst, afterSaleRst, "msg", "error_msg");
+ if (string.IsNullOrEmpty(error_msg))
+ error_msg = afterSaleRst;
+ return "{\"success\":false,\"msg\":\"" + error_msg + "\"}";
+ }
+ }
+
+ ///
+ /// 未发货直接退款
+ ///
+ ///
+ ///
+ ///
+ public static string SimPddAfterSale(BuyerLoginInfo buyer, PddBuyerOrderLiteInfo order)
+ {
+ 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)
+ {
+ return "{\"success\":false,\"msg\":\"订单未付款\"}";
+ }
+ 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);
+ return afterSaleRst;
+ }
+
+ ///
+ /// 拒收后申请退款
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static string SimPddAfterSaleWithRejected(BuyerLoginInfo buyer, PddBuyerOrderLiteInfo order, order_pdd_buyer_after_sale pddBuyerAfterSale = null)
+ {
+ 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");
+ var afterSalesId = BaseRegex.GetIntJson(ref rst, "afterSalesId");
+ if (shippingStatus == -1)
+ return "{\"success\":false,\"msg\":\"订单未付款,无法拒收退款\"}";
+ if (shippingStatus == 0)
+ 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\":\"退货信息获取失败,请检查买手是否掉线\"}";
+ }
+ if (pddBuyerAfterSale != null)
+ {
+ pddBuyerAfterSale.refundAmount = refundAmount;
+ }
+ Thread.Sleep(Randomx.GetId(1000, 2000));
+ var afterSaleRst = YkdBuyerOrder.SetOrderAfterSaleWithRejected(buyer, mobile, order.order_sn, applyAmount, refundAmount, newMaxApplyAmount);
+ return afterSaleRst;
+ }
+
+ ///
+ /// 申请拼多多买手退货退款
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static string SimPddAfterSaleWithReturnGoods(BuyerLoginInfo buyer, PddBuyerOrderLiteInfo order, order_pdd_buyer_after_sale pddBuyerAfterSale = null)
+ {
+ 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");
+ var afterSalesId = BaseRegex.GetIntJson(ref rst, "afterSalesId");
+ if (shippingStatus == -1)
+ return "{\"success\":false,\"msg\":\"订单未付款,无法退货退款\"}";
+ if (shippingStatus == 0)
+ 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\":\"退货信息获取失败,请检查买手是否掉线\"}";
+ }
+ if (pddBuyerAfterSale != null)
+ {
+ pddBuyerAfterSale.refundAmount = refundAmount;
+ }
+ Thread.Sleep(Randomx.GetId(1000, 2000));
+ var afterSaleRst = YkdBuyerOrder.SetOrderAfterSaleWithReturnGoods(buyer, mobile, order.order_sn, applyAmount, refundAmount, newMaxApplyAmount);
+ return afterSaleRst;
+ }
+
+ ///
+ /// 将处理的或读取到更新的售后返回服务端接口
+ ///
+ ///
+ public static string SendTransitAfterSaleE57(PddBuyerOrderLiteInfo order, string refundStatus = "买手退款成功")
+ {
+ string url2 = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/purchase/refundStatus";
+ var data = new JObject();
+ data["orderId"] = order.ShopOrderIdStr;
+ data["outOrderId"] = order.order_sn;
+ data["refundStatus"] = refundStatus;
+ var dataStr2 = JsonHelper.SerializeObject(data);
+ var refundStatusRst = HttpResponseWXBLL.e57PostResponse(url2, dataStr2, "");
+ return refundStatusRst;
+
+ //Thread.Sleep(100);
+ //var url2 = BaseClass.Build29WxObjString("order/wx_update_erp_order_express");
+ //var data2 = UserLogin.GetSignaturex();
+ //data2 += "&out_order_no=" + order.order_sn;
+ //data2 += "&refund_status=" + "买手退款成功";
+ //var html2 = GetHtml.PostUtf8(url2, data2);
+ //if (string.IsNullOrEmpty(html2) || !html2.Contains("\"code\":200"))
+ // html2 = GetHtml.PostUtf8(url2, data2);
+ //if (string.IsNullOrEmpty(html2) || !html2.Contains("\"code\":200"))
+ //{
+ // order.sendStatus = "退款成功 买手退款信息更新失败";
+ //}
+ //else
+ // order.sendStatus = "退款成功 买手退款信息更新成功";
+ }
+
+ private void chkHideNoWxIdOrder_CheckedChanged(object sender, RoutedEventArgs e)
+ {
+ isHideNoWxOrderNo = chkHideNoWxIdOrder.IsChecked == true;
+ 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;
+ }
+
+ private void txtFilter_TextChanged(object sender, TextChangedEventArgs e)
+ {
+ filterTxt = txtFilter.Text.Trim();
+ }
+
+ private void btnHide_Click(object sender, RoutedEventArgs e)
+ {
+ if (btnHide.Content.ParseToString() == "▲")
+ {
+ btnHide.Content = "▼";
+ gridTable.Visibility = Visibility.Visible;
+ }
+ else
+ {
+ btnHide.Content = "▲";
+ gridTable.Visibility = Visibility.Collapsed;
+ }
+ }
+
+ private void btnHideBuyer_Click(object sender, RoutedEventArgs e)
+ {
+ if (btnHideBuyer.Content.ParseToString() == "▶")
+ {
+ btnHideBuyer.Content = "◀";
+ btnHideBuyer.Width = 20;
+ borderPddBuyer.Visibility = Visibility.Visible;
+ }
+ else
+ {
+ btnHideBuyer.Content = "▶";
+ btnHideBuyer.Width = 17;
+ borderPddBuyer.Visibility = Visibility.Collapsed;
+ }
+ }
+
+ private void chkAutoAfterSale_Checked(object sender, RoutedEventArgs e)
+ {
+ if (isLoad)
+ {
+ buyerReadOrderConfig.IsAutoAfterSale = chkAutoAfterSale.IsChecked == true;
+ NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_config", buyerReadOrderConfig);
+ }
+ }
+
+ private void btnHideAll_Click(object sender, RoutedEventArgs e)
+ {
+ if (MainWindow.Instance.gridTbBuyerOrderReadCtrl.Visibility != Visibility.Visible)
+ MainWindow.Instance.gridTbBuyerOrderReadCtrl.Visibility = Visibility.Visible;
+ if (Panel.GetZIndex(MainWindow.Instance.gridTbBuyerOrderReadCtrl) < 1)
+ Panel.SetZIndex(MainWindow.Instance.gridTbBuyerOrderReadCtrl, 1);
+ else
+ Panel.SetZIndex(MainWindow.Instance.gridTbBuyerOrderReadCtrl, -1);
+ }
+
+ private void CheckBox_Click(object sender, RoutedEventArgs e)
+ {
+ if (sender is CheckBox chk)
+ {
+ if (chk.DataContext is BuyerLoginInfo pddBuyer)
+ {
+ foreach (var buyer in GlobalConfig.PDDBuyerLoginList)
+ {
+ buyer.IsSelect = false;
+ }
+ pddBuyer.IsSelect = true;
+ if (pddBuyer.wpf_browser != null)
+ Panel.SetZIndex(pddBuyer.wpf_browser, maxZIndex++);
+ }
+ }
+ //if (e.Source)
+ }
+
+ private void txtBuyerNick_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
+ {
+ if (sender is TextBox txt)
+ {
+ if (txt.DataContext is BuyerLoginInfo pddBuyer)
+ {
+ foreach (var buyer in GlobalConfig.PDDBuyerLoginList)
+ {
+ buyer.IsSelect = false;
+ }
+ pddBuyer.IsSelect = true;
+ if (pddBuyer.wpf_browser != null)
+ Panel.SetZIndex(pddBuyer.wpf_browser, maxZIndex++);
+ }
+ }
+ }
+
+ private void txtBuyerNick_Loaded(object sender, RoutedEventArgs e)
+ {
+ if (sender is TextBox txtBuyerNick)
+ txtBuyerNick.AddHandler(TextBox.MouseUpEvent, new MouseButtonEventHandler(txtBuyerNick_MouseLeftButtonDown), true);
+ }
+
+ private void dgBuyerOrder_SelectionChanged(object sender, SelectionChangedEventArgs e)
+ {
+
+ }
+
+ private void btnNextBuyer_Click(object sender, RoutedEventArgs e)
+ {
+ isSkipNext = true;
+ }
+ }
+
+ /*
+ 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 GetAfterSaleAddress(BuyerLoginInfo buyer, string orderSn, string afterSalesId)
+ {
+ //https://mobile.yangkeduo.com/complaints_new_detail.html?after_sales_id=21892258236871&order_sn=260721-113109931520980&refer_page_name=order_detail&refer_page_id=10038_1785055821030_cmczxk3x91&refer_page_sn=10038
+ //&refer_page_name=order_detail&refer_page_id=10038_1785055821030_cmczxk3x91&refer_page_sn=10038
+ string refPageId = "10038_" + BaseClass.DateTimeToTimestampSeconds(DateTime.Now) + "_" + Randomx.GetWordNumber(10);
+ string url = "https://mobile.yangkeduo.com/complaints_new_detail.html?after_sales_id=" + afterSalesId + "&order_sn=" + orderSn + "&refer_page_name=order_detail&refer_page_id=" + refPageId + "&refer_page_sn=10038";
+ string refere = "https://mobile.yangkeduo.com/order.html?order_sn=" + orderSn + "&page_from=1&main_orders=1&is_tester=1&refer_page_name=my_order" +
+ "&refer_page_id=10032_" + BaseClass.DateTimeToTimestampSeconds(DateTime.Now) + "_" + Randomx.GetWordNumber(10) + "&refer_page_sn=10032&page_id=" + refPageId + "&is_back=1";
+ //url = "https://mobile.yangkeduo.com/complaints_new_detail.html?after_sales_id=22261687961679&order_sn=260819-017951649351926&refer_page_name=order_detail&refer_page_id=10038_1787734305016_cb6b9im8jg&refer_page_sn=10038";
+ //refere = "https://mobile.yangkeduo.com/order.html?order_sn=260819-017951649351926&page_from=1&main_orders=1&is_tester=1&refer_page_name=my_order&refer_page_id=10032_1787734304425_5EGkUPjpA9&refer_page_sn=10032&page_id=10038_1787734305016_cb6b9im8jg&is_back=1";
+
+
+
+ var rst = HttpResponseYkdBLL.YangkeduoGetPageResponse(buyer, url, refere);
+ 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 SetOrderAfterSaleWithRejected(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"":""260819-346491491930090"",""coupon_return_control_type"":0,""after_sales_type"":1,""user_ship_status"":1,""user_phone"":""17567817029"",""images"":[],""return_coupon_amount"":0,""question_type"":197,""question_desc"":""已拒收快递"",""apply_amount"":623,""refund_amount"":623,""new_refund_amount"":623,""is_lite"":true}";
+ body = @"{""order_sn"":""" + order_sn + @""",""coupon_return_control_type"":0,""after_sales_type"":1,""user_ship_status"":1,""user_phone"":""" + user_phone +
+ @""",""images"":[],""return_coupon_amount"":0,""question_type"":197,""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?mode=64&after_sales_id=22198198961472&order_sn=260819-346491491930090&refer_page_name=complaints_new_detail&refer_page_id=82697_1787286043220_qillb14kr1&refer_page_sn=82697&after_sales_reason=197&after_sales_type=1&after_sales_code=1001&user_ship_status=1";
+ referer = "https://mobile.yangkeduo.com/complaint.html?order_sn=" + order_sn + "&refer_page_name=order_detail&after_sales_reason=197&after_sales_type=1&after_sales_code=1001&user_ship_status=1";
+
+ var rst = HttpResponseYkdBLL.YangkeduoPostResponse(buyer, url, body, referer);
+ return rst;
+ }
+
+ ///
+ /// 退货退款
+ ///
+ public static string SetOrderAfterSaleWithReturnGoods(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"":""260721-113109931520980"",""coupon_return_control_type"":0,""after_sales_type"":2,""user_ship_status"":2,""user_phone"":""15837193237"",""images"":[],""return_coupon_amount"":0,""question_type"":88,""question_desc"":"""",""apply_amount"":2590,""refund_amount"":2590,""new_refund_amount"":2590,""is_lite"":true}";
+ body = @"{""order_sn"":""" + order_sn + @""",""coupon_return_control_type"":0,""after_sales_type"":2,""user_ship_status"":2,""user_phone"":""" + user_phone +
+ @""",""images"":[],""return_coupon_amount"":0,""question_type"":88,""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=260721-113109931520980&after_sales_reason=88&after_sales_type=2&after_sales_code=1002";
+ referer = "https://mobile.yangkeduo.com/complaint.html?order_sn=" + order_sn + "after_sales_reason=88&after_sales_type=2&after_sales_code=1002";
+
+ //{"after_sales_id":21892258236871,"after_sales_status":1,"after_sales_type":2,"not_really_created":null}
+ 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 BuyerReadOrderConfig
+ {
+ ///
+ /// 是否自动读单
+ ///
+ public bool IsAutoReadOrder = true;
+ ///
+ /// 是否自动售后未发货订单
+ ///
+ public bool IsAutoAfterSale = true;
+ }*/
+}
diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs
index 40d2df6..2c2cef1 100644
--- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs
+++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs
@@ -1650,11 +1650,15 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
if (token.IsCancellationRequested)
break;
- if (!GlobalConfig.lstFilterOrder.ToList().Any(o => o.order_id == order.order_id))
+ var orders = GlobalConfig.lstFilterOrder.ToList();
+ if (!orders.Any(o => o.order_id == order.order_id))
{
- Dispatcher.InvokeAsync(() =>
- {
- GlobalConfig.lstFilterOrder.Add(order);
+ Dispatcher.InvokeAsync(() =>
+ {
+ lock (MainWindow._orderLock)
+ {
+ GlobalConfig.lstFilterOrder.Add(order);
+ }
});
}
}
@@ -1676,7 +1680,12 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
if (order == null)
return;
- var orderExist = GlobalConfig.lstFilterOrder.ToList().FirstOrDefault(o => o.order_id == order.order_id);
+ oms_wei_order_info orderExist = null;
+
+ lock (MainWindow._orderLock)
+ {
+ orderExist = GlobalConfig.lstFilterOrder.ToList().FirstOrDefault(o => o.order_id == order.order_id);
+ }
while (orderExist != null)
{
Dispatcher.Invoke(() =>
@@ -1688,26 +1697,31 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
if (!GetOrderIsFilter(order))
{
- oms_wei_order_info nextOrder = null;
- if (GlobalConfig.OrderTabHeaderStr.StartsWith("需处理售后单") || GlobalConfig.OrderTabHeaderStr.StartsWith("退货仓自动售后单"))
- nextOrder = GlobalConfig.lstFilterOrder.ToList().FirstOrDefault(o => o.RefundDatetime < order.RefundDatetime);
- else if (GlobalConfig.OrderTabHeaderStr.StartsWith("异常需重拍"))
- nextOrder = GlobalConfig.lstFilterOrder.ToList().FirstOrDefault(o => o.update_time < order.update_time);
- else
- nextOrder = GlobalConfig.lstFilterOrder.ToList().FirstOrDefault(o => o.create_time < order.create_time);
-
var index = -1;
+ oms_wei_order_info nextOrder = null;
+ lock (MainWindow._orderLock)
+ {
+ if (GlobalConfig.OrderTabHeaderStr.StartsWith("需处理售后单") || GlobalConfig.OrderTabHeaderStr.StartsWith("退货仓自动售后单"))
+ nextOrder = GlobalConfig.lstFilterOrder.ToList().FirstOrDefault(o => o.RefundDatetime < order.RefundDatetime);
+ else if (GlobalConfig.OrderTabHeaderStr.StartsWith("异常需重拍"))
+ nextOrder = GlobalConfig.lstFilterOrder.ToList().FirstOrDefault(o => o.update_time < order.update_time);
+ else
+ nextOrder = GlobalConfig.lstFilterOrder.ToList().FirstOrDefault(o => o.create_time < order.create_time);
+ }
if (nextOrder != null)
- index = GlobalConfig.lstFilterOrder.IndexOf(nextOrder);
+ index = GlobalConfig.lstFilterOrder.IndexOf(nextOrder);
Dispatcher.InvokeAsync(() =>
{
- if (nextOrder != null && index >= 0 && GlobalConfig.lstFilterOrder.Count > index)
+ lock (MainWindow._orderLock)
{
- GlobalConfig.lstFilterOrder.Insert(index, order);
- }
- else
- {
- GlobalConfig.lstFilterOrder.Add(order);
+ if (nextOrder != null && index >= 0 && GlobalConfig.lstFilterOrder.Count > index)
+ {
+ GlobalConfig.lstFilterOrder.Insert(index, order);
+ }
+ else
+ {
+ GlobalConfig.lstFilterOrder.Add(order);
+ }
}
});
Thread.Sleep(1);
diff --git a/29WxOrderWpf/MainWindow.xaml.cs b/29WxOrderWpf/MainWindow.xaml.cs
index 03e3741..cb61924 100644
--- a/29WxOrderWpf/MainWindow.xaml.cs
+++ b/29WxOrderWpf/MainWindow.xaml.cs
@@ -58,6 +58,7 @@ namespace _29WxOrderWpf
public partial class MainWindow : BaseWindow, INotifyPropertyChanged
{
public static MainWindow Instance { get; private set; }
+ public static readonly object _orderLock = new object();
private readonly TicketRealtimeMonitor _ticketMonitor = TicketRealtimeMonitor.Current;
private readonly WorkOrderUnreadService _workOrderUnreadService = new WorkOrderUnreadService();
@@ -335,7 +336,12 @@ namespace _29WxOrderWpf
break;
}
- foreach (var order in GlobalConfig.lstFilterOrder.Where(o => o.shop_id.ParseToString() == shop.ErpShopId).ToList())
+ List orders;
+ lock (_orderLock)
+ {
+ orders = GlobalConfig.lstFilterOrder.Where(o => o.shop_id.ParseToString() == shop.ErpShopId).ToList();
+ }
+ foreach (var order in orders)
{
// 更新代发管理情况
foreach (var orderItem in order.orderItems)
diff --git a/AllBase/Helper/GlobalConfig.cs b/AllBase/Helper/GlobalConfig.cs
index 669a262..bb0b9be 100644
--- a/AllBase/Helper/GlobalConfig.cs
+++ b/AllBase/Helper/GlobalConfig.cs
@@ -20,10 +20,10 @@ namespace AllBase.Helper
{
public class GlobalConfig
{
- ///
- /// 颜色等图形元素需要在主线程操作
- ///
- public static Dispatcher Dispatcher { get; set; }
+ ///
+ /// 颜色等图形元素需要在主线程操作
+ ///
+ public static Dispatcher Dispatcher { get; set; }
///
/// 店铺列表
///