diff --git a/29WxOrderWpf/29WxOrderWpf.csproj b/29WxOrderWpf/29WxOrderWpf.csproj
index 42cb098..8ae2c8f 100644
--- a/29WxOrderWpf/29WxOrderWpf.csproj
+++ b/29WxOrderWpf/29WxOrderWpf.csproj
@@ -68,6 +68,7 @@
+
diff --git a/29WxOrderWpf/Ctrls/BuyerCtrls/TaobaoBuyOrderViewModel.cs b/29WxOrderWpf/Ctrls/BuyerCtrls/TaobaoBuyOrderViewModel.cs
index f43d1f5..d9be30f 100644
--- a/29WxOrderWpf/Ctrls/BuyerCtrls/TaobaoBuyOrderViewModel.cs
+++ b/29WxOrderWpf/Ctrls/BuyerCtrls/TaobaoBuyOrderViewModel.cs
@@ -28,6 +28,8 @@ using Work;
using Work._29Tools.BLL;
using Work._29Tools.CefTools;
using Work.BaseForms;
+using WxOrder.Framework.Commons;
+using WxOrder.Framework.Helpers;
using static AllBase.DouYinModel.Result.DouOrderListInfo;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
using static WPFCommon.Interop.InteropValues;
@@ -51,7 +53,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
public int CloseAfterSecond { get; set; }
public string InitUrl { get; set; } = "";
- //private string shopCookieHead = "taobao.com";
+ private string shopCookieHead = "taobao.com";
private string buyerLoginUrl = "https://login.taobao.com/havanaone/login/login.htm";
private string MainUrl = "https://i.taobao.com/my_itaobao"; //"https://buyertrade.taobao.com/trade/itemlist/list_bought_items.htm?";
@@ -468,7 +470,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
Thread.Sleep(100);
}
- // 如果在商品搜索页面
+ // 第一次打开如果在商品搜索页面
if (Address.StartsWith("https://s.taobao.com/search?"))
{
Thread.Sleep(1000);
@@ -521,92 +523,25 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}
}
+ // 打开窗口即进入商品页面一定是拍单,则下一步点击立即购买,随后进入地址修改页面(不能一开始就进入,会掉cookie)
if (Address.StartsWith("https://item.taobao.com/item.htm?id="))
{
- //修改
- Thread.Sleep(Randomx.GetId(500, 1000));
- CefWebBrowser.Load("https://i.taobao.com/my_itaobao/receiver-address-pc");
-
- var client = CefWebBrowser.GetDevToolsClient();
- var host = CefWebBrowser.GetBrowserHost();
- if (client == null || host == null)
- return;
-
- string jsRst = "failed";
- StringBuilder sb = new StringBuilder();
- sb.Append("(function() {\r\n");
- //sb.Append(" var searchBtns = document.getElementsByTagName('a');\r\n");
- sb.Append(" var searchBtns = document.getElementsByClassName('t-change');\r\n");
- sb.Append(" for (i = 0; i < searchBtns.length; i++) {\r\n");
- sb.Append(" var searchBtn = searchBtns[i];\r\n");
- sb.Append(" if (searchBtn.innerHTML='修改') {\r\n");
- sb.Append(" searchBtn.click();\r\n");
- sb.Append(" return 'success';\r\n");
- sb.Append(" }\r\n");
- sb.Append(" }\r\n");
- sb.Append(" return 'failed';\r\n");
- sb.Append("})();");
- var jsStr = sb.ToString();
- for (int i = 0; i < 20 && jsRst != "success"; i++)
+ try
{
- var r = await client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
- jsRst = r.Result.Value.ParseToString();
- Thread.Sleep(500);
+ // 点击 立即购买/领券购买
+ await AutoClickBuyButton();
+
+ // 点击 管理地址(必出验证,暂时url直接跳转)
+ //await AutoClickManageAddressButton();
+
+ // 自动修改地址 进入地址页面
+ //Thread.Sleep(Randomx.GetId(500, 1000));
+ CefWebBrowser.Load("https://i.taobao.com/my_itaobao/receiver-address-pc");
+ await AutoChangeAddress();
}
- }
-
- // 如果在地质修改页面
- if (Address.StartsWith("https://i.taobao.com/my_itaobao/receiver-address-pc"))
- {
- Thread.Sleep(1000);
-
- return;
-
- string jsRst = "failed";
- StringBuilder sb = new StringBuilder();
- sb.Append("(function() {\r\n");
- sb.Append(" var searchBtn = document.getElementsByClassName('image-search-icon-outerMode')[0];\r\n");
- sb.Append(" if (searchBtn)\r\n");
- sb.Append(" searchBtn.click();\r\n");
- sb.Append(" else\r\n");
- sb.Append(" return 'failed';\r\n");
- sb.Append("})();");
- var jsStr = sb.ToString();
- var client = CefWebBrowser.GetDevToolsClient();
- var host = CefWebBrowser.GetBrowserHost();
- if (client == null || host == null)
- return;
-
- for (int i = 0; i < 10 && jsRst == "failed"; i++)
+ catch (Exception ex)
{
- var r = await client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
- jsRst = r.Result.Value.ParseToString();
- Thread.Sleep(500);
- }
-
- var image = ImageBuild.LoadBitmipImageFromUrl(orderItem.thumb_img);
- if (image == null)
- return;
-
- await Application.Current.Dispatcher.InvokeAsync(new Action(() => { Clipboard.SetImage(image); }));
- host.SendKeyEvent(new CefSharp.KeyEvent() { WindowsKeyCode = 86, Type = KeyEventType.RawKeyDown, Modifiers = CefEventFlags.ControlDown });
- Thread.Sleep(Randomx.GetId(2500, 3000));
-
- jsRst = "failed";
- sb = new StringBuilder();
- sb.Append("(function() {\r\n");
- sb.Append(" var searchBtn = document.getElementById('image-search-upload-button');\r\n");
- sb.Append(" if (searchBtn)\r\n");
- sb.Append(" searchBtn.click();\r\n");
- sb.Append(" else\r\n");
- sb.Append(" return 'failed';\r\n");
- sb.Append("})();");
- jsStr = sb.ToString();
- for (int i = 0; i < 10 && jsRst == "failed"; i++)
- {
- var r = await client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
- jsRst = r.Result.Value.ParseToString();
- Thread.Sleep(500);
+ BaseMsgWindow.ShowError(ex.Message);
}
}
});
@@ -614,7 +549,324 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
});
}
+ private async Task AutoClickBuyButton()
+ {
+ for (int i = 0; i < 10 && !Address.StartsWith("https://item.taobao.com/item.htm?id="); i++)
+ {
+ Thread.Sleep(500);
+ }
+ if (!Address.StartsWith("https://item.taobao.com/item.htm?id="))
+ throw new Exception("当前不在商品界面!");
+ var client = CefWebBrowser.GetDevToolsClient();
+ var host = CefWebBrowser.GetBrowserHost();
+ if (client == null || host == null)
+ throw new Exception("初始化商品购买失败!");
+
+ // 1.点击修改按钮
+ string jsRst = "failed";
+ StringBuilder sb = new StringBuilder();
+ // 查找元素
+ sb.Append(@"function findElement(selector, isXPath = true) {
+ if (isXPath) {
+ return document.evaluate(
+ selector,
+ document,
+ null,
+ XPathResult.FIRST_ORDERED_NODE_TYPE,
+ null
+ ).singleNodeValue;
+ } else {
+ return document.querySelector(selector);
+ }
+ }
+ ");
+ sb.Append("(function() {\r\n");
+ //sb.Append(" var searchBtns = document.getElementsByTagName('button');\r\n");
+ sb.Append(" var searchBtns = document.getElementsByTagName('span');\r\n");
+ sb.Append(" for (i = 0; i < searchBtns.length; i++) {\r\n");
+ sb.Append(" var searchBtn = searchBtns[i];\r\n");
+ sb.Append(" if (searchBtn.innerHTML.indexOf('立即购买') >= 0) {\r\n");
+ sb.Append(" searchBtn.parentElement.click();\r\n");
+ sb.Append(" return 'success';\r\n");
+ sb.Append(" }\r\n");
+ sb.Append(" }\r\n");
+ sb.Append(" searchBtns = document.getElementsByTagName('span');\r\n");
+ sb.Append(" for (i = 0; i < searchBtns.length; i++) {\r\n");
+ sb.Append(" var searchBtn = searchBtns[i];\r\n");
+ sb.Append(" if (searchBtn.innerHTML.indexOf('领券购买') >= 0) {\r\n");
+ sb.Append(" searchBtn.parentElement.click();\r\n");
+ sb.Append(" return 'success';\r\n");
+ sb.Append(" }\r\n");
+ sb.Append(" }\r\n");
+ //sb.Append(" const buyBtn = findElement('//*[contains(text(), \"立即购买\")]').parentElement || findElement('//*[contains(text(), \"领券购买\")]');\r\n");
+ //sb.Append(" if (buyBtn) {\r\n");
+ //sb.Append(" buyBtn.click();\r\n");
+ //sb.Append(" return 'success';\r\n");
+ //sb.Append(" }\r\n");
+ sb.Append(" return 'failed';\r\n");
+ sb.Append("})();");
+ var jsStr = sb.ToString();
+ for (int i = 0; i < 20 && jsRst != "success"; i++)
+ {
+ var r = await client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
+ jsRst = r.Result.Value.ParseToString();
+ Thread.Sleep(500);
+ }
+ if (jsRst != "success")
+ throw new Exception("立即购买按钮不存在!");
+
+ for (int i = 0; i < 10 && !Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml"); i++)
+ {
+ Thread.Sleep(500);
+ }
+
+ //滑块完成验证
+ bool isNeedSlider = false;
+ jsRst = "failed";
+ sb = new StringBuilder();
+ jsStr = "";
+ sb.Append("(function() {\r\n");
+ sb.Append(" if (document.body.innerHTML.indexOf('下方滑块完成验证') < 0) {\r\n");
+ sb.Append(" return 'success';\r\n");
+ sb.Append(" }\r\n");
+ sb.Append(" return 'failed';\r\n");
+ sb.Append("})();");
+ jsStr = sb.ToString();
+ for (int i = 0; i < 1000; i++)
+ {
+ var r = await client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
+ jsRst = r.Result.Value.ParseToString();
+ if (jsRst != "success")
+ isNeedSlider = true;
+ else
+ isNeedSlider = false;
+ Thread.Sleep(500);
+ if (!isNeedSlider)
+ break;
+ }
+
+ if (!Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml"))
+ throw new Exception("立即购买点击失败!");
+ Thread.Sleep(500);
+
+ if (isNeedSlider)
+ {
+ List cookieList = WPFCEFBrowser.GetCookieList(shopCookieHead, CefWebBrowser.GetCookieManager(null));
+ this.buyer.cookie = JsonHelper.SerializeObject(cookieList);
+
+ var buyerUrl = BaseClass.Build29WxObjString("user/mdy_taobao_buyer_cookie");
+ var buyerData = UserLogin.GetSignaturex()
+ + "&buyer_id=" + this.buyer.buyer_id
+ + "&status=" + "在线"
+ + "&cookie=" + GetHtml.UrlEncodeUtf8(JsonHelper.SerializeObject(cookieList));
+ var result = GetHtml.PostUtf8(buyerUrl, buyerData);
+ if (string.IsNullOrEmpty(result) || !result.Contains("\"code\":200"))
+ result = GetHtml.PostUtf8(buyerUrl, buyerData);
+ }
+ }
+
+ private async Task AutoClickManageAddressButton()
+ {
+ for (int i = 0; i < 10 && !Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml"); i++)
+ {
+ Thread.Sleep(500);
+ }
+ if (!Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml"))
+ throw new Exception("当前不在结算界面!");
+
+ var client = CefWebBrowser.GetDevToolsClient();
+ var host = CefWebBrowser.GetBrowserHost();
+ if (client == null || host == null)
+ throw new Exception("初始化商品结算失败!");
+
+ // 1.点击修改按钮
+ string jsRst = "failed";
+ StringBuilder sb = new StringBuilder();
+ sb.Append("(function() {\r\n");
+ sb.Append(" var searchBtns = document.getElementsByTagName('a');\r\n");
+ sb.Append(" for (i = 0; i < searchBtns.length; i++) {\r\n");
+ sb.Append(" var searchBtn = searchBtns[i];\r\n");
+ sb.Append(" if (searchBtn.innerHTML.indexOf('管理地址') >= 0) {\r\n");
+ sb.Append(" searchBtn.click();\r\n");
+ sb.Append(" return 'success';\r\n");
+ sb.Append(" }\r\n");
+ sb.Append(" }\r\n");
+ sb.Append(" return 'failed';\r\n");
+ sb.Append("})();");
+ var jsStr = sb.ToString();
+ for (int i = 0; i < 20 && jsRst != "success"; i++)
+ {
+ var r = await client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
+ jsRst = r.Result.Value.ParseToString();
+ Thread.Sleep(500);
+ }
+ if (jsRst != "success")
+ throw new Exception("管理地址按钮不存在!");
+
+ for (int i = 0; i < 10 && !Address.StartsWith("https://i.taobao.com/my_itaobao/receiver-address-pc"); i++)
+ {
+ Thread.Sleep(500);
+ }
+ if (!Address.StartsWith("https://i.taobao.com/my_itaobao/receiver-address-pc"))
+ throw new Exception("管理地址点击失败!");
+ Thread.Sleep(500);
+ }
+
+ private async Task AutoChangeAddress()
+ {
+ for (int i = 0; i < 10 && !Address.StartsWith("https://i.taobao.com/my_itaobao/receiver-address-pc"); i++)
+ {
+ Thread.Sleep(500);
+ }
+ if (!Address.StartsWith("https://i.taobao.com/my_itaobao/receiver-address-pc"))
+ throw new Exception("当前不在修改地址界面!");
+
+ var client = CefWebBrowser.GetDevToolsClient();
+ var host = CefWebBrowser.GetBrowserHost();
+ if (client == null || host == null)
+ throw new Exception("初始化修改地址失败!");
+
+ //string content = ResourceHelper.GetResourceText("/Ctrls/OrderCtrls/Resources/tbAutoAddress.js", "29WxFindOrder");
+ //var cr = await client.Runtime.EvaluateAsync(content, null, true, null, null, true, null, true);
+ //var contentRst = cr.Result.Value.ParseToString();
+ //Thread.Sleep(500);
+ //return;
+
+ // 1.点击修改按钮
+ string jsRst = "failed";
+ StringBuilder sb = new StringBuilder();
+ sb.Append("(function() {\r\n");
+ //sb.Append(" var searchBtns = document.getElementsByTagName('a');\r\n");
+ sb.Append(" var searchBtns = document.getElementsByClassName('t-change');\r\n");
+ sb.Append(" for (i = 0; i < searchBtns.length; i++) {\r\n");
+ sb.Append(" var searchBtn = searchBtns[i];\r\n");
+ sb.Append(" if (searchBtn.innerHTML == '修改') {\r\n");
+ sb.Append(" searchBtn.click();\r\n");
+ sb.Append(" return 'success';\r\n");
+ sb.Append(" }\r\n");
+ sb.Append(" }\r\n");
+ sb.Append(" return 'failed';\r\n");
+ sb.Append("})();");
+ var jsStr = sb.ToString();
+ for (int i = 0; i < 20 && jsRst != "success"; i++)
+ {
+ var r = await client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
+ jsRst = r.Result.Value.ParseToString();
+ Thread.Sleep(500);
+ }
+ if (jsRst != "success")
+ throw new Exception("修改地址按钮不存在!");
+
+ // 2.给地址框赋值
+ var changeReactInputValueStr = @"
+ function changeReactInputValue(inputDom,newText){
+ let lastValue = inputDom.value;
+ inputDom.value = newText;
+ let event = new Event('input', { bubbles: true });
+ event.simulated = true;
+ let tracker = inputDom._valueTracker;
+ if (tracker) {
+ tracker.setValue(lastValue);
+ }
+ inputDom.dispatchEvent(event);
+ }";
+ await client.Runtime.EvaluateAsync(changeReactInputValueStr, null, true, null, null, true, null, true);
+
+ string name = null, mobile = null, address = null;
+ if (BuyType == "transit")
+ {
+ if (txtSourceCodeVal.IsNullOrEmpty())
+ throw new Exception("溯源码不存在!");
+ name = TransitWaybillHelper.LastName[Randomx.GetId(TransitWaybillHelper.LastName.Count)] + (Randomx.GetId(2) == 1 ? "先生" : "女士");
+ mobile = TransitWaybillHelper.MobileHead[Randomx.GetId(TransitWaybillHelper.MobileHead.Count)] + Randomx.GetNumber(8);
+ address = name + mobile + transitWarehouse.TransDetailAddress + Randomx.GetId(1, 35) + Randomx.GetId(1, 9).ToString().PadLeft(2, '0') + "室" + txtSourceCodeVal;
+ }
+ else // todo 直发
+ {
+ }
+ if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(mobile) || string.IsNullOrEmpty(address))
+ throw new Exception("地址获取失败!");
+
+ jsRst = "failed";
+ sb = new StringBuilder();
+ sb.Append("(function() {\r\n");
+ sb.Append(" var txt = document.getElementsByTagName('textarea')[0];\r\n");
+ sb.Append(" if (txt) {\r\n");
+ sb.Append(" changeReactInputValue(txt, '" + address + "');\r\n");
+ sb.Append(" return 'success';\r\n");
+ sb.Append(" }\r\n");
+ sb.Append(" return 'failed';\r\n");
+ sb.Append("})();");
+ jsStr = sb.ToString();
+ for (int i = 0; i < 20 && jsRst != "success"; i++)
+ {
+ var r = await client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
+ jsRst = r.Result.Value.ParseToString();
+ Thread.Sleep(500);
+ }
+ if (jsRst != "success")
+ throw new Exception("填写地址信息失败!");
+
+ // 3.点击识别按钮
+ jsRst = "failed";
+ sb = new StringBuilder();
+ sb.Append("(function() {\r\n");
+ sb.Append(" var searchBtns = document.getElementsByTagName('button');\r\n");
+ //sb.Append(" var searchBtns = document.getElementsByClassName('t-change');\r\n");
+ sb.Append(" for (i = 0; i < searchBtns.length; i++) {\r\n");
+ sb.Append(" var searchBtn = searchBtns[i];\r\n");
+ sb.Append(" if (searchBtn.innerHTML.indexOf('识别') >= 0) {\r\n");
+ sb.Append(" searchBtn.click();\r\n");
+ sb.Append(" return 'success';\r\n");
+ sb.Append(" }\r\n");
+ sb.Append(" }\r\n");
+ sb.Append(" return 'failed';\r\n");
+ sb.Append("})();");
+ jsStr = sb.ToString();
+ for (int i = 0; i < 20 && jsRst != "success"; i++)
+ {
+ var r = await client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
+ jsRst = r.Result.Value.ParseToString();
+ Thread.Sleep(500);
+ }
+ if (jsRst != "success")
+ throw new Exception("识别地址按钮不存在!");
+
+ // 4.核对详细地址
+ jsRst = "failed";
+ sb = new StringBuilder();
+ sb.Append("(function() {\r\n");
+ sb.Append(" var txts = document.getElementsByTagName('textarea');\r\n");
+ sb.Append(" for (i = 0; i < txts.length; i++) {\r\n");
+ sb.Append(" var txt = txts[i];\r\n");
+ sb.Append(" if (txt.outerHTML.indexOf('请输入详细地址信息') > 0) {\r\n");
+ sb.Append(" if ('" + address + "'.indexOf(txt.innerHTML) >= 0) {\r\n");
+ if (BuyType == "transit")
+ {
+ // 中转仓订单判断溯源码
+ sb.Append(" if (txt.innerHTML.indexOf('" + txtSourceCodeVal + "') < 0) {\r\n");
+ sb.Append(" changeReactInputValue(txt, txt.innerHTML + '" + txtSourceCodeVal + "'); \r\n");
+ sb.Append(" }\r\n");
+ }
+ sb.Append(" return 'success';\r\n");
+ sb.Append(" }\r\n");
+ sb.Append(" }\r\n");
+ sb.Append(" }\r\n");
+ sb.Append(" return 'failed';\r\n");
+ sb.Append("})();");
+ jsStr = sb.ToString();
+ for (int i = 0; i < 20 && jsRst != "success"; i++)
+ {
+ var r = await client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
+ jsRst = r.Result.Value.ParseToString();
+ Thread.Sleep(500);
+ }
+ if (jsRst != "success")
+ throw new Exception("详细地址信息有误!");
+
+ //textarea
+ }
private void CefWebBrowser_LoadError(object sender, CefSharp.LoadErrorEventArgs e)
diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs
index e502612..7a980f9 100644
--- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs
+++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs
@@ -1821,7 +1821,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
if (cmbRejectStatusText == "拒收成功" && !order.orderItems.Any(oi => oi.AddEditTransitWarehouseRejectStr.StartsWith("拒收成功")))
return true;
- if (order.order_id == "3738674216947317248")
+ if (order.order_id == "3739296914665288192")
{
}
@@ -2335,7 +2335,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
{
foreach (var orderItem in order.orderItems)
{
- if (order.order_id == "3739105285145538816")
+ if (order.order_id == "3739296914665288192")
{
}
@@ -2356,7 +2356,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
{
foreach (var orderItem in tmpOrderItems)
{
- if (orderItem.order_id == "3738564728075491584")
+ if (orderItem.order_id == "3739296914665288192")
{
}
@@ -2385,7 +2385,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
{
foreach (var orderItem in order.orderItems)
{
- if (order.order_id == "3739105285145538816")
+ if (order.order_id == "3739296914665288192")
{
}
@@ -2400,16 +2400,18 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
// 退货地址是退货仓的,直接申请退货退款,取到地址后直接去填写退货仓退货信息
if (orderItem?.ItemOrder?.OrderBuyType == "云仓")
{
- if (!string.IsNullOrEmpty(orderItem.ItemTransitOrderWithVoid?.out_order_no) && orderItem.PddBuyerAfterSaleAddressStr.IsNullOrEmpty() &&
- (orderItem.TransitRefundStatusStr.Contains("需手动申请售后") || orderItem.TransitRefundStatusStr.Contains("需手动申请售后") || orderItem.TransitRefundStatusStr.IsNullOrEmpty()))
+ if (!string.IsNullOrEmpty(orderItem.ItemTransitOrderWithVoid?.out_order_no) && orderItem.PddBuyerAfterSaleAddressStr.IsNullOrEmpty() && GetNeedBuyerAfterSale(orderItem.TransitRefundStatusStr))
+ tmpOrderItems.Add(orderItem);
+ if (!string.IsNullOrEmpty(orderItem.ItemTransitOrderWithVoid?.out_order_no) && GetNeedBuyerNewAfterSale(orderItem.TransitRefundStatusStr))
tmpOrderItems.Add(orderItem);
}
if (orderItem?.ItemOrder?.OrderBuyType == "直发")
{
if (orderItem != null && !string.IsNullOrEmpty(orderItem.ItemOrder?.out_order_no) && orderItem.DirectPddBuyerAfterSaleAddressStr.IsNullOrEmpty() &&
- ((orderItem.ItemOrder?.out_after_sale_status).ParseToString().Contains("需手动申请售后") || (orderItem.ItemOrder?.out_after_sale_status).ParseToString().Contains("待用户发货") ||
- (orderItem.ItemOrder?.out_after_sale_status).IsNullOrEmpty()))
+ GetNeedBuyerAfterSale(orderItem.ItemOrder?.out_after_sale_status))
+ tmpOrderItems.Add(orderItem);
+ if (orderItem != null && !string.IsNullOrEmpty(orderItem.ItemOrder?.out_order_no) && GetNeedBuyerNewAfterSale(orderItem.ItemOrder?.out_after_sale_status))
tmpOrderItems.Add(orderItem);
}
@@ -2417,8 +2419,9 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
if (orderItem?.ItemOrder?.OrderBuyType == "云改直")
{
if (orderItem != null && !string.IsNullOrEmpty(orderItem.ItemOrder?.out_order_no) && orderItem.DirectPddBuyerAfterSaleAddressStr.IsNullOrEmpty() &&
- ((orderItem.ItemOrder?.out_after_sale_status).ParseToString().Contains("需手动申请售后") || (orderItem.ItemOrder?.out_after_sale_status).ParseToString().Contains("待用户发货") ||
- (orderItem.ItemOrder?.out_after_sale_status).IsNullOrEmpty()))
+ GetNeedBuyerAfterSale(orderItem.ItemOrder?.out_after_sale_status))
+ tmpOrderItems.Add(orderItem);
+ if (orderItem != null && !string.IsNullOrEmpty(orderItem.ItemOrder?.out_order_no) && GetNeedBuyerNewAfterSale(orderItem.ItemOrder?.out_after_sale_status))
tmpOrderItems.Add(orderItem);
}
}
@@ -2439,7 +2442,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
int index = 0;
foreach (var tmpOrderItem in tmpOrderItems)
{
- if (tmpOrderItem.order_id == "3739105285145538816")
+ if (tmpOrderItem.order_id == "3739296914665288192")
{
}
@@ -2501,8 +2504,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
refundStatusStr = (order.out_after_sale_status).ParseToString();
AfterSaleAddressStr = orderItem.DirectPddBuyerAfterSaleAddressStr;
}
- if (string.IsNullOrEmpty(outOrderNo) || !AfterSaleAddressStr.IsNullOrEmpty() ||
- (!refundStatusStr.Contains("需手动申请售后") && !refundStatusStr.Contains("待用户发货") && !refundStatusStr.IsNullOrEmpty()))
+ if (string.IsNullOrEmpty(outOrderNo) || !(AfterSaleAddressStr.IsNullOrEmpty() || GetNeedBuyerNewAfterSale(refundStatusStr)) || !GetNeedBuyerAfterSale(refundStatusStr))
continue;
PddBuyerOrderLiteInfo pddBuyerOrderLiteInfo = new PddBuyerOrderLiteInfo();
@@ -2534,7 +2536,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
pddBuyerAfterSale = orderItem.DirectPddBuyerAfterSale;
bool isSimPddAfterSaleSuccess = true;
- if (refundStatusStr.Contains("需手动申请售后") || string.IsNullOrEmpty(refundStatusStr))
+ if (GetNeedBuyerNewAfterSale(refundStatusStr))
{
isSimPddAfterSaleSuccess = false;
// pddBuyerAfterSale作为参数传入,获取退货退款金额
@@ -3052,6 +3054,20 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
chkNoPickupNumOrderIsChecked = chkNoPickupNumOrder.IsChecked.ParseToBool();
FilterOrders();
}
+
+ public static bool GetNeedBuyerAfterSale(string buyerAfterSaleStatus)
+ {
+ if (buyerAfterSaleStatus.Contains("待用户发货") || GetNeedBuyerNewAfterSale(buyerAfterSaleStatus))
+ return true;
+ return false;
+ }
+
+ public static bool GetNeedBuyerNewAfterSale(string buyerAfterSaleStatus)
+ {
+ if (buyerAfterSaleStatus.Contains("需手动申请售后") || buyerAfterSaleStatus.Contains("已申请售后 退款失败") || buyerAfterSaleStatus.Contains("已取消申请") || string.IsNullOrEmpty(buyerAfterSaleStatus))
+ return true;
+ return false;
+ }
}
public class OrderFilterConfig : PropertyNotifyObject
diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml
index be14da9..fbd6d40 100644
--- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml
+++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml
@@ -673,7 +673,7 @@
Title="采购账户:"
Cursor="Hand"
Foreground="#0099ff"
- MouseLeftButtonUp="TransitOrderBuye_Click"
+ MouseLeftButtonUp="TransitOrderBuy_Click"
Visibility="{Binding ElementName=txtTransitOrderBuyerStr, Path=Text, Converter={StaticResource HasTextVisibility}}">
setTimeout(resolve, ms));
+}
+
+// 查找元素(支持选择器或XPath)
+function findElement(selector, isXPath = true) {
+ if (isXPath) {
+ return document.evaluate(
+ selector,
+ document,
+ null,
+ XPathResult.FIRST_ORDERED_NODE_TYPE,
+ null
+ ).singleNodeValue;
+ } else {
+ return document.querySelector(selector);
+ }
+}
+
+// 完整流程
+async function changeTbAddress(data = {}) {
+ const {
+ transitAddress = ''
+ } = data;
+
+ console.log('📝 开始自动填写地址...');
+
+ // 1. 点击"修改"按钮,弹出修改地址框
+ var btnType = findElement('(//a[contains(text(), "修改")])[1]');
+ for (i = 0; i < 10; i++) {
+ if (!btnType) {
+ console.warn('⚠️ 找不到"修改"按钮,等待重试' + i);
+ await sleep(500);
+ btnType = findElement('(//a[contains(text(), "修改")])[1]');
+ }
+ }
+ if (!btnType) {
+ console.warn('⚠️ 找不到"修改"按钮');
+ return false;
+ }
+ btnType.click();
+ console.log('✅ 已点击"修改"按钮');
+ await sleep(500);
+
+ return true;
+
+ // // 2. 填充并自动识别收货地址
+ // const invoiceTitle = findElement('//label[contains(text(), "发票抬头")]/following-sibling::textarea[1]') ||
+ // findElement('//*[contains(text(), "发票抬头")]/following-sibling::textarea[1]');
+ // if (invoiceTitle) {
+ // changeReactInputValue(invoiceTitle, title);
+ // console.log('✅ 发票抬头已填充');
+ // } else {
+ // console.warn('⚠️ 未找到发票抬头控件');
+ // }
+
+ // // 3. 查找并填充税号
+ // const taxNumberInput = findElement('//label[contains(text(), "税号")]/following-sibling::input[1]') ||
+ // findElement('//*[contains(text(), "税号")]/following-sibling::input[1]');
+ // if (taxNumberInput) {
+ // changeReactInputValue(taxNumberInput, taxNumber);
+ // console.log('✅ 税号已填充');
+ // } else {
+ // console.warn('⚠️ 未找到税号控件');
+ // }
+
+ // await sleep(300);
+
+ // // 4. 查找并点击"申请发票"按钮
+ // const applyBtn = findElement('//*[contains(text(), "申请发票")]');
+ // if (!applyBtn) {
+ // console.error('❌ 未找到"申请发票"按钮');
+ // return false;
+ // }
+
+ // applyBtn.scrollIntoView({ behavior: 'smooth', block: 'center' });
+ // await sleep(300);
+ // applyBtn.click();
+ // console.log('✅ 已点击"申请发票"按钮');
+
+ // // 5. 等待弹窗/状态出现
+ // await sleep(300);
+
+ // // 6. 判断状态
+ // // 检查是否有"已经申请过"的提示
+ // const alreadyApplied = findElement('//*[contains(text(), "您已经提交过发票申请了")]')
+
+
+ // if (alreadyApplied) {
+ // console.log('✅ 已经申请过,无需重复操作');
+ // return true;
+ // }
+ // const successElement = findElement('//*[text()="确认发票信息无误后再提交"]');
+ // if (successElement == null) {
+ // return false;
+ // }
+ // // 检查是否有"确认开具"按钮或提示
+ // const confirmBtn = findElement('//*[text()= "确认"]');
+
+ // if (confirmBtn) {
+ // console.log('✅ 找到"确认"按钮,准备点击...');
+ // await sleep(200);
+ // confirmBtn.click();
+ // console.log('✅ 已点击"确认"按钮');
+ // return true;
+ // }
+
+ // // 如果都没有找到
+ // console.warn('⚠️ 未找到"已经申请过"或"确认"按钮,请手动检查');
+ // return false;
+}
+
+// ========== 调用 ==========
+(async function () {
+ try {
+ const result = await changeTbAddress({
+ transitAddress: '{中转仓地址}'
+ });
+ console.log('执行结果:', result);
+ // 批量开票时,C# 端轮询该变量获取执行结果
+ window.__invoiceApplyResult = result;
+ } catch (ex) {
+ console.error('执行异常:', ex);
+ window.__invoiceApplyResult = false;
+ }
+})();
\ No newline at end of file
diff --git a/29WxOrderWpf/ViewModels/TaobaoLoginViewModel.cs b/29WxOrderWpf/ViewModels/TaobaoLoginViewModel.cs
index 4086436..3d38e40 100644
--- a/29WxOrderWpf/ViewModels/TaobaoLoginViewModel.cs
+++ b/29WxOrderWpf/ViewModels/TaobaoLoginViewModel.cs
@@ -371,6 +371,7 @@ namespace _29WxOrderWpf.ViewModels
this.buyer = GlobalConfig.TaobaoBuyerLoginList.FirstOrDefault(b => b.buyer_id == uid);
if (this.buyer != null)
{
+ this.buyer.status = "在线";
this.buyer.user_name = username;
this.buyer.buyer_nick = nickname;
this.buyer.cookie = JsonHelper.SerializeObject(cookieList);
diff --git a/AllBase/Model/DBModel/oms_wei_order_item_info.cs b/AllBase/Model/DBModel/oms_wei_order_item_info.cs
index f3094e4..d503a41 100644
--- a/AllBase/Model/DBModel/oms_wei_order_item_info.cs
+++ b/AllBase/Model/DBModel/oms_wei_order_item_info.cs
@@ -998,9 +998,10 @@ namespace AllBase.Model.DBModel
}
- this.DirectPddBuyerAfterSale = DirectPddBuyerAfterSales?.FirstOrDefault(p => p.statusText == "退款成功") ?? DirectPddBuyerAfterSales?.FirstOrDefault(p => p.statusText != "申请已撤销");
+ this.DirectPddBuyerAfterSale = DirectPddBuyerAfterSales?.Where(d => d.orderSn == ItemOrder?.out_order_no)?.FirstOrDefault(p => p.statusText == "退款成功") ??
+ DirectPddBuyerAfterSales?.Where(d => d.orderSn == ItemOrder?.out_order_no)?.FirstOrDefault(p => p.statusText != "申请已撤销");
if (DirectPddBuyerAfterSale == null)
- DirectPddBuyerAfterSale = DirectPddBuyerAfterSales?.FirstOrDefault();
+ DirectPddBuyerAfterSale = DirectPddBuyerAfterSales?.Where(d => d.orderSn == ItemOrder?.out_order_no)?.FirstOrDefault();
//this.DirectPddBuyerAfterSale = DirectPddBuyerAfterSales.FirstOrDefault(p => OrderItemExt?.out_order_id == p.orderSn);
// 服务端这个值不会在拍新单后覆盖,在此处使用扩展订单绑定的买手单信息修改掉,后续在拍单的时候覆盖掉
if (ItemOrder.order_id == "3738859887048176128")
@@ -1012,7 +1013,7 @@ namespace AllBase.Model.DBModel
DirectRefundStatusStr = this.ItemOrder.out_after_sale_status.ParseToString();
if (DirectRefundStatusStr.Contains("退款成功"))
- DirectRefundStatusStr += "(¥" + DirectPddBuyerAfterSale.refundAmount * 0.01m + ")";
+ DirectRefundStatusStr += "(¥" + DirectPddBuyerAfterSale?.refundAmount * 0.01m + ")";
DirectRefundStatusBackColor = GlobalConfig.LightOrangeBrush;
if (DirectRefundStatusStr.ParseToString().Contains("退款成功"))