1淘宝拍单 2修复直发售后处理逻辑错误问题

This commit is contained in:
wule committed 2026-10-07 20:14:33 +08:00
1 parent b1e03ddbb1
commit da4f20ef3b
8 files changed
+525 -111

No files matched your search

+1
View File
@@ -68,6 +68,7 @@
<None Remove="Ctrls\PDDInvoice\Resources\invoice.js" />
<Resource Include="29wx.ico" />
<Resource Include="29_common_icon.ico" />
<Resource Include="Ctrls\OrderCtrls\Resources\tbAutoAddress.js" />
<Resource Include="Ctrls\PDDInvoice\Resources\invoice.js" />
<Resource Include="gear.ico" />
</ItemGroup>
@@ -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<Cookie> 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)
@@ -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
@@ -673,7 +673,7 @@
Title="采购账户:"
Cursor="Hand"
Foreground="#0099ff"
MouseLeftButtonUp="TransitOrderBuye_Click"
MouseLeftButtonUp="TransitOrderBuy_Click"
Visibility="{Binding ElementName=txtTransitOrderBuyerStr, Path=Text, Converter={StaticResource HasTextVisibility}}">
<WrapPanel Orientation="Horizontal">
<uc:UcWaterMarkTextBox1
@@ -55,8 +55,8 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
public OrderListRowItemCtrl()
{
InitializeComponent();
txtTransitOrderBuyerStr.AddHandler(TextBox.MouseUpEvent, new MouseButtonEventHandler(TransitOrderBuye_Click), true);
txtTransitOrderNumStr.AddHandler(TextBox.MouseUpEvent, new MouseButtonEventHandler(TransitOrderBuye_Click), true);
txtTransitOrderBuyerStr.AddHandler(TextBox.MouseUpEvent, new MouseButtonEventHandler(TransitOrderBuy_Click), true);
txtTransitOrderNumStr.AddHandler(TextBox.MouseUpEvent, new MouseButtonEventHandler(TransitOrderBuy_Click), true);
txtDirectBuyer.AddHandler(TextBox.MouseUpEvent, new MouseButtonEventHandler(txtDirectOrderNumStr_MouseLeftButtonUp), true);
txtDirectBuyerOrderNo.AddHandler(TextBox.MouseUpEvent, new MouseButtonEventHandler(txtDirectOrderNumStr_MouseLeftButtonUp), true);
txtRefundId.AddHandler(TextBox.MouseUpEvent, new MouseButtonEventHandler(txtRefundId_MouseLeftButtonUp), true);
@@ -397,14 +397,17 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
return;
// 拍单前检测买手号是否在线
if (GlobalConfig.CurrentPddBuyer.status == "在线")
if (GlobalConfig.CurrentBuyPlatform == "pdd")
{
PddMobileLoginViewModel.CheckBuyerLogin(GlobalConfig.CurrentPddBuyer);
}
if (GlobalConfig.CurrentPddBuyer.status != "在线")
{
BaseMsgWindow.ShowError("买手号掉线");
return;
if (GlobalConfig.CurrentPddBuyer.status == "在线")
{
PddMobileLoginViewModel.CheckBuyerLogin(GlobalConfig.CurrentPddBuyer);
}
if (GlobalConfig.CurrentPddBuyer.status != "在线")
{
BaseMsgWindow.ShowError("买手号掉线");
return;
}
}
orderRetry:
@@ -767,7 +770,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
return true;
}
private void TransitOrderBuye_Click(object sender, MouseButtonEventArgs e)
private void TransitOrderBuy_Click(object sender, MouseButtonEventArgs e)
{
var buyerName = txtTransitOrderBuyerStr.Text;
var outOrderId = txtTransitOrderNumStr.Text;
@@ -0,0 +1,140 @@
// 填写信息
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);
}
// 异步 sleep
function sleep(ms) {
return new Promise(resolve => 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;
}
})();
@@ -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);
@@ -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("退款成功"))