Merge branch 'main' of github.com:jtt-fan/29WxOrder

This commit is contained in:
chfei committed 2026-10-15 13:33:35 +08:00
commit 912837a84b
19 files changed
+1070 -426

No files matched your search

@@ -34,6 +34,17 @@
Orientation="Vertical"
VerticalSpacing="2">
<WrapPanel x:Name="wpPddBuyer">
<CheckBox
x:Name="chkPddBuyerLogin"
Margin="2,2,2,2"
HorizontalAlignment="Left"
VerticalAlignment="Center"
VerticalContentAlignment="Center"
d:IsChecked="True"
BorderBrush="{StaticResource mainColorBrush}"
Click="chkBuyerLogin_Click"
FontSize="12"
IsChecked="True" />
<ComboBox
x:Name="cmbPddBuyer"
Grid.Column="1"
@@ -108,7 +119,18 @@
<WrapPanel
x:Name="wpTaobaoBuyer"
d:Visibility="Visible"
Visibility="Collapsed">
Visibility="Visible">
<CheckBox
x:Name="chkTbBuyerLogin"
Margin="2,2,2,2"
HorizontalAlignment="Left"
VerticalAlignment="Center"
VerticalContentAlignment="Center"
BorderBrush="{StaticResource mainColorBrush}"
Click="chkBuyerLogin_Click"
FontSize="12"
IsChecked="False" />
<ComboBox
x:Name="cmbTaobaoBuyer"
Grid.Column="1"
@@ -189,7 +211,8 @@
c:DebugVisibility.Enable="True"
d:Visibility="Visible"
Click="btnSwitch_Click"
Style="{StaticResource BasePageButtonStyle}">
Style="{StaticResource BasePageButtonStyle}"
Visibility="Collapsed">
<TextBlock
Grid.Column="2"
Margin="0,0,0,1"
@@ -149,9 +149,10 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}
}
int buyZIndex = 2;
private void Image_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (wpPddBuyer.Visibility == Visibility.Visible)
if (/*wpPddBuyer.Visibility == Visibility.Visible*/ chkPddBuyerLogin.IsChecked == true)
{
if (MainWindow.Instance.gridTbBuyerOrderReadCtrl.Visibility != Visibility.Visible)
MainWindow.Instance.gridTbBuyerOrderReadCtrl.Visibility = Visibility.Visible;
@@ -159,10 +160,12 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
Panel.SetZIndex(MainWindow.Instance.gridTbBuyerOrderReadCtrl, 1);
else
Panel.SetZIndex(MainWindow.Instance.gridTbBuyerOrderReadCtrl, -1);
Panel.SetZIndex(MainWindow.Instance.pddBuyerOrderReadCtrl, buyZIndex++);
MainWindow.Instance.pddBuyerOrderReadCtrl.Visibility = Visibility.Visible;
MainWindow.Instance.tbBuyerOrderReadCtrl.Visibility = Visibility.Collapsed;
MainWindow.Instance.tbBuyerOrderReadCtrl.Visibility = Visibility.Visible;
}
else if (wpTaobaoBuyer.Visibility == Visibility.Visible)
else if (/*wpTaobaoBuyer.Visibility == Visibility.Visible*/ chkTbBuyerLogin.IsChecked == true)
{
if (MainWindow.Instance.gridTbBuyerOrderReadCtrl.Visibility != Visibility.Visible)
MainWindow.Instance.gridTbBuyerOrderReadCtrl.Visibility = Visibility.Visible;
@@ -170,7 +173,9 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
Panel.SetZIndex(MainWindow.Instance.gridTbBuyerOrderReadCtrl, 1);
else
Panel.SetZIndex(MainWindow.Instance.gridTbBuyerOrderReadCtrl, -1);
MainWindow.Instance.pddBuyerOrderReadCtrl.Visibility = Visibility.Collapsed;
Panel.SetZIndex(MainWindow.Instance.tbBuyerOrderReadCtrl, buyZIndex++);
MainWindow.Instance.pddBuyerOrderReadCtrl.Visibility = Visibility.Visible;
MainWindow.Instance.tbBuyerOrderReadCtrl.Visibility = Visibility.Visible;
}
else
@@ -318,5 +323,41 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}
}
}
private void chkBuyerLogin_Click(object sender, RoutedEventArgs e)
{
if (sender == chkPddBuyerLogin)
{
chkPddBuyerLogin.IsChecked = true;
chkTbBuyerLogin.IsChecked = false;
GlobalConfig.CurrentBuyPlatform = "pdd";
foreach (var order in GlobalConfig.lstOrder)
{
//OrderListCtrl.InitOrderObservableProp(order);
foreach (var orderItem in order.orderItems)
{
orderItem.UpdateOrderItemBuyButton();
orderItem.SetAbnormalAndDirectBtnVisibility();
}
}
}
else
{
chkPddBuyerLogin.IsChecked = false;
chkTbBuyerLogin.IsChecked = true;
GlobalConfig.CurrentBuyPlatform = "tb";
foreach (var order in GlobalConfig.lstOrder)
{
//OrderListCtrl.InitOrderObservableProp(order);
foreach (var orderItem in order.orderItems)
{
orderItem.UpdateOrderItemBuyButton();
orderItem.SetAbnormalAndDirectBtnVisibility();
}
}
}
}
}
}
@@ -12,6 +12,7 @@
Height="768"
MinWidth="800"
MinHeight="600"
d:Height="800"
Loaded="taobaoBuyOrderCtrl_Loaded"
mc:Ignorable="d">
<UserControl.Resources>
@@ -64,11 +65,12 @@
Background="White"
ClipToBounds="True">
<TextBlock
Margin="0,-140,0,0"
Padding="30,20"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Panel.ZIndex="99"
d:Text="TextBlock"
d:Text="ErrorMsg"
Background="#C0FFFFFF"
FontSize="20"
Foreground="Red"
@@ -76,6 +78,20 @@
Text="{Binding ErrorMsg}"
TextWrapping="Wrap"
Visibility="{Binding ErrorMsg, Converter={StaticResource HasTextVisibility}}" />
<TextBlock
Margin="0,0,0,0"
Padding="30,20"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Panel.ZIndex="99"
d:Text="TransitErrorMsg"
Background="#C0FFFFFF"
FontSize="20"
Foreground="Red"
IsHitTestVisible="False"
Text="{Binding TransitErrorMsg}"
TextWrapping="Wrap"
Visibility="{Binding TransitErrorMsg, Converter={StaticResource HasTextVisibility}}" />
</Grid>
<GridSplitter
Grid.Column="1"
@@ -98,6 +114,18 @@
Orientation="Vertical"
VerticalSpacing="4">
<Image
x:Name="imgOrderItem"
Grid.Row="1"
Grid.Column="0"
Width="100"
Height="100"
Margin="0,2,8,2"
VerticalAlignment="Top"
Cursor="Hand"
MouseDown="imgOrderItem_MouseDown"
Source="{Binding Img}" />
<TextBlock FontSize="14" FontWeight="Bold">店铺商品信息:</TextBlock>
<wpf:TitleContent
x:Name="tcShopGoodsName"
@@ -362,6 +390,19 @@
Content="重新关联商品"
FontSize="12"
Style="{StaticResource BasePageButtonLightStyle}" />
<Button
x:Name="btnCopyCurrentFullAddress"
Grid.Column="1"
Height="20"
MinWidth="48"
Margin="85,0,0,0"
Padding="4,0"
HorizontalAlignment="Left"
Command="{Binding CopyCurrentFullAddressCommand}"
Content="复制完整中转地址"
FontSize="12"
Style="{StaticResource BasePageButtonLightStyle}"
Visibility="{Binding CurrentFullTransitAddress, Converter={StaticResource HasTextVisibility}}" />
<Button
x:Name="btnManualUpdateBuyOrder"
Grid.Column="1"
@@ -375,6 +416,18 @@
FontSize="12"
Style="{StaticResource BasePageButtonStyle}" />
</Grid>
<TextBlock
Width="auto"
Padding="0,3"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Panel.ZIndex="99"
Background="#C0FFFFFF"
FontSize="16"
Foreground="#EE0000"
IsHitTestVisible="False"
Text=" 淘宝网页跳转速度较慢,请耐心等待"
TextWrapping="Wrap" />
</wpf:SpacingStackPanel>
</wpf:SpacingStackPanel>
@@ -444,10 +497,13 @@
TitleHorizontalAlignment="Right"
TitleWidth="{Binding ElementName=tcShopGoodsName, Path=TitleWidth}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<TextBox
x:Name="txtSendProvince"
Height="20"
Margin="0,0,96,0"
BorderBrush="{StaticResource pageColorBrush}"
BorderThickness="1"
Style="{StaticResource BaseRoundCornerTextBoxStyle}"
@@ -457,9 +513,10 @@
Grid.Column="1"
Height="20"
MinWidth="48"
Margin="0"
Margin="3,0,0,0"
Padding="4,0"
HorizontalAlignment="Right"
d:Opacity="0.5"
Content="手动更新发货地"
FontSize="12"
Style="{StaticResource BasePageButtonStyle}" />
@@ -44,6 +44,7 @@ public partial class TaobaoBuyOrderCtrl : UserControl
private async void taobaoBuyOrderCtrl_Loaded(object sender, RoutedEventArgs e)
{
btnManualUpdateSendProvince.Visibility = Visibility.Collapsed;
if (this.ViewModel.BuyType == "direct")
{
this.tcBuyAddress.Title = "拍单地址:";
@@ -77,4 +78,18 @@ public partial class TaobaoBuyOrderCtrl : UserControl
{
}
private void imgOrderItem_MouseDown(object sender, MouseButtonEventArgs e)
{
if (imgOrderItem.Width == 100)
{
imgOrderItem.Width = 300;
imgOrderItem.Height = 300;
}
else
{
imgOrderItem.Width = 100;
imgOrderItem.Height = 100;
}
}
}
@@ -9,6 +9,7 @@ using AllBase.Model.DBModel;
using AllBase.Model.MvvmBaseClasses;
using AllBase.Model.Result;
using CefSharp;
using CefSharp.DevTools.IO;
using CefSharp.Handler;
using CefSharp.Wpf;
using NaiBa.Util.Extension;
@@ -24,6 +25,7 @@ using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media.Imaging;
using TemuKJD.ToolForms;
using Work;
using Work._29Tools.BLL;
@@ -32,6 +34,7 @@ using Work.BaseForms;
using WxOrder.Framework.Commons;
using WxOrder.Framework.Helpers;
using static AllBase.DouYinModel.Result.DouOrderListInfo;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.ListView;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
using static WPFCommon.Interop.InteropValues;
@@ -66,6 +69,10 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
string mapSkuIdTmp = null;
string sendProvince = null;
pddFrontGoods3Lite pddFrontGoodsLite = null;
/// <summary>
/// 自动读取拍单状态时,网页资源更新,可能会刷新多次,防止重复调用,记录状态只允许调用一次
/// </summary>
private bool HasAutoUpdateBuyStatus = false;
/// <summary>
/// 直发direct 中转transit
@@ -100,6 +107,16 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
get { return this.GetValue(x => x.ErrorMsg); }
set { this.SetValue(x => x.ErrorMsg, value); }
}
public string TransitErrorMsg
{
get { return this.GetValue(x => x.TransitErrorMsg); }
set { this.SetValue(x => x.TransitErrorMsg, value); }
}
public string CurrentFullTransitAddress
{
get { return this.GetValue(x => x.CurrentFullTransitAddress); }
set { this.SetValue(x => x.CurrentFullTransitAddress, value); }
}
public Visibility BuyInfoVisivility
{
get { return this.GetValue(x => x.BuyInfoVisivility); }
@@ -264,6 +281,12 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
set { this.SetValue(x => x.cmbTransitWarehouseVal, value); }
}
public BitmapImage Img
{
get { return this.GetValue(x => x.Img); }
set { this.SetValue(x => x.Img, value); }
}
#endregion
#region 命令
@@ -276,6 +299,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
/// <summary> 重新关联 </summary>
public ICommand ReMapCommand { get; }
public ICommand CopyCurrentFullAddressCommand { get; }
/// <summary> 确认拍单 /// </summary>
public ICommand ManualUpdateBuyOrderCommand { get; }
/// <summary> 确认商品关联 </summary>
@@ -298,6 +322,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
CopyUserNameCommand = new DelegateCommand(CopyUserName);
CopyPasswordCommand = new DelegateCommand(CopyPassword);
ReMapCommand = new DelegateCommand(ReMap);
CopyCurrentFullAddressCommand = new DelegateCommand(CopyCurrentFullAddress);
ManualUpdateBuyOrderCommand = new DelegateCommand(ManualUpdateBuyOrder);
UpdateTransitWarehouseCommand = new DelegateCommand(UpdateTransitWarehouse);
@@ -322,6 +347,11 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
BuyInfoVisivility = Visibility.Collapsed;
MapInfoVisivility = Visibility.Visible;
}
Task.Run(() =>
{
Img = AllBase.ImageBuild.LoadBitmipImageFromUrl(orderItem.thumb_img);
});
}
/// <summary>
@@ -535,10 +565,23 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}
// 打开窗口即进入商品页面一定是拍单,则下一步点击立即购买,随后进入地址修改页面(不能一开始就进入,会掉cookie)
if (Address.StartsWith("https://item.taobao.com/item.htm?id="))
if (Address.StartsWith("https://item.taobao.com/item.htm?id=") || Address.StartsWith("https://detail.tmall.com/item.htm?id="))
{
if (this.BuyType == "transit")
TransitErrorMsg = "中转仓地址尚未匹配,请等待匹配成功后方可付款!";
try
{
if (transitWarehouse != null && !txtSourceCodeVal.IsNullOrEmpty())
{
var name = TransitWaybillHelper.LastName[Randomx.GetId(TransitWaybillHelper.LastName.Count)] + (Randomx.GetId(2) == 1 ? "先生" : "女士");
var mobile = TransitWaybillHelper.MobileHead[Randomx.GetId(TransitWaybillHelper.MobileHead.Count)] + Randomx.GetNumber(8);
var addressSubValue = Randomx.GetId(1, 35) + Randomx.GetId(1, 9).ToString().PadLeft(2, '0') + "室" + txtSourceCodeVal;
var detail = transitWarehouse.TransDetail + addressSubValue;
var address = name + mobile + transitWarehouse.TransFullAddress + addressSubValue;
CurrentFullTransitAddress = address;
}
// 点击 立即购买/领券购买
await AutoClickBuyButton();
@@ -546,7 +589,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
//await AutoClickManageAddressButton();
// 自动修改地址 进入地址页面
//Thread.Sleep(Randomx.GetId(500, 1000));
Thread.Sleep(Randomx.GetId(500, 1000));
CefWebBrowser.Load("https://i.taobao.com/my_itaobao/receiver-address-pc");
await AutoChangeAddress();
}
@@ -562,11 +605,11 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
private async Task AutoClickBuyButton()
{
for (int i = 0; i < 10 && !Address.StartsWith("https://item.taobao.com/item.htm?id="); i++)
for (int i = 0; i < 20 && !Address.StartsWith("https://item.taobao.com/item.htm?id=") && !Address.StartsWith("https://detail.tmall.com/item.htm?id="); i++)
{
Thread.Sleep(500);
}
if (!Address.StartsWith("https://item.taobao.com/item.htm?id="))
if (!Address.StartsWith("https://item.taobao.com/item.htm?id=") && !Address.StartsWith("https://detail.tmall.com/item.htm?id="))
throw new Exception("当前不在商品界面!");
var client = CefWebBrowser.GetDevToolsClient();
@@ -644,12 +687,12 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
sb.Append(" return 'failed';\r\n");
sb.Append("})();");
var jsStr = sb.ToString();
for (int i = 0; i < 20 && !Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml"); i++)
for (int i = 0; i < 30 && !Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml") && !Address.StartsWith("https://buy.tmall.com/order/confirm_order.htm"); i++)
{
var r = await client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
Thread.Sleep(500);
}
if (!Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml"))
if (!Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml") && !Address.StartsWith("https://buy.tmall.com/order/confirm_order.htm"))
throw new Exception("购买按钮不存在或点击失败!");
//滑块完成验证
@@ -677,7 +720,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
break;
}
if (!Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml"))
if (!Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml") && !Address.StartsWith("https://buy.tmall.com/order/confirm_order.htm"))
throw new Exception("立即购买点击失败!");
Thread.Sleep(500);
@@ -699,11 +742,11 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
private async Task AutoClickManageAddressButton()
{
for (int i = 0; i < 10 && !Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml"); i++)
for (int i = 0; i < 10 && !Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml") && !Address.StartsWith("https://buy.tmall.com/order/confirm_order.htm"); i++)
{
Thread.Sleep(500);
}
if (!Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml"))
if (!Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml") && !Address.StartsWith("https://buy.tmall.com/order/confirm_order.htm"))
throw new Exception("当前不在结算界面!");
var client = CefWebBrowser.GetDevToolsClient();
@@ -817,6 +860,8 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
detail = transitWarehouse.TransDetail + addressSubValue;
address = name + mobile + transitWarehouse.TransFullAddress + addressSubValue;
CurrentFullTransitAddress = address;
if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(mobile) || string.IsNullOrEmpty(address))
throw new Exception("地址获取失败!");
}
@@ -1031,11 +1076,11 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
// 7.确定已回到结算页面
await client.Runtime.EvaluateAsync("history.go(-1);", null, true, null, null, true, null, true);
for (int i = 0; i < 10 && !Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml"); i++)
for (int i = 0; i < 10 && !Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml") && !Address.StartsWith("https://buy.tmall.com/order/confirm_order.htm"); i++)
{
Thread.Sleep(500);
}
if (!Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml"))
if (!Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml") && !Address.StartsWith("https://buy.tmall.com/order/confirm_order.htm"))
throw new Exception("当前不在结算界面!");
// 8.确定结算页面地址是最新中转仓地址
@@ -1080,7 +1125,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}
// https://item.taobao.com/item.htm?id=756295486950&skuId=5216824841290
if (currentUrl.Contains("item.taobao.com/item.htm?") && currentUrl.Contains("id") && currentUrl.Contains("skuId"))
if ((currentUrl.Contains("item.taobao.com/item.htm?") || currentUrl.Contains("detail.tmall.com/item.htm?")) && currentUrl.Contains("id") && currentUrl.Contains("skuId"))
{
if (IsMappingGoods && buymapSkuInfo?.map_skus != null)
{
@@ -1101,6 +1146,54 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
SetBuyMapValues();
}
}
// 放到资源更新时候调用,防止触发两次
// "https://web.m.taobao.com/app/tbpc-trade/tbpc-pay-success/home"
if (currentUrl.Contains("app/tbpc-trade/tbpc-pay-success/home") && currentUrl.Contains("?biz_order_id=" + this.txtBuyOrderIdVal))
{
// 拍单后更新状态
if (!HasAutoUpdateBuyStatus)
{
HasAutoUpdateBuyStatus = true;
this.ManualUpdateBuyOrder();
}
}
if (this.BuyType == "transit" && (Address.StartsWith("https://buy.taobao.com/auction/buy_now.jhtml") || Address.StartsWith("https://buy.tmall.com/order/confirm_order.htm")))
{
Task.Run(() =>
{
// 确定结算页面地址是最新中转仓地址
var client = CefWebBrowser.GetDevToolsClient();
try
{
var jsRst = "failed";
var sb = new StringBuilder();
sb.Append("(function() {\r\n");
sb.Append(" var uiElements = document.getElementsByTagName('div');\r\n");
sb.Append(" for (i = 0; i < uiElements.length; i++) {\r\n");
sb.Append(" var uiElement = uiElements[i];\r\n");
sb.Append(" if (uiElement.innerHTML.indexOf('" + txtSourceCodeVal + "') >= 0) {\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 t = client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
jsRst = t.Result.Result.Value.ParseToString();
Thread.Sleep(500);
}
if (jsRst == "success")
TransitErrorMsg = "";
}
catch
{
}
});
}
}
private void CefWebBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e)
@@ -1144,6 +1237,8 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
return;
}
await Task.Run(() => { });
// 1.关联或者购买商品
//https://detail.tmall.com/item.htm?id=655638393036&sku_properties=1627207%3A42499150508
//{"appData":null,"loaderData":{"home":{"data":{"res":{"seller":{"sellerNick":"匹克世冠专卖店","shopName":"匹克世冠专卖店","evaluates":[{"score":"4.8 ","level":"1","levelText":"高","title":"宝贝描述","type":"desc"},{"score":"4.8 ","level":"1","levelText":"高","title":"卖家服务","type":"serv"},{"score":"4.8 ","level":"1","levelText":"高","title":"物流服务","type":"post"}],"startsIcon":"https://img.alicdn.com/imgextra/i4/O1CN018GrFIW1Zx7vwjt3Jg_!!6000000003260-2-tps-91-14.png","pcShopUrl":"//shop67269976.taobao.com","creditLevelIcon":"//gw.alicdn.com/imgextra/i1/O1CN01VD9Iap25oweneR31D_!!6000000007574-2-tps-120-60.png","sellerType":"B","encryptUid":"RAzN8HWKpmWFSf9AkzVpz3nhAYRZrPS63pSiDPMWyvui5ixfJBs"},"item":{"images":["https://img.alicdn.com/imgextra/i4/717513321/O1CN01cvzkE61aP4Tjeupfh_!!4611686018427380329-0-item_pic.jpg","https://img.alicdn.com/imgextra/i3/717513321/O1CN01W9mF4N1aP4OAc3Mtt_!!4611686018427380329-0-item_pic.jpg","https://img.alicdn.com/imgextra/i1/717513321/O1CN01a72PTr1aP4S55SiRs_!!4611686018427380329-0-item_pic.jpg"],"title":"匹克态极拖鞋男情侣款夏季外穿潮鞋篮球运动防滑太极沙滩凉拖鞋女","itemId":"655638393036","useWirelessDesc":"true","qrCode":"https://h5.m.taobao.com/awp/core/detail.htm?id=655638393036","spuId":"2122802472","titleIcon":"//img.alicdn.com/tfs/TB1SMG7nnvI8KJjSspjXXcgjXXa-78-36.png?getAvatar=avatar"},"feature":{"pcResistDetail":"true","tmwOverseasScene":"false","pcIdentityRisk":"true"},"plusViewVO":{"askAnswerVO":{"ext":{"skeletonImg":"https://img.alicdn.com/imgextra/i2/O1CN01MLPxBr1flZy969k5W_!!6000000004047-2-tps-1376-1216.png"},"hit":"true"},"addCartActionVO":{"ext":{"type":"dialogWithRecommond_2","frequency":"day:1;repeat:1"},"hit":"true"},"guessLikeVO":{"hit":"true"},"wangwangFlowSplitVO":{"hit":"true"},"rankVO":{"hit":"true"},"tabPlaceholderVO":{"hit":"true"},"imageSearchVO":{"ext":{"textList":["商品已经下架啦~要不要瞧瞧别的~","该区域暂不支持购买","此商品不支持在当前地区销售","商品已经卖光啦~","当前商品仅限店铺会员购买","商品已经卖光啦,非常抱歉","店铺正在打烊中,当前商品不可下单","商品已经卖光啦~","当前库存已售完","该商品有卖家设置的购买门槛,须达门槛才可购买噢~","此商品暂时不能购买"]},"spm":"aliabtest1115297_1138353","hit":"true"},"reportEntranceVO":{"spm":"aliabtest1097211_1051854","hit":"true"},"headAtmosphereBeltVO":{"valid":"false","hit":"true"},"commentListVO":{"ext":{"countShow":"\"false\""},"hit":"true"},"pcFrontSkuQuantityLimitVO":{"hit":"true"},"buyParamVO":{"ext":{"autoApplCoupSource":"pcDetailOrder","needAutoApplCoup":"true"},"hit":"true"}},"skuCore":{"skuItem":{"renderSku":"true","itemStatus":0,"unitBuy":1},"sku2info":{"0":{"moreQuantity":"true","quantity":200,"logisticsTime":"平均9小时发货","price":{"priceTitle":"优惠前","priceColorNew":"#FFFFFF","priceText":"157","priceDesc":"起","priceMoney":"15700"},"quantityDisplayValue":1,"quantityText":"有货","buyExParams":{"mi_id":"0000m5cdA3X8kO8PXBJ3r8ji8d6gjumNVDVBkp9kKySsEPW3KKjUvUifmdD1Plv0m1WF"}},"5359436967823":{"moreQuantity":"false","quantity":12,"logisticsTime":"48小时内发货","price":{"priceTitle":"优惠前","priceColorNew":"#FFFFFF","priceText":"157","priceMoney":"15700"},"cartParam":{"addCartCheck":"true"},"quantityDisplayValue":1,"quantityText":"有货","buyExParams":{"mi_id":"0000m5cdA3X8kO8PXBJ3r8ji8d6gjumNVDVBkp9kKySsEPW3KKjUvUifmdD1Plv0m1WF"}},"5769423993152":{"moreQuantity":"false","quantity":19,"logisticsTime":"48小时内发货","price":{"priceTitle":"优惠前","priceColorNew":"#FFFFFF","priceText":"157","priceMoney":"15700"},"cartParam":{"addCartCheck":"true"},"quantityDisplayValue":1,"quantityText":"有货","buyExParams":{"mi_id":"0000m5cdA3X8kO8PXBJ3r8ji8d6gjumNVDVBkp9kKySsEPW3KKjUvUifmdD1Plv0m1WF"}},"5359436967808":{"moreQuantity":"false","quantity":46,"logisticsTime":"48小时内发货","price":{"priceTitle":"优惠前","priceColorNew":"#FFFFFF","priceText":"157","priceMoney":"15700"},"cartParam":{"addCartCheck":"true"},"quantityDisplayValue":1,"quantityText":"有货","buyExParams":{"mi_id":"0000m5cdA3X8kO8PXBJ3r8ji8d6gjumNVDVBkp9kKySsEPW3KKjUvUifmdD1Plv0m1WF"}},"5359436967810":{"moreQuantity":"false","quantity":95,"logisticsTime":"48小时内发货","price":{"priceTitle":"优惠前","priceColorNew":"#FFFFFF","priceText":"157","priceMoney":"15700"},"cartParam":{"addCartCheck":"true"},"quantityDisplayValue":1,"quantityText":"有货","buyExParams":{"mi_id":"0000m5cdA3X8kO8PXBJ3r8ji8d6gjumNVDVBkp9kKySsEPW3KKjUvUifmdD1Plv0m1WF"}},"5132110197053":{"moreQuantity":"false","quantity":18,"logisticsTime":"平均9小时发货","price":{"priceTitle":"优惠前","priceColorNew":"#FFFFFF","priceText":"169","priceMoney":"16900"},"cartParam":{"addCartCheck":"true"},"quantityDisplayValue":1,"quantityText":"有货","buyExParams":{"mi_id":"0000m5cdA3X8kO8PXBJ3r8ji8d6gjumNVDVBkp9kKySsEPW3KKjUvUifmLine truncated
@@ -1183,7 +1278,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
continue;
var tbSku2 = dicTaoBaoSku2[key];
if (tbSku2.quantity < 1 || tbSku2.quantityText != "有货")
if (tbSku2.quantity < 1 || !tbSku2.quantityText.Contains("有货") )
continue;
var taobaoSku = taobaoSkusLst.FirstOrDefault(s => s.skuId == key);
@@ -1273,12 +1368,17 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
var quantity = BaseRegex.GetStringJson(ref dataTmp, "quantity");
this.txtBuyCntVal = quantity;
}
// 3.获取订单Id
if (url.StartsWith("https://h5api.m.taobao.com/h5/mtop.trade.order.create"))
if (url.StartsWith("https://h5api.m.taobao.com/h5/mtop.trade.order.create") || url.StartsWith("https://h5api.m.tmall.com/h5/mtop.trade.order.create"))
{
//{"api":"mtop.trade.order.create","data":{"alipayOrderId":"2026100823001114311406600349","alipayWapCashierUrl":"https://tbapi.alipay.com/trade/trade_payment.htm?sign_account_no=20884520920143130156&sign_date=1791446919&sign_signature=hme_x_lhum6j77_y_b8m4ge%2F7_q_cbu8_rw_a_r_uru_zz_du0%2F_c_l_u_rkc7sodv_zfh_q%3D%3D&sign_from=3000&trade_no=2026100823001114311406600349&already_check=0","backUrl":"https://web.m.taobao.com/app/tbpc-trade/tbpc-pay-success/home?biz_order_ids=5127312711003132114","bizOrderId":"5127312711003132114","buyerNumId":2210214614749,"cashierParam":{"sdkExtParams":{}},"clientPayScenario":0,"feature":{"pcRedirectLocation":"orderSuccess.vm","targetURL":"https://tbapi.alipay.com/trade/trade_payment.htm?sign_account_no=20884520920143130156&sign_date=1791446919&sign_signature=hme_x_lhum6j77_y_b8m4ge%2F7_q_cbu8_rw_a_r_uru_zz_du0%2F_c_l_u_rkc7sodv_zfh_q%3D%3D&sign_from=3000&trade_no=2026100823001114311406600349&already_check=0"},"nextUrl":"https://tbapi.alipay.com/trade/trade_payment.htm?sign_account_no=20884520920143130156&sign_date=1791446919&sign_signature=hme_x_lhum6j77_y_b8m4ge%2F7_q_cbu8_rw_a_r_uru_zz_du0%2F_c_l_u_rkc7sodv_zfh_q%3D%3D&sign_from=3000&trade_no=2026100823001114311406600349&already_check=0","partSuccess":false,"resultType":0,"secrityPay":true,"signStr":"service=\"mobile.securitypay.pay\"&_input_charset=\"utf-8\"&app_name=\"tb\"&appenv=\"appid=taobao^system=tbwang^version=1.0.0#pc\"&partner=\"PARTNER_TAOBAO_ORDER\"&biz_type=\"trade\"&trade_no=\"2026100823001114311406600349\"&sign_date=\"2026-10-08 16:08:39\"&extern_token=\"1e48bb37ed4474e59b7d10b39491a123\"&monitorType=\"0-buy2.create-doCreatingOrderBiz-0000\"&sign=\"_ov_g_x_y1i_p_q_x6_mgtxgr_h_f_l5_lq_gyr_s_q_g2_sz_k_t1_i%2F2_d3wo_v%2B_t52_n_h_dr_p_e_a%3D%3D\"&sign_type=\"DSA\"","simplePay":true,"useSimplePayForH5":false,"withholdingParams":"{}"},"ret":["SUCCESS::调用成功"],"traceId":"2147844817914469194905047e0ea8","v":"6.0"}
txtBuyOrderIdVal = BaseRegex.GetStringJson(ref responseData, "bizOrderId");
}
if (responseData.Contains("\"bizOrderId\":"))
{
txtBuyOrderIdVal = BaseRegex.GetStringJson(ref responseData, "bizOrderId");
}
//if (url.StartsWith("https://h5api.m.taobao.com/h5/mtop.trade.order.adjust/6.0"))
//{ //"https://h5api.m.taobao.com/h5/mtop.trade.order.create"
@@ -1292,10 +1392,15 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
// //{"api":"mtop.user.getUserSimple","v":"1.0","ret":["SUCCESS::调用成功"],"data":{"nick":"jtt_fan","userNumId":440631048,"displayNick":"jtt_fan"}}
//}
if (url.StartsWith("https://web.m.taobao.com/app/tbpc-trade/tbpc-pay-success/home") && url.Contains("?biz_order_id=" + this.txtBuyOrderIdVal))
{
this.ManualUpdateBuyOrder();
}
//if (currentUrl.Contains("app/tbpc-trade/tbpc-pay-success/home") && currentUrl.Contains("?biz_order_id=" + this.txtBuyOrderIdVal))
//{
// // 拍单后更新状态
// if (!HasAutoUpdateBuyStatus)
// {
// HasAutoUpdateBuyStatus = true;
// this.ManualUpdateBuyOrder();
// }
//}
}
private void SetBuyMapValues()
@@ -1924,6 +2029,23 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
this.MapInfoVisivility = Visibility.Visible;
this.transitWarehouse = null;
this.IsMappingGoods = true;
this.mapSkuIdTmp = null;
}
public void CopyCurrentFullAddress()
{
for (int i = 0; i < 10; i++)
{
try
{
Clipboard.SetDataObject(CurrentFullTransitAddress);
BaseMsgWindow.ShowInfo("复制成功");
break;
}
catch (Exception ex)
{
}
}
}
}
@@ -10,6 +10,7 @@ using AllBase.Model.DBModel;
using AllBase.Model.Result;
using AllBase.Util;
using CefSharp;
using CefSharp.DevTools.IO;
using CefSharp.DevTools.LayerTree;
using CefSharp.DevTools.Network;
using CefSharp.Handler;
@@ -55,6 +56,9 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
/// </summary>
public partial class TbBuyerOrderReadCtrl : UserControl
{
/// <summary>
/// 淘宝拍单是否走同步单逻辑
/// </summary>
bool IsTbSyncDirectBuyOrderWaybill = false;
Dictionary <BuyerLoginInfo, TbPickInfo> dicTbPickInfo = new Dictionary<BuyerLoginInfo, TbPickInfo>();
@@ -136,7 +140,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
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.tracking_number.ParseToString().Contains(filterTxt) &&
!order.sendStatus.ParseToString().Contains(filterTxt))
return true;
return false;
@@ -159,8 +163,6 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
return;
this.lbTbBuyer.ItemsSource = GlobalConfig.TaobaoBuyerLoginList;
buyerReadOrderConfig = NaiBa.Util.Helper.ConfigHelper.LoadConfig<TbBuyerReadOrderConfig>("tb_buyer_read_order_config");
@@ -277,7 +279,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
cefShowShopOrderLstWebBrowser.RequestHandler = new LocalRequestHandler(resourceRequestHandler);
var lifeSapnHandler = new LocalLifeSpanHandler(PopWindowType.SelfWindow);
cefShowShopOrderLstWebBrowser.LifeSpanHandler = lifeSapnHandler;
cefShowShopOrderLstWebBrowser.KeyboardHandler = new KeyboardHandler();
cefShowShopOrderLstWebBrowser.KeyboardHandler = new CefKeyboardHandler();
cefShowShopOrderLstWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd;
cefShowShopOrderLstWebBrowser.AddressChanged += CefWebBrowser_AddressChanged;
cefShowShopOrderLstWebBrowser.LoadError += CefWebBrowser_LoadError;
@@ -293,7 +295,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
cefWebBrowser.RequestHandler = new LocalRequestHandler(resourceRequestHandler);
var lifeSapnHandler = new LocalLifeSpanHandler(PopWindowType.SelfWindow);
cefWebBrowser.LifeSpanHandler = lifeSapnHandler;
cefWebBrowser.KeyboardHandler = new KeyboardHandler();
cefWebBrowser.KeyboardHandler = new CefKeyboardHandler();
cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd;
cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged;
cefWebBrowser.LoadError += CefWebBrowser_LoadError;
@@ -326,24 +328,26 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData, IRequest request)
{
var cookie1 = request.Headers["Cookie"];
Task.Run(() =>
Task.Run(async () =>
{
var url1 = url;
var data1 = responseData;
var send1 = sender;
//if (data1.Contains("260415-154067299863696") || data1.Contains("待用户退回商品") || data1.Contains("已寄出,待商家处理") || data1.Contains("待商家处理退货申请") || data1.Contains("待用户拒收商品"))
//{
//}
// 读订单
if (url1.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/aristotle/order_list_v"))
var cookies = new List<CefSharp.Cookie>();
if (sender is ChromiumWebBrowser cefBrowser)
{
Task.Run(() =>
{
CefReadBuyerOrder(url1, data1);
});
}
cookies = WPFCEFBrowser.GetCookieList("taobao.com", cefBrowser.GetCookieManager(null));
}
//https://h5api.m.taobao.com/h5/mtop.taobao.order.queryboughtlistv2/1.0/?jsv=2.7.2&appKey=12574478&t=1791772085595&sign=c3107dae91d0e3117bc9228593f78993&v=1.0&ecode=1&timeout=8000&dataType=json&valueType=original&ttid=1%40tbwang_windows_1.0.0%23pc&needLogin=true&type=originaljson&isHttps=1&needRetry=true&api=mtop.taobao.order.queryboughtlistV2&__customTag__=boughtList_all_OrderList&preventFallback=true
//{"api":"mtop.taobao.order.queryboughtlistv2","data":{"data":{"pcTaoBoughtList":{"tag":"pcTaoBoughtList"},"contentContainer":{"tag":"contentContainer"},"orderContainer":{"tag":"orderContainer"},"orderHeader":{"tag":"orderHeader","type":"native$tbpc_bought_list_order_header"},"shopOrderContainer_5127836437008004903":{"tag":"shopOrderContainer","id":"5127836437008004903","type":"layout$tbpc_container$0$0","fields":{"className":"trade-bought-list-order-container"}},"shopInfo_5127836437008004903":{"tag":"shopInfo","id":"5127836437008004903","type":"native$tbpc_bought_list_order_shop_info","fields":{"createDay":"2026-10-09","createTime":"2026-10-09 19:19:11","hideWangWang":false,"isInstallmentPay":"false","isNewShopImg":"true","isPurchaseUser":false,"isRelatedPay":"false","maxCheckCnt":0,"memoFlag":0,"newShopImg":"//gw.alicdn.com/imgextra/i2/O1CN01IBkgQN26Fy77Dv9zk_!!6000000007633-2-tps-80-36.png","orderDetailUrl":"//trade.taobao.com/trade/detail/trade_order_detail.htm?biz_order_id=5127836437008004903","orderId":"5127836437008004903","orderOperationList":[{"orderOperation":{"event":"delOrder","eventType":"delOrder","highLight":false,"name":"删除订单","status":"normal"}}],"outUrl":"https://shop445007916.taobao.com/category.htm","sellerName":"jtt_fan","shopImg":"//gtd.alicdn.com/tps/i4/TB1f.8ZFVXXXXXvaXXXEDhGGXXX-32-32.png","shopName":"JttFan的小店1313","supportBuyerFlagPopUpWindow":true,"tradeTitle":"交易关闭"},"events":{"delOrder":[{"type":"delOrderV2","fields":{"alert":{"cancelText":"取消","confirmText":"确定","msg":"删除之后可以从电脑端订单回收站恢复","title":"确认删除订单?"},"mtopConfig":{"apiMethod":"mtop.order.doOp","apiVersion":"3.0","data":{"archive":"false","code":"delOrder","orderId":"5127836437008004903"},"header":{},"isNeedWua":true,"needEcodeSign":true,"usePost":true},"toastError":"response_msg","toastSucceed":"response_msg"}}]}},"orderColContainer_5127836437008004903":{"tag":"orderColContainer","id":"5127836437008004903","type":"layout$tbpc_container$0$0","fields":{"type":"row"}},"orderDetailCol_5127836437008004903":{"tag":"orderDetailCol","id":"5127836437008004903","type":"layout$tbpc_container$0$0","fields":{"className":"trade-bought-col-order-detail"}},"orderItemGroup_5127836437008004903_1_1":{"tag":"orderItemGroup","id":"5127836437008004903_1_1"},"orderItemInfo_5127836437008004903_5127836437008004903":{"tag":"orderItemInfo","id":"5127836437008004903_5127836437008004903","type":"native$tbpc_order_item_info","fields":{"item":{"h5SnapshotUrl":"https://market.m.taobao.com/app/tp/snapshot-m/pages/index/index.html?bizOrderId=5127836437008004903","isUseH5SnapshotUrl":"true","itemId":"1086145916321","itemUrl":"https://item.taobao.com/item.htm?id=1086145916321&mi_id=0000yseHp6Dc14XqU9Z_3a3nh_esoatLyv7ANXpcothZwP4","outerUrl":"//trade.taobao.com/trade/detail/trade_order_detail.htm?biz_order_id=5127836437008004903","pic":"//img.alicdn.com/imgextra/i4/440631048/O1CN017oJSA71Jc1iDXhwgV_!!440631048.jpg_200x200.jpg","priceInfo":{"actualTotalFee":"¥5.00","promotion":"¥5.00"},"quantity":"1","skuInfo":[{"skuKey":"颜色分类","skuText":"颜色分类:发绳1条","skuValue":"发绳1条"}],"skuText":"发绳1条","title":"网红高弹力橡皮筋头绳女简约百搭扎可爱头发发饰发绳发圈头绳"},"orderId":"5127836437008004903","serviceinfo":{"main":[{"name":"极速退款"},{"name":"7天无理由退货"}]},"suborderop":{"values":[{"event":"subAddBagAgain","eventData":{"addBagAgain":true,"alert":false,"alertWithOpenUrl":false,"degrade2OldVersion":false,"doPay":false,"eventType":"addBagAgain","eventUtArgsCondition":true,"eventUtArgsExposureCondition":true,"eventUtArgsNotExposureCondition":false,"openAnimateWin":false,"openBatchRefundPop":false,"openRefundPop":false,"openUrl":false,"openUrlUtArgsCondition":false,"openUrlUtArgsExposureCondition":false,"openUrlUtArgsNotExposureCondition":false,"params":{"failUrl":"https://market.m.taobao.com/app/tb-source-app/order-search/pages/orderPurchase?wh_weex=true&type=0&showSubTitle=0&showBenefit=false&benefitParam=%7B%22itemInfoList%22%3A%22440631048%3A1086145916321%22%2C%22applyChannel%22%3A%22REPEAT_PURCHASE%22%7D","loadingConfig":{"message":"载入中..."},"mtopConfig":{"apiMethod":"mtop.trade.addBag","apiVersion":"3.1","data":{"cartFrom":"DEFAULT_HSF","exParams":"{\"repeatPurchaseChannel\":\"orderList\",\"mi_id\":\"00005xPspPjdIxxLxG8aD5_zjcs2a5xwCwfY3MpG6WuAG7acYGR88mDa33psjMqP_F2b\"}","itemId":"1086145916321","quantity":"1","skuId":"6139115929803"},"header":{},"isNeedWua":true,"needEcodeSign":true,"usePost":true},"reasons":[{"1":"我不想买了"}],"successUrl":"https://market.m.taobao.com/app/tb-source-app/order-search/pages/orderPurchase?wh_weex=true&type=1&showSubTitle=1&itemId=1086145916321&showBenefit=false&benefitParam=%7B%22itemInfoList%22%3A%22440631048%3A1086145916321%22%2C%22applyChannel%22%3A%22REPEAT_PURCHASE%22%7D","toastExtraParams":{}},"refreshMtop":false,"remoteUltronPop":false,"utArg1":"Page_OrderDLine truncated
//data1.Contains("1634559696625614947")
if (url.StartsWith("https://h5api.m.taobao.com/h5/mtop.taobao.order.queryboughtlistv"))
{
var cookiestr = JsonHelper.SerializeObject(cookies); // "Name":"unb","Value":"2210214614749"
var buyer = GlobalConfig.TaobaoBuyerLoginList.FirstOrDefault(u => cookiestr.Contains(cookiestr));
await HandleCefReadBuyerOrder(url1, data1, buyer);
}
//// 读取售后
//if (url1.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/blade/after_sales_list"))
@@ -565,51 +569,160 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
tb_afterSale.AfterSaleAddress = buyer_after_sale?.afterSaleAddress;
}
void CefReadBuyerOrder(string url, string data)
{
if (data.Contains("轻奢壁挂式香皂盒置物架卫生间沥水家居可拆卸收纳盒翻盖肥皂盒"))
{
async Task HandleCefReadBuyerOrder(string url, string data, BuyerLoginInfo buyer)
{
if (buyer == null)
return;
////https://h5api.m.taobao.com/h5/mtop.taobao.order.queryboughtlistv2/1.0/?jsv=2.7.2&appKey=12574478&t=1791888392155&sign=ae9eb598e5249794a0e324b94849d6e7&v=1.0&ecode=1&timeout=8000&dataType=json&valueType=original&ttid=1%40tbwang_windows_1.0.0%23pc&needLogin=true&type=originaljson&isHttps=1&needRetry=true&api=mtop.taobao.order.queryboughtlistV2&__customTag__=boughtList_all_OrderList&preventFallback=true
////{"api":"mtop.taobao.order.queryboughtlistv2","data":{"data":{"pcTaoBoughtList":{"tag":"pcTaoBoughtList"},"contentContainer":{"tag":"contentContainer"},"orderContainer":{"tag":"orderContainer"},"orderHeader":{"tag":"orderHeader","type":"native$tbpc_bought_list_order_header"},"shopOrderContainer_5127515318323214133":{"tag":"shopOrderContainer","id":"5127515318323214133","type":"layout$tbpc_container$0$0","fields":{"className":"trade-bought-list-order-container"}},"shopInfo_5127515318323214133":{"tag":"shopInfo","id":"5127515318323214133","type":"native$tbpc_bought_list_order_shop_info","fields":{"createDay":"2026-10-13","createTime":"2026-10-13 18:18:05","hideWangWang":false,"isInstallmentPay":"false","isNewShopImg":"true","isPurchaseUser":false,"isRelatedPay":"false","maxCheckCnt":0,"memoFlag":0,"newShopImg":"//gw.alicdn.com/imgextra/i2/O1CN01IBkgQN26Fy77Dv9zk_!!6000000007633-2-tps-80-36.png","orderDetailUrl":"//trade.taobao.com/trade/detail/trade_order_detail.htm?biz_order_id=5127515318323214133","orderId":"5127515318323214133","orderOperationList":[{"orderOperation":{"event":"delOrder","eventType":"delOrder","highLight":false,"name":"删除订单","status":"normal"}}],"outUrl":"https://shop445007916.taobao.com/category.htm","sellerName":"jtt_fan","shopImg":"//gtd.alicdn.com/tps/i4/TB1f.8ZFVXXXXXvaXXXEDhGGXXX-32-32.png","shopName":"JttFan的小店1313","supportBuyerFlagPopUpWindow":true,"tradeTitle":"交易关闭"},"events":{"delOrder":[{"type":"delOrderV2","fields":{"alert":{"cancelText":"取消","confirmText":"确定","msg":"删除之后可以从电脑端订单回收站恢复","title":"确认删除订单?"},"mtopConfig":{"apiMethod":"mtop.order.doOp","apiVersion":"3.0","data":{"archive":"false","code":"delOrder","orderId":"5127515318323214133"},"header":{},"isNeedWua":true,"needEcodeSign":true,"usePost":true},"toastError":"response_msg","toastSucceed":"response_msg"}}]}},"orderColContainer_5127515318323214133":{"tag":"orderColContainer","id":"5127515318323214133","type":"layout$tbpc_container$0$0","fields":{"type":"row"}},"orderDetailCol_5127515318323214133":{"tag":"orderDetailCol","id":"5127515318323214133","type":"layout$tbpc_container$0$0","fields":{"className":"trade-bought-col-order-detail"}},"orderItemGroup_5127515318323214133_1_1":{"tag":"orderItemGroup","id":"5127515318323214133_1_1"},"orderItemInfo_5127515318323214133_5127515318323214133":{"tag":"orderItemInfo","id":"5127515318323214133_5127515318323214133","type":"native$tbpc_order_item_info","fields":{"item":{"h5SnapshotUrl":"https://market.m.taobao.com/app/tp/snapshot-m/pages/index/index.html?bizOrderId=5127515318323214133","isUseH5SnapshotUrl":"true","itemId":"1086145916321","itemUrl":"https://item.taobao.com/item.htm?id=1086145916321&mi_id=0000yseHp6Dc14XqU9Z_3a3nhwRJZwD1uuo3Tl6yinmGo4w","outerUrl":"//trade.taobao.com/trade/detail/trade_order_detail.htm?biz_order_id=5127515318323214133","pic":"//img.alicdn.com/imgextra/i4/440631048/O1CN017oJSA71Jc1iDXhwgV_!!440631048.jpg_200x200.jpg","priceInfo":{"actualTotalFee":"¥5.00","promotion":"¥5.00"},"quantity":"1","refundStatus":"退款成功","skuInfo":[{"skuKey":"颜色分类","skuText":"颜色分类:发绳1条","skuValue":"发绳1条"}],"skuText":"发绳1条","title":"网红高弹力橡皮筋头绳女简约百搭扎可爱头发发饰发绳发圈头绳"},"orderId":"5127515318323214133","serviceinfo":{"main":[{"name":"极速退款"},{"name":"7天无理由退货"}]},"suborderop":{"values":[{"event":"wirelessRefund","eventData":{"addBagAgain":false,"alert":false,"alertWithOpenUrl":false,"degrade2OldVersion":false,"doPay":false,"eventType":"openUrl","eventUtArgsCondition":false,"eventUtArgsExposureCondition":false,"eventUtArgsNotExposureCondition":false,"openAnimateWin":false,"openBatchRefundPop":false,"openRefundPop":false,"openUrl":true,"openUrlUtArgs":{"url":"https://refund2.taobao.com/dispute/applyRouter.htm?bizOrderId=5127515318323214133"},"openUrlUtArgsCondition":true,"openUrlUtArgsExposureCondition":true,"openUrlUtArgsNotExposureCondition":false,"params":{"url":"https://refund2.taobao.com/dispute/applyRouter.htm?bizOrderId=5127515318323214133"},"refreshMtop":false,"remoteUltronPop":false,"utArg1":"Page_OrderDetail_Button-wirelessRefund","utWirelessRefund":true,"utWirelessRefundArgs":{"eventType":"openUrl"}},"eventType":"openUrl","highLight":"false","name":"退款成功"},{"event":"subAddBagAgain","eventData":{"addBagAgain":true,"alert":false,"alertWithOpenUrl":false,"degrade2OldVersion":false,"doPay":false,"eventType":"addBagAgain","eventUtArgsCondition":true,"eventUtArgsExposureCondition":true,"eventUtArgsNotExposureCondition":false,"openAnimateWin":false,"openBatchRefundPop":false,"openRefundPop":false,"openUrl":false,"openUrlUtArgsCondition":false,"openUrlUtArgsExposureCondition":false,"openUrlUtArgsNotExposureCondition":false,"params":{"failUrl":"https://market.m.taobao.com/app/tb-source-app/order-search/pages/orderPurchase?wh_weex=true&type=0&showSubTitle=0&showBenefit=false&beLine truncated
//if (data.Contains("退款成功"))
//{
//}
lastCefReadOrderTime = DateTime.Now;
if (data.Contains("\"orderContainer\":[]"))
{
Dispatcher.Invoke(() => { lblMsg.Content = buyer.buyer_name + " 获取到空订单列表,退出自动读单 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); });
currentReadBuyer = "";
return;
}
var buyer = GlobalConfig.TaobaoBuyerLoginList.FirstOrDefault(b => url.Contains(b.buyer_id));
if (buyer == null)
return;
Dispatcher.Invoke(() => { lblMsg.Content = buyer.buyer_name + " 正在获取订单列表 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); });
lastCefReadOrderTime = DateTime.Now;
var shopOrderContainerString = BaseRegex.GetOneJsonArrStrJson(ref data, "orderContainer");
List<string> shopOrderContainerList = JsonHelper.DeserializeJsonToList<string>(shopOrderContainerString);
shopOrderContainerList.RemoveAll(o => !o.Contains("shopOrderContainer_"));
//{"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 = "";
TaobaoLoginViewModel.CheckBuyerLogin(new List<BuyerLoginInfo> { buyer }, false);
return;
}
List<TbBuyerOrderLiteInfo> oList = new List<TbBuyerOrderLiteInfo>();
List<TbBuyerAfterSaleLiteInfo> afList = new List<TbBuyerAfterSaleLiteInfo>();
Dispatcher.Invoke(new Action(() =>
{
lblMsg.Content = buyer.buyer_name + " 正在获取订单列表 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}));
var orderIdLst = shopOrderContainerList.Select(o => o.Replace("shopOrderContainer_", "")).ToList();
foreach (var orderId in orderIdLst)
{
var orderPaymentStr = BaseRegex.GetOneJsonObjStrJson(ref data, "orderPayment_" + orderId);
var orderPayment = JsonHelper.DeserializeJsonToObject<TaobaoOrderPayment>(orderPaymentStr);
var list = JsonHelper.DeserializeJsonToList<TbBuyerOrderLiteInfo>(JsonHelper.JObjectParse(data)["orders"].ParseToString());
var orderItemInfoStr = BaseRegex.GetOneJsonObjStrJson(ref data, "orderItemInfo_" + orderId + "_" + orderId).ParseToString();
var shopInfoStr = BaseRegex.GetOneJsonObjStrJson(ref data, "shopInfo_" + orderId);
var orderLogistics = BaseRegex.GetOneJsonObjStrJson(ref data, "orderLogistics_" + orderId);
var orderStatus = BaseRegex.GetOneJsonObjStrJson(ref data, "orderStatus_" + orderId);
// 提取拼多多外采订单列表
TbBuyerOrderLiteInfo o = new TbBuyerOrderLiteInfo();
o.order_sn = "tb_" + orderId;
o.activity_type = "0";
o.after_sales = null;
o.discount_amount = (orderPayment.fields.discountFee?.value) == null ? null : ((orderPayment.fields.discountFee?.value?.Replace("¥", "")).ParseToDecimal() * 100).ParseToInt();
o.extra_info = null;
o.order_amount = (orderPayment.fields.actualFee?.value) == null ? null : ((orderPayment.fields.actualFee?.value?.Replace("¥", "")).ParseToDecimal() * 100).ParseToInt();
if (!string.IsNullOrEmpty(orderItemInfoStr))
{
o.order_Goods =
[
new order_good()
{
goods_name = BaseRegex.GetStringJson(ref orderItemInfoStr, "title"),
cat_id_1 = 0,
cat_id_2 = 0,
cat_id_3 = 0,
cat_id_4 = 0,
event_type = 0,
goods_id = BaseRegex.GetStringJson(ref orderItemInfoStr, "itemId"),
goods_number = BaseRegex.GetStringJson(ref orderItemInfoStr, "quantity").ParseToInt(),
goods_price = (BaseRegex.GetStringJson(ref orderItemInfoStr, "actualTotalFee").Replace("¥", "").ParseToDecimal() * 100).ParseToInt(),
goods_type = 1,
is_pre_sale = 0,
sku_id = BaseRegex.GetStringJson(ref orderItemInfoStr, "skuId"),
spec = BaseRegex.GetStringJson(ref orderItemInfoStr, "skuText"),
thumb_url = BaseRegex.GetStringJson(ref orderItemInfoStr, "itemUrl"),
},
];
}
o.order_link_url = BaseRegex.GetStringJson(ref shopInfoStr, "orderDetailUrl");
o.order_prompt_color = "#E02E24";
// 买家已付款 卖家已发货 交易成功 交易关闭 退款成功
o.order_status_prompt = BaseRegex.GetStringJson(ref shopInfoStr, "tradeTitle");
o.parent_order_sn = "";
o.service_amount = 0;
o.shipping_amount = ((orderPayment.fields.pcPostFee?.value?.Replace("¥", "")).ParseToDecimal() * 100).ParseToInt();
o.order_time = BaseClass.DateTimeToTimestampSeconds(BaseRegex.GetStringJson(ref shopInfoStr, "createTime").ParseToDateTime());
if (o.order_time < BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddMonths(-2)))
{
Dispatcher.Invoke(() => { lblMsg.Content = buyer.buyer_name + " 已读取近两个月订单,退出自动读单 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); });
currentReadBuyer = "";
}
if (orderLogistics != null)
{
o.tbOutExpressCompanyMsg = BaseRegex.GetStringJson(ref orderLogistics, "cpName");
o.tracking_number = BaseRegex.GetStringJson(ref orderLogistics, "mailNo");
}
oList.Add(o);
// 售后单放在同一个列表中统一处理
var refundStatus = BaseRegex.GetStringJson(ref orderItemInfoStr, "refundStatus");
if (!string.IsNullOrEmpty(refundStatus) && !string.IsNullOrEmpty(orderStatus))
{
TbBuyerAfterSaleLiteInfo af = new TbBuyerAfterSaleLiteInfo();
af.buyerId = o.buyerId;
af.buyerName = o.buyerName;
var disputeUrl = BaseRegex.GetStringJson(ref orderStatus, "url");
af.afterSalesId = disputeUrl.ParseToString().Contains("disputeId=") ? BaseRegex.GetStringQuery(ref disputeUrl, "disputeId").ParseToLong() : null;
if (af.afterSalesId.IsNullOrZero())
af.afterSalesId = o.order_sn.Replace("tb_", "").ParseToLong();
af.listItemAmountVO = new ListItemAmountVO()
{
orderAmount = o.order_amount,
refundAmount = orderStatus.IsNullOrEmpty() ? o.order_amount : (BaseRegex.GetStringJson(ref orderStatus, "subTitle").Split('¥').LastOrDefault().ParseToDecimal() * 100).ParseToInt(),
};
if (af.listItemAmountVO.refundAmount == 0)
af.listItemAmountVO.refundAmount = o.order_amount;
af.listItemExtraVO = new ListItemExtraVO() { navToDetailPageUrl = disputeUrl.ParseToString().StartsWith("https") ? disputeUrl : ("https:" + disputeUrl) };
af.listItemGoodsVO = new ListItemGoodsVO
{
goodsImage = o.order_Goods.FirstOrDefault()?.thumb_url,
goodsName = o.order_Goods.FirstOrDefault()?.goods_name,
goodsNumber = o.order_Goods.FirstOrDefault()?.goods_number,
goodsPrice = o.order_Goods.FirstOrDefault()?.goods_price,
richTextList = null,
spec = o.order_Goods.FirstOrDefault()?.spec,
};
af.listItemMallVO = new ListItemMallVO();
// 售后状态
af.listItemStatusVO = new ListItemStatusVO()
{
statusText = refundStatus,
};
af.tbOrderSn = o.order_sn;
af.tbOrderDate = BaseClass.StampToDateTime(o.order_time.ParseToInt()).ToString("yyMMdd").ParseToInt();
if (af.afterSalesId > 0)
afList.Add(af);
}
}
await HandleCefReadBuyerOrder(buyer, oList);
if (afList.Count > 0)
{
if (afList.Any(o => o.orderSn.Contains("tb_5127796188031004903")))
{
}
await HandleCefReadBuyerAfterSale(buyer, afList);
}
}
async Task HandleCefReadBuyerOrder(BuyerLoginInfo buyer, List<TbBuyerOrderLiteInfo> list)
{
//var list = JsonHelper.DeserializeJsonToList<TbBuyerOrderLiteInfo>(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)
@@ -622,8 +735,10 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
lstSyncLogistics.Add(syncOrder);
}
}
// 根据拼多多外采订单列表查询中转仓订单信息
var transitOrderList = GetOrderTransitWarehouseInfo(out_order_nos);
// 根据拼多多外采订单列表查询订单扩展信息
var orderExtList = GetOrderItemExtInfo(out_order_nos);
@@ -654,7 +769,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
o.buyerId = buyer.buyer_id;
o.buyerName = buyer.buyer_name;
if (o.order_sn == "260923-573109716621688")
if (o.order_sn == "tb_5127796188031004903")
{
}
@@ -740,8 +855,13 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
order.sendStatus = o.sendStatus;
}
//order = JsonHelper.DeserializeJsonToObject<TbBuyerOrderInfoLite>(JsonHelper.SerializeObject(o));
order.activity_type = o.activity_type;
//order = JsonHelper.DeserializeJsonToObject<TbBuyerOrderInfoLite>(JsonHelper.SerializeObject(o));
// 淘宝专属物流公司名称
order.tbOutExpressCompanyMsg = o.tbOutExpressCompanyMsg;
// 赋值字段属性值
order.activity_type = o.activity_type;
order.after_sales = o.after_sales;
order.discount_amount = o.discount_amount;
order.display_amount = o.display_amount;
@@ -809,7 +929,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}));
}
Task.Run(() =>
await Task.Run(() =>
{
// 根据订单状态 取号/修改取号
if (order.WxSendTypeStr == "直发")
@@ -817,46 +937,44 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
// 微信售后,客户端取消直发买手订单
if (order.ShopOrderRefundStr.ParseToString().Contains("售后"))
{
if (!",2,3,4,5,7,8,10,31,".Contains("," + (order.after_sales?.after_sales_status).ParseToString() + ","))
{
// 待发货直接售后,并通知中转仓接口修改退货状态
var afterSaleRst = TbDirectAutoAfterSale(order);
isUpdate = true;
}
// todo 将拼多多售后改为淘宝售后
//if (!",2,3,4,5,7,8,10,31,".Contains("," + (order.after_sales?.after_sales_status).ParseToString() + ","))
//{
// // 待发货直接售后,并通知中转仓接口修改退货状态
// var afterSaleRst = TbDirectAutoAfterSale(order);
// isUpdate = true;
//}
}
// 淘宝IsTbSyncDirectBuyOrderWaybill目前为假,不执行同步单逻辑
if (GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill != true || IsTbSyncDirectBuyOrderWaybill != true)
SendOrderE57(order);
}
else
}
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 = TbTransitAutoAfterSale(order);
isUpdate = true;
}
{
// todo 将拼多多售后改为淘宝售后
//if (!",2,3,4,5,7,8,10,31,".Contains("," + (order.after_sales?.after_sales_status).ParseToString() + ","))
//{
// // 待发货直接售后,并通知中转仓接口修改退货状态
// var afterSaleRst = TbTransitAutoAfterSale(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 = TbTransitAutoAfterSale(order);
isUpdate = true;
}
//if (!",2,3,4,5,7,8,10,31,".Contains("," + (order.after_sales?.after_sales_status).ParseToString() + ","))
//{
// // 待发货直接售后,并通知中转仓接口修改退货状态
// var afterSaleRst = TbTransitAutoAfterSale(order);
// isUpdate = true;
//}
}
SendTransitOrderE57(order);
}
if (order.order_sn == "260924-431226960203223")
{
}
if (order.ShopOrderIdStr == "3739392779260688128")
{
}
// 同步单更新处理逻辑 淘宝IsTbSyncDirectBuyOrderWaybill目前为假,不执行同步单逻辑
if (order.WxSendTypeStr == "直发" && IsTbSyncDirectBuyOrderWaybill)
{
if (GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill && !string.IsNullOrEmpty(order.tracking_number) && order.WxOrderStatus < 30)
@@ -865,7 +983,6 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}
if (isUpdate && !string.IsNullOrEmpty(order.ShopOrderIdStr)/* && order.WxSendTypeStr != "直发"*/)
{
// 买手订单状态记录到数据库
order_tb_buyer_order tbBuyerOrder = new order_tb_buyer_order()
{
@@ -902,12 +1019,11 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
data3 += "&wx_order_id=" + tbBuyerOrder.wx_order_id;
data3 += "&wx_sku_id=" + tbBuyerOrder.wx_sku_id;
data3 += "&wx_send_type=" + tbBuyerOrder.wx_send_type;
data3 += "&platform=" + "tb";
var html3 = GetHtml.PostUtf8(url3, data3);
if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
html3 = GetHtml.PostUtf8(url3, data3);
//勾选了调用同步单接口,必须直发且库里已有物流单号
//勾选了调用同步单接口,必须直发且库里已有物流单号 淘宝IsTbSyncDirectBuyOrderWaybill目前为假,不执行同步单逻辑
if (order.WxSendTypeStr == "直发" && IsTbSyncDirectBuyOrderWaybill == true)
{
if (GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill && !string.IsNullOrEmpty(order.tracking_number) && html3.Contains("\"code\":200"))
@@ -916,7 +1032,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}
}
// 填写取件码
// 填写取件码 淘宝IsTbSyncDirectBuyOrderWaybill目前为假,不执行同步单逻辑
if (order.WxSendTypeStr == "直发" && IsTbSyncDirectBuyOrderWaybill == true)
{
if (GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill && !string.IsNullOrEmpty(order.tracking_number))
@@ -931,42 +1047,46 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
NaiBa.Util.Helper.ConfigHelper.SaveConfig("tb_buyer_order_list", lstTbBuyerOrderInfoLite);
}
void CefReadBuyerAfterSale(string url, string data)
{
var buyer = GlobalConfig.TaobaoBuyerLoginList.FirstOrDefault(b => url.Contains(b.buyer_id));
if (buyer == null)
return;
async Task HandleCefReadBuyerAfterSale(string url, string data)
{
var buyer = GlobalConfig.TaobaoBuyerLoginList.FirstOrDefault(b => url.Contains(b.buyer_id));
if (buyer == null)
return;
lastCefReadOrderTime = DateTime.Now;
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;
}
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"))
{
TaobaoLoginViewModel.CheckBuyerLogin(new List<BuyerLoginInfo> { buyer }, false);
{
TaobaoLoginViewModel.CheckBuyerLogin(new List<BuyerLoginInfo> { 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");
}));
Dispatcher.Invoke(new Action(() =>
{
lblMsg.Content = buyer.buyer_name + " 正在获取售后列表 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}));
var list = JsonHelper.DeserializeJsonToList<TbBuyerAfterSaleLiteInfo>(JsonHelper.JObjectParse(data)["result"]["listItemVOList"].ParseToString());
var list = JsonHelper.DeserializeJsonToList<TbBuyerAfterSaleLiteInfo>(JsonHelper.JObjectParse(data)["result"]["listItemVOList"].ParseToString());
var out_order_nos = string.Join(",", list.Select(bo => bo.orderSn));
}
async Task HandleCefReadBuyerAfterSale(BuyerLoginInfo buyer, List<TbBuyerAfterSaleLiteInfo> list)
{
var out_order_nos = string.Join(",", list.Select(bo => bo.orderSn));
var transitOrderList = GetOrderTransitWarehouseInfo(out_order_nos);
var orderExtList = GetOrderItemExtInfo(out_order_nos);
@@ -986,6 +1106,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id));
}
}
// 获取订单售后,暂时关闭,使用订单详情售后状态字段
//var refunds = GetOrderRefundInfo(order_ids);
var buyerAfterSales = GetOrderAfterSales(order_ids);
@@ -995,7 +1116,12 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
foreach (TbBuyerAfterSaleLiteInfo af in list)
{
af.buyerId = buyer.buyer_id;
if (af?.orderSn == "tb_5127796188031004903")
{
}
af.buyerId = buyer.buyer_id;
af.buyerName = buyer.buyer_name;
oms_wei_external_procurement_log_info transitItem = null;
@@ -1038,11 +1164,6 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}
}
if (af.ShopOrderIdStr == "3738122233932312576" || af.orderSn== "260803-433020014881353") //260803-433020014881353
{
}
bool isUpdate = false;
TbBuyerAfterSaleLiteInfo afterSale = null;
if (!lstTbBuyerAfterSaleInfoLite.Any(or => or.afterSalesId == af.afterSalesId))
@@ -1080,6 +1201,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
afterSale.sendStatus = af.sendStatus;
}
afterSale.tbOrderSn = af.tbOrderSn;
afterSale.afterSalesId = af.afterSalesId;
afterSale.listItemAmountVO = JsonHelper.DeserializeJsonToObject<ListItemAmountVO>(JsonHelper.SerializeObject(af.listItemAmountVO));
afterSale.listItemExtraVO = JsonHelper.DeserializeJsonToObject<ListItemExtraVO>(JsonHelper.SerializeObject(af.listItemExtraVO));
@@ -1118,8 +1240,9 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}));
}
}
// 过滤显示订单
if (filterOneBuyerAfterSale(afterSale) == false)
// 过滤显示订单
if (filterOneBuyerAfterSale(afterSale) == false)
{
Dispatcher.Invoke(new Action(() =>
{
@@ -1138,17 +1261,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}));
}
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 (afterSale?.ShopIdStr == "3739817058390688256")
{
}
@@ -1161,7 +1274,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
// 退款状态有变化才发起修改(退款状态不能从退款成功变成未退款)
TbBuyerAfterSaleLiteInfo afterSaleRefundSuccessExist = null;
afterSaleRefundSuccessExist = lstTbBuyerAfterSaleInfoLite.FirstOrDefault(a => a.afterSalesId != afterSale.afterSalesId &&
a.orderSn == afterSale.orderSn && (a.AfterSaleStatusStr.Contains("退款成功") || a.AfterSaleStatusStr.Contains("交易已取消")));
a.orderSn == afterSale.orderSn && (a.AfterSaleStatusStr.Contains("退款成功") || a.AfterSaleStatusStr.Contains("交易关闭")));
if ((afterSaleRefundSuccessExist == null || afterSale.AfterSaleStatusStr == afterSaleRefundSuccessExist.AfterSaleStatusStr) &&
(afterSale.AfterSaleStatusOldStr != afterSale.AfterSaleStatusStr))
@@ -1173,7 +1286,8 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
else
{
// 如果买手退款成功,仓库不是买手退款成功,则修改仓库售后字段为买手退款成功
if (afterSale.AfterSaleStatusStr.Contains("退款成功") || afterSale.AfterSaleStatusStr.Contains("交易已取消"))
//if (afterSale.AfterSaleStatusStr.Contains("退款成功") || afterSale.AfterSaleStatusStr.Contains("交易已取消"))
if (afterSale.AfterSaleStatusStr.Contains("退款成功") || afterSale.AfterSaleStatusStr.Contains("交易关闭"))
{
if (afterSale.TransitBuyerOrderRefundStatus != "买手退款成功")
{
@@ -1275,7 +1389,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
refundAmount = afterSale.listItemAmountVO?.refundAmount,
statusText = afterSale.AfterSaleStatusStr,
};
var url3 = BaseClass.Build29WxObjString("order/wx_add_mdy_buyer_after_sale");
var url3 = BaseClass.Build29WxObjString("order/wx_add_mdy_tb_buyer_after_sale");
var data3 = UserLogin.GetSignaturex();
data3 += "&wx_order_id=" + tbBuyerAfterSale.wx_order_id;
data3 += "&wx_sku_id=" + tbBuyerAfterSale.wx_sku_id;
@@ -1291,7 +1405,6 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
data3 += "&refundAmount=" + tbBuyerAfterSale.refundAmount;
data3 += "&statusText=" + tbBuyerAfterSale.statusText;
data3 += "&wx_send_type=" + tbBuyerAfterSale.wx_send_type;
data3 += "&platform=" + "tb";
if(tbBuyerAfterSale.wx_send_type == 1)
{
@@ -1436,8 +1549,8 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
Thread.Sleep(Randomx.GetId(2000, 3000));
Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = buyer.buyer_nick + " 待发货读取中"; }));
BindBuyer(buyer, "正在读取待发货");
Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = buyer.buyer_nick + " 订单读取中"; }));
BindBuyer(buyer, "正在读取订单");
top = 0;
lastCefReadOrderTime = DateTime.Now;
@@ -1472,25 +1585,43 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
break;
times++;
Thread.Sleep(Randomx.GetId(100, 300));
//top += Randomx.GetId(450, 600);
Thread.Sleep(Randomx.GetId(1000, 2000));
//var jsStr = @"window.scroll({
// top: document.body.scrollHeight,
// left: 0,
// behavior: 'smooth' // 可选,使滚动平滑
// });";
//jsStr = @"window.scroll({
// top: " + top + @",
// left: 0,
// behavior: 'smooth' // 可选,使滚动平滑
// });";
//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);
//}
// 1.点击下一页按钮
string jsRst = "failed";
StringBuilder sb = new StringBuilder();
sb.Append("(function() {\r\n");
sb.Append(" var searchElements = document.getElementsByTagName('div');\r\n");
sb.Append(" for (i = 0; i < searchElements.length; i++) {\r\n");
sb.Append(" var searchElement = searchElements[i];\r\n");
sb.Append(" if (searchElement.innerHTML.indexOf('下一页') >= 0 && searchElement.innerHTML.indexOf('下一页') <= 3 && searchElement.outerHTML.indexOf('disabled') >= 0) {\r\n");
sb.Append(" return 'end';\r\n");
sb.Append(" }\r\n");
sb.Append(" if (searchElement.innerHTML.indexOf('下一页') >= 0 && searchElement.innerHTML.indexOf('下一页') <= 3) {\r\n");
sb.Append(" searchElement.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();
var client = buyer.wpf_browser.GetDevToolsClient();
var t = client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
t.Wait(10000);
jsRst = t.Result.Result.Value.ParseToString();
if (jsRst.IsNullOrEmpty() || jsRst == "failed")
{
Dispatcher.Invoke(() => { lblMsg.Content = buyer.buyer_name + " 订单读取失败,跳过 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); });
BindBuyer(buyer, "订单读取失败,跳过");
break;
}
if (jsRst == "end")
{
Dispatcher.Invoke(() => { lblMsg.Content = buyer.buyer_name + " 订单读取完毕,跳过 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); });
BindBuyer(buyer, "订单读取完毕,跳过");
break;
}
Thread.Sleep(Randomx.GetId(5000, 7000));
}
if (isSkipNext)
{
@@ -1593,6 +1724,11 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
// order.sendStatus = "";
NaiBa.Util.Helper.ConfigHelper.SaveConfig("tb_buyer_order_list", lstTbBuyerOrderInfoLite);
if (order.order_sn == "tb_5127845257228122932")
{
}
// 仓库处理中
if (order.sendStatus.ParseToString().Contains("仓库处理中"))
{
@@ -2061,7 +2197,6 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
data3 += "&pdd_order_sn=" + order.order_sn;
data3 += "&wx_order_id=" + order.ShopOrderIdStr;
data3 += "&wx_send_type=1";
data3 += "&platform=" + "tb";
var html3 = GetHtml.PostUtf8(url3, data3);
if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
html3 = GetHtml.PostUtf8(url3, data3);
@@ -2234,11 +2369,6 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
/// <returns></returns>
public string TbTransitAutoAfterSale(TbBuyerOrderLiteInfo order)
{
//if (isReadOrder)
//{
// BaseMsgForm.ShowError("正再读取订单,请稍候");
// return;
//}
//// 订单详情页
////https://mobile.yangkeduo.com/order.html?order_sn=260417-318525949581688
//// 退货详情页
@@ -2662,4 +2792,29 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
/// </summary>
public bool IsAutoAfterSale = true;
}
public class TaobaoOrderPayment
{
public string tag { get; set; } // "orderPayment",
public string id { get; set; } // "5127806125533004903",
public string type { get; set; } // "native$tbpc_bought_list_order_payment",
public TaobaoOrderPaymentFields fields { get; set; }
}
public class TaobaoOrderPaymentFields
{
public TaobaoOrderPaymentFee actualFee { get; set; } // 实付款
public TaobaoOrderPaymentFee discountFee { get; set; } // 优惠
public string hasBuyerMessage { get; set; } // "false",
public bool? isMobileOrder{ get; set; } // false,
public bool? isXCardOrder { get; set; } // false,
public TaobaoOrderPaymentFee pcPostFee { get; set; } // 含运费
public TaobaoOrderPaymentFee totalFee { get; set; } // 总价
}
public class TaobaoOrderPaymentFee
{
public string prefix { get; set; } // "实付款"
public string value { get; set; } // "¥1.43"
}
}
@@ -306,9 +306,13 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
// 读取暂时记录的买手订单,后面想办法放到中转订单库里去
var pddBuyerOrders = GetPddBuyerOrders(order_ids);
// 读取暂时记录的淘宝买手订单(格式与拼多多的一致,存在不同的表中),后面想办法放到中转订单库里去
pddBuyerOrders.AddRange(GetTbBuyerOrders(order_ids));
// 读取暂时记录的买手售后单,后面想办法放到中转订单库里去
var pddBuyerAfterSales = GetPddBuyerAfterSales(order_ids);
// 读取暂时记录的淘宝买手售后单(格式与拼多多的一致,存在不同的表中),后面想办法放到中转订单库里去
pddBuyerAfterSales.AddRange(GetTbBuyerAfterSales(order_ids));
// 同步单
var buyerIds = string.Join(",", pddBuyerOrders.Select(o => o.order_sn));
@@ -736,6 +740,34 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
return new List<order_pdd_buyer_order>();
}
public static List<order_pdd_buyer_order> GetTbBuyerOrders(string order_ids)
{
if (string.IsNullOrEmpty(order_ids))
return new List<order_pdd_buyer_order>();
var url4 = BaseClass.Build29WxObjString("order/wx_get_tb_buyer_order_list");
var data4 = UserLogin.GetSignaturex();
data4 += "&wx_order_id_in=" + order_ids;
var html4 = GetHtml.PostUtf8(url4, data4);
if (string.IsNullOrEmpty(html4) || !html4.Contains("\"code\":200"))
html4 = GetHtml.PostUtf8(url4, data4);
if (string.IsNullOrEmpty(html4) || !html4.Contains("\"code\":200"))
{
BaseMsgWindow.ShowAnimateMessage("订单读取失败(买手) " + BaseRegex.GetStringJson(ref html4, "msg"), "Error", 5);
}
List<order_pdd_buyer_order> pddBuyerOrders = new List<order_pdd_buyer_order>();
try
{
pddBuyerOrders = JsonHelper.DeserializeJsonToList<order_pdd_buyer_order>(JObject.Parse(html4)["data"].ParseToString())
.OrderByDescending(p => p.TransitCreateTime).ToList();
return pddBuyerOrders;
}
catch
{
}
return new List<order_pdd_buyer_order>();
}
public static List<order_pdd_buyer_after_sale> GetPddBuyerAfterSales(string order_ids)
{
var url6 = BaseClass.Build29WxObjString("order/wx_get_buyer_after_sale_list");
@@ -764,6 +796,34 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
return new List<order_pdd_buyer_after_sale>();
}
public static List<order_pdd_buyer_after_sale> GetTbBuyerAfterSales(string order_ids)
{
var url6 = BaseClass.Build29WxObjString("order/wx_get_tb_buyer_after_sale_list");
var data6 = UserLogin.GetSignaturex();
data6 += "&wx_order_id_in=" + order_ids;
List<order_pdd_buyer_after_sale> pddBuyerAfterSales = new List<order_pdd_buyer_after_sale>();
if (!string.IsNullOrEmpty(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", 6);
return new List<order_pdd_buyer_after_sale>();
}
try
{
pddBuyerAfterSales = JsonHelper.DeserializeJsonToList<order_pdd_buyer_after_sale>(JObject.Parse(html6)["data"].ParseToString()).OrderByDescending(p => p.TransitCreateTime).ToList();
return pddBuyerAfterSales;
}
catch
{
}
}
return new List<order_pdd_buyer_after_sale>();
}
public static List<yh_sync_logistics> GetSyncLogistics(string buyer_order_ids, int? not_upload_pickup_status = null)
{
var url6 = BaseClass.Build29WxObjString("order/wx_get_sync_waybill");
@@ -1188,15 +1248,13 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
{
if (orderItem.order_id == "3739105285145538816")
{
}
if (order.OrderBuyType == "直发" || order.OrderBuyType == "云改直")
{
if (order.out_after_sale_status.ParseToString().Contains("待用户发货") && !(orderItem.DistribReturnOrderInfo?.real_logistics_express_code).IsNullOrEmpty())
{
string orderSn = order.out_order_no;
if (orderSn.IsNullOrEmpty())
if (orderSn.IsNullOrEmpty() || orderSn.StartsWith("tb_")) // 无外采或淘宝外采直接退出
continue;
string buyerNickName = order.out_account;
if (buyerNickName.IsNullOrEmpty())
@@ -2447,222 +2505,233 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
{
if (tmpOrderItem.order_id == "3739296914665288192")
{
}
Dispatcher.Invoke(new Action(() => { BottomMsg = "正在处理买手退货,总计:" + tmpOrderItems.Count + ",已处理:" + index++; }));
var pddOrderSn = "";
var outOrderSn = "";
if (tmpOrderItem.ItemOrder?.OrderBuyType == "云仓")
pddOrderSn = tmpOrderItem.ItemTransitOrderWithVoid?.out_order_no;
outOrderSn = tmpOrderItem.ItemTransitOrderWithVoid?.out_order_no;
else if (tmpOrderItem.ItemOrder?.OrderBuyType == "直发" || tmpOrderItem.ItemOrder?.OrderBuyType == "云改直")
pddOrderSn = tmpOrderItem.ItemOrder?.out_order_no;
outOrderSn = tmpOrderItem.ItemOrder?.out_order_no;
BuyerLoginInfo buyer = null;
if (tmpOrderItem.ItemOrder?.OrderBuyType == "云仓")
Dispatcher.Invoke(new Action(() => { buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_nick == tmpOrderItem.ItemTransitOrderWithVoid.buyer_account); }));
else if (tmpOrderItem.ItemOrder?.OrderBuyType == "直发" || tmpOrderItem.ItemOrder?.OrderBuyType == "云改直")
Dispatcher.Invoke(new Action(() => { buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_nick == tmpOrderItem.ItemOrder?.out_account); }));
if (buyer == null)
{
BaseMsgWindow.ShowAnimateMessage("买手单:" + pddOrderSn + " 买手不在当前账户下,跳过", "Error", 3);
continue;
if (outOrderSn.StartsWith("tb_"))
{
// todo 淘宝退货暂时不处理
}
// 检测一下买手号
if (buyer.status == "在线")
else
{
PddMobileLoginViewModel.CheckBuyerLogin(buyer);
}
if (buyer.status != "在线")
{
BaseMsgWindow.ShowAnimateMessage("买手单:" + pddOrderSn + " 买手号掉线,跳过", "Error", 3);
continue;
}
#region 拼多多外采退货
await Task.Run(() => { MainWindow.Instance.orderListCtrl.GetOrder(tmpOrderItem.order_id); });
var pddOrderSn = outOrderSn;
oms_wei_order_info order = null;
Dispatcher.Invoke(new Action(() => { order = GlobalConfig.lstOrder.FirstOrDefault(oi => oi.order_id == tmpOrderItem.order_id); }));
if (order == null)
continue;
oms_wei_order_item_info orderItem = null;
Dispatcher.Invoke(new Action(() => { orderItem = order.orderItems.FirstOrDefault(oi => oi.order_id == tmpOrderItem.order_id && oi.sku_id == tmpOrderItem.sku_id); }));
if (orderItem == null)
continue;
string refundStatusStr = "";
string outOrderNo = "";
string AfterSaleAddressStr = "";
if (order.OrderBuyType == "云仓")
{
outOrderNo = (orderItem.ItemTransitOrderWithVoid?.out_order_no).ParseToString();
refundStatusStr = (orderItem?.TransitRefundStatusStr).ParseToString();
AfterSaleAddressStr = orderItem.PddBuyerAfterSaleAddressStr;
}
else if (order.OrderBuyType == "直发" || order.OrderBuyType == "云改直")
{
outOrderNo = (order.out_order_no).ParseToString();
refundStatusStr = (order.out_after_sale_status).ParseToString();
AfterSaleAddressStr = orderItem.DirectPddBuyerAfterSaleAddressStr;
}
if (string.IsNullOrEmpty(outOrderNo) || !(AfterSaleAddressStr.IsNullOrEmpty() || GetNeedBuyerNewAfterSale(refundStatusStr)) || !GetNeedBuyerAfterSale(refundStatusStr))
continue;
PddBuyerOrderLiteInfo pddBuyerOrderLiteInfo = new PddBuyerOrderLiteInfo();
pddBuyerOrderLiteInfo.ShopOrderIdStr = orderItem.order_id;
pddBuyerOrderLiteInfo.order_sn = pddOrderSn;
if (order.OrderBuyType == "云仓")
pddBuyerOrderLiteInfo.order_amount = orderItem.ItemTransitOrderWithVoid?.out_amount;
else if (order.OrderBuyType == "直发" || order.OrderBuyType == "云改直")
pddBuyerOrderLiteInfo.order_amount = order.out_amount;
order_pdd_buyer_after_sale pddBuyerAfterSale = new order_pdd_buyer_after_sale()
{
wx_order_id = orderItem.order_id,
wx_sku_id = orderItem.sku_id,
TransitCreateTime = orderItem.ItemTransitOrderWithVoid?.created_time == null ? DateTime.MinValue : orderItem.ItemTransitOrderWithVoid.created_time,
pre_allocated_order_no = orderItem.ItemTransitOrderWithVoid?.pre_allocated_order_no,
buyerId = buyer.buyer_id,
buyerName = buyer.buyer_name,
orderSn = pddOrderSn,
orderAmount = pddBuyerOrderLiteInfo.order_amount,
refundAmount = pddBuyerOrderLiteInfo.order_amount,
orderDate = pddOrderSn.ParseToString().Split('-').FirstOrDefault().ParseToInt(),
};
// 根据云仓还是直发判断是哪个买手单
if (tmpOrderItem.ItemOrder?.OrderBuyType == "云仓" && orderItem.PddBuyerAfterSale != null)
pddBuyerAfterSale = orderItem.PddBuyerAfterSale;
if (tmpOrderItem.ItemOrder?.OrderBuyType != "云仓" && orderItem.DirectPddBuyerAfterSale != null)
pddBuyerAfterSale = orderItem.DirectPddBuyerAfterSale;
bool isSimPddAfterSaleSuccess = true;
if (GetNeedBuyerNewAfterSale(refundStatusStr))
{
isSimPddAfterSaleSuccess = false;
// pddBuyerAfterSale作为参数传入,获取退货退款金额
var rst = PDDBuyerOrderReadCtrl.SimPddAfterSaleWithReturnGoods(buyer, pddBuyerOrderLiteInfo, pddBuyerAfterSale);
var afterSalesStatus = BaseRegex.GetIntJson(ref rst, "after_sales_status");
var afterSalesId = BaseRegex.GetLongJson(ref rst, "after_sales_id");
pddBuyerAfterSale.afterSalesId = afterSalesId.ToString();
pddBuyerAfterSale.statusText = "待用户发货";
if (afterSalesStatus == 0)
BuyerLoginInfo buyer = null;
if (tmpOrderItem.ItemOrder?.OrderBuyType == "云仓")
Dispatcher.Invoke(new Action(() => { buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_nick == tmpOrderItem.ItemTransitOrderWithVoid.buyer_account); }));
else if (tmpOrderItem.ItemOrder?.OrderBuyType == "直发" || tmpOrderItem.ItemOrder?.OrderBuyType == "云改直")
Dispatcher.Invoke(new Action(() => { buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_nick == tmpOrderItem.ItemOrder?.out_account); }));
if (buyer == null)
{
var msg = BaseRegex.GetStringJsonByRegs(ref rst, rst, "msg", "err_msg", "error_msg", "errorMsg", "errMsg");
BaseMsgWindow.ShowAnimateMessage(msg, "Error", 5);
Thread.Sleep(5000);
if (msg == "已超过可申请售后的时间")
BaseMsgWindow.ShowAnimateMessage("买手单:" + pddOrderSn + " 买手不在当前账户下,跳过", "Error", 3);
continue;
}
// 检测一下买手号
if (buyer.status == "在线")
{
PddMobileLoginViewModel.CheckBuyerLogin(buyer);
}
if (buyer.status != "在线")
{
BaseMsgWindow.ShowAnimateMessage("买手单:" + pddOrderSn + " 买手号掉线,跳过", "Error", 3);
continue;
}
await Task.Run(() => { MainWindow.Instance.orderListCtrl.GetOrder(tmpOrderItem.order_id); });
oms_wei_order_info order = null;
Dispatcher.Invoke(new Action(() => { order = GlobalConfig.lstOrder.FirstOrDefault(oi => oi.order_id == tmpOrderItem.order_id); }));
if (order == null)
continue;
oms_wei_order_item_info orderItem = null;
Dispatcher.Invoke(new Action(() => { orderItem = order.orderItems.FirstOrDefault(oi => oi.order_id == tmpOrderItem.order_id && oi.sku_id == tmpOrderItem.sku_id); }));
if (orderItem == null)
continue;
string refundStatusStr = "";
string outOrderNo = "";
string AfterSaleAddressStr = "";
if (order.OrderBuyType == "云仓")
{
outOrderNo = (orderItem.ItemTransitOrderWithVoid?.out_order_no).ParseToString();
refundStatusStr = (orderItem?.TransitRefundStatusStr).ParseToString();
AfterSaleAddressStr = orderItem.PddBuyerAfterSaleAddressStr;
}
else if (order.OrderBuyType == "直发" || order.OrderBuyType == "云改直")
{
outOrderNo = (order.out_order_no).ParseToString();
refundStatusStr = (order.out_after_sale_status).ParseToString();
AfterSaleAddressStr = orderItem.DirectPddBuyerAfterSaleAddressStr;
}
if (string.IsNullOrEmpty(outOrderNo) || !(AfterSaleAddressStr.IsNullOrEmpty() || GetNeedBuyerNewAfterSale(refundStatusStr)) || !GetNeedBuyerAfterSale(refundStatusStr))
continue;
PddBuyerOrderLiteInfo pddBuyerOrderLiteInfo = new PddBuyerOrderLiteInfo();
pddBuyerOrderLiteInfo.ShopOrderIdStr = orderItem.order_id;
pddBuyerOrderLiteInfo.order_sn = pddOrderSn;
if (order.OrderBuyType == "云仓")
pddBuyerOrderLiteInfo.order_amount = orderItem.ItemTransitOrderWithVoid?.out_amount;
else if (order.OrderBuyType == "直发" || order.OrderBuyType == "云改直")
pddBuyerOrderLiteInfo.order_amount = order.out_amount;
order_pdd_buyer_after_sale pddBuyerAfterSale = new order_pdd_buyer_after_sale()
{
wx_order_id = orderItem.order_id,
wx_sku_id = orderItem.sku_id,
TransitCreateTime = orderItem.ItemTransitOrderWithVoid?.created_time == null ? DateTime.MinValue : orderItem.ItemTransitOrderWithVoid.created_time,
pre_allocated_order_no = orderItem.ItemTransitOrderWithVoid?.pre_allocated_order_no,
buyerId = buyer.buyer_id,
buyerName = buyer.buyer_name,
orderSn = pddOrderSn,
orderAmount = pddBuyerOrderLiteInfo.order_amount,
refundAmount = pddBuyerOrderLiteInfo.order_amount,
orderDate = pddOrderSn.ParseToString().Split('-').FirstOrDefault().ParseToInt(),
};
// 根据云仓还是直发判断是哪个买手单
if (tmpOrderItem.ItemOrder?.OrderBuyType == "云仓" && orderItem.PddBuyerAfterSale != null)
pddBuyerAfterSale = orderItem.PddBuyerAfterSale;
if (tmpOrderItem.ItemOrder?.OrderBuyType != "云仓" && orderItem.DirectPddBuyerAfterSale != null)
pddBuyerAfterSale = orderItem.DirectPddBuyerAfterSale;
bool isSimPddAfterSaleSuccess = true;
if (GetNeedBuyerNewAfterSale(refundStatusStr))
{
isSimPddAfterSaleSuccess = false;
// pddBuyerAfterSale作为参数传入,获取退货退款金额
var rst = PDDBuyerOrderReadCtrl.SimPddAfterSaleWithReturnGoods(buyer, pddBuyerOrderLiteInfo, pddBuyerAfterSale);
var afterSalesStatus = BaseRegex.GetIntJson(ref rst, "after_sales_status");
var afterSalesId = BaseRegex.GetLongJson(ref rst, "after_sales_id");
pddBuyerAfterSale.afterSalesId = afterSalesId.ToString();
pddBuyerAfterSale.statusText = "待用户发货";
if (afterSalesStatus == 0)
{
var msg = BaseRegex.GetStringJsonByRegs(ref rst, rst, "msg", "err_msg", "error_msg", "errorMsg", "errMsg");
BaseMsgWindow.ShowAnimateMessage(msg, "Error", 5);
Thread.Sleep(5000);
if (msg == "已超过可申请售后的时间")
{
if (order.OrderBuyType == "云仓")
{
var e57Rst = PDDBuyerOrderReadCtrl.SendTransitAfterSaleE57(pddBuyerOrderLiteInfo, "已超过可申请售后的时间");
if (e57Rst.Contains("<code>0</code>") || e57Rst.Contains("<code>200</code>"))
{
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新成功", "Msg", 3);
Thread.Sleep(Randomx.GetId(10000, 12001));
}
else
{
msg = BaseRegex.GetStringXml(ref e57Rst, "msg");
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新失败,服务端返回 " + msg, "Error", 3);
}
}
else if (order.OrderBuyType == "直发" || order.OrderBuyType == "云改直")
{
var e57Rst = PDDBuyerOrderReadCtrl.SendAfterSaleE57NeedManual(pddBuyerOrderLiteInfo, "已超过可申请售后的时间");
if (e57Rst.Contains("<code>0</code>") || e57Rst.Contains("<code>200</code>"))
{
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新成功", "Msg", 3);
Thread.Sleep(Randomx.GetId(10000, 12001));
}
else
{
msg = BaseRegex.GetStringXml(ref e57Rst, "msg");
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新失败,服务端返回 " + msg, "Error", 3);
}
}
}
}
else
{
if (order.OrderBuyType == "云仓")
{
var e57Rst = PDDBuyerOrderReadCtrl.SendTransitAfterSaleE57(pddBuyerOrderLiteInfo, "已超过可申请售后的时间");
var e57Rst = PDDBuyerOrderReadCtrl.SendTransitAfterSaleE57(pddBuyerOrderLiteInfo, "待用户发货");
if (e57Rst.Contains("<code>0</code>") || e57Rst.Contains("<code>200</code>"))
{
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新成功", "Msg", 3);
Thread.Sleep(Randomx.GetId(10000, 12001));
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新成功" + orderItem.order_id, "Msg", 3);
isSimPddAfterSaleSuccess = true;
await Task.Run(() => { Thread.Sleep(Randomx.GetId(10000, 12001)); });
}
else
{
msg = BaseRegex.GetStringXml(ref e57Rst, "msg");
var msg = BaseRegex.GetStringXml(ref e57Rst, "msg");
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新失败,服务端返回 " + msg, "Error", 3);
}
}
else if (order.OrderBuyType == "直发" || order.OrderBuyType == "云改直")
{
var e57Rst = PDDBuyerOrderReadCtrl.SendAfterSaleE57NeedManual(pddBuyerOrderLiteInfo, "已超过可申请售后的时间");
var e57Rst = PDDBuyerOrderReadCtrl.SendAfterSaleE57NeedManual(pddBuyerOrderLiteInfo, "待用户发货");
if (e57Rst.Contains("<code>0</code>") || e57Rst.Contains("<code>200</code>"))
{
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新成功", "Msg", 3);
Thread.Sleep(Randomx.GetId(10000, 12001));
isSimPddAfterSaleSuccess = true;
await Task.Run(() => { Thread.Sleep(Randomx.GetId(10000, 12001)); });
}
else
{
msg = BaseRegex.GetStringXml(ref e57Rst, "msg");
var msg = BaseRegex.GetStringXml(ref e57Rst, "msg");
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新失败,服务端返回 " + msg, "Error", 3);
}
}
}
}
else
// 更新Pdd总店退货地址
if (isSimPddAfterSaleSuccess)
{
if (order.OrderBuyType == "云仓")
var addressRst = YkdBuyerOrder.GetAfterSaleAddress(buyer, pddOrderSn, pddBuyerAfterSale.afterSalesId.ParseToString());
var merchantReceiverInfo = BaseRegex.GetOneJsonObjStrJson(ref addressRst, "merchantReceiverInfo");
string address = "";
if (merchantReceiverInfo != null)
{
var e57Rst = PDDBuyerOrderReadCtrl.SendTransitAfterSaleE57(pddBuyerOrderLiteInfo, "待用户发货");
if (e57Rst.Contains("<code>0</code>") || e57Rst.Contains("<code>200</code>"))
{
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新成功" + orderItem.order_id, "Msg", 3);
isSimPddAfterSaleSuccess = true;
await Task.Run(() => { Thread.Sleep(Randomx.GetId(10000, 12001)); });
}
else
{
var msg = BaseRegex.GetStringXml(ref e57Rst, "msg");
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新失败,服务端返回 " + msg, "Error", 3);
}
address = BaseRegex.GetStringJson(ref merchantReceiverInfo, "copyValue");
}
else if (order.OrderBuyType == "直发" || order.OrderBuyType == "云改直")
if (addressRst.Contains("网络异常,请稍后重试"))
{
var e57Rst = PDDBuyerOrderReadCtrl.SendAfterSaleE57NeedManual(pddBuyerOrderLiteInfo, "待用户发货");
if (e57Rst.Contains("<code>0</code>") || e57Rst.Contains("<code>200</code>"))
{
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新成功", "Msg", 3);
isSimPddAfterSaleSuccess = true;
await Task.Run(() => { Thread.Sleep(Randomx.GetId(10000, 12001)); });
}
else
{
var msg = BaseRegex.GetStringXml(ref e57Rst, "msg");
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新失败,服务端返回 " + msg, "Error", 3);
}
BaseMsgWindow.ShowAnimateMessage("买手 " + buyer.buyer_nick + " 网络异常,请手动获取总店退货地址并填写", "Msg", 5);
}
}
}
// 更新Pdd总店退货地址
if (isSimPddAfterSaleSuccess)
{
var addressRst = YkdBuyerOrder.GetAfterSaleAddress(buyer, pddOrderSn, pddBuyerAfterSale.afterSalesId.ParseToString());
var merchantReceiverInfo = BaseRegex.GetOneJsonObjStrJson(ref addressRst, "merchantReceiverInfo");
string address = "";
if (merchantReceiverInfo != null)
{
address = BaseRegex.GetStringJson(ref merchantReceiverInfo, "copyValue");
}
if (addressRst.Contains("网络异常,请稍后重试"))
{
BaseMsgWindow.ShowAnimateMessage("买手 " + buyer.buyer_nick + " 网络异常,请手动获取总店退货地址并填写", "Msg", 5);
}
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;
if (pddBuyerAfterSale.TransitCreateTime != DateTime.MinValue)
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;
if (!string.IsNullOrEmpty(address))
data3 += "&afterSaleAddress=" + address;
if (order.OrderBuyType == "直发" || order.OrderBuyType == "云改直") // 云仓 0 直发 1
data3 += "&wx_send_type=1";
//data3 += "&is_mdy=true";
var html3 = await GetHtml.PostUtf8Async(url3, data3);
if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
html3 = await GetHtml.PostUtf8Async(url3, data3);
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;
if (pddBuyerAfterSale.TransitCreateTime != DateTime.MinValue)
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;
if (!string.IsNullOrEmpty(address))
data3 += "&afterSaleAddress=" + address;
if (order.OrderBuyType == "直发" || order.OrderBuyType == "云改直") // 云仓 0 直发 1
data3 += "&wx_send_type=1";
//data3 += "&is_mdy=true";
var html3 = await GetHtml.PostUtf8Async(url3, data3);
if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
html3 = await GetHtml.PostUtf8Async(url3, data3);
}
MainWindow.Instance.orderListCtrl.GetOrder(tmpOrderItem.order_id);
Dispatcher.Invoke(new Action(() => { BottomMsg = "正在处理买手退货,总计:" + tmpOrderItems.Count + ",已处理:" + index; }));
#endregion
}
MainWindow.Instance.orderListCtrl.GetOrder(tmpOrderItem.order_id);
Dispatcher.Invoke(new Action(() => { BottomMsg = "正在处理买手退货,总计:" + tmpOrderItems.Count + ",已处理:" + index; }));
}
Dispatcher.Invoke(new Action(() => { BottomMsg = "买手退货处理完成,总计:" + tmpOrderItems.Count + ",已处理:" + index; }));
@@ -2993,6 +3062,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
break;
}
IsAutoBuy = false;
BaseMsgWindow.ShowInfo("自动拍单结束!");
}
private void btnAutoBuyIntroduction_Click(object sender, RoutedEventArgs e)
@@ -526,6 +526,12 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
public static void TbBuyOrder(oms_wei_order_item_info orderItem, bool isAbnormalOrder, bool isAutoBuy)
{
if (GlobalConfig.CurrentTaobaoBuyer == null)
{
BaseMsgWindow.ShowError("未选择买手!");
return;
}
TaobaoBuyOrderCtrl taobaoBuyView = new TaobaoBuyOrderCtrl(GlobalConfig.CurrentTaobaoBuyer, orderItem);
//https://item.taobao.com/item.htm?id=756295486950&skuId=5216824841295
if (orderItem.TbBuyMap != null)
@@ -1230,6 +1236,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
{
orderItem.ItemTransitOrders = OrderListCtrl.GetTransitWarehouseList(orderItem.order_id);
orderItem.PddBuyerOrders = OrderListCtrl.GetPddBuyerOrders(orderItem.order_id).Where(o => o.wx_send_type == 0).ToList();
orderItem.PddBuyerOrders.AddRange(OrderListCtrl.GetTbBuyerOrders(orderItem.order_id).Where(o => o.wx_send_type == 0).ToList());
OrderListCtrl.InitOrderItemObservableProp(orderItem);
//if (orderItem.ItemTransitOrder?.warehouse_status == 3)
@@ -2054,6 +2061,13 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
{
//var orderSn = btnSendSync.Tag.ParseToString();
var directOrder = orderItem.DirectPddBuyerOrder;
if (directOrder.order_sn.StartsWith("tb_"))
{
BaseMsgWindow.ShowInfo("淘宝买手单暂不支持同步单");
return;
}
PddBuyerOrderLiteInfo orderLiteInfo = new PddBuyerOrderLiteInfo()
{
ShopOrderIdStr = orderItem.order_id,
@@ -2062,6 +2076,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
outExpressCompanyMsg = directOrder.outExpressCompanyCode,
tracking_number = directOrder.tracking_number,
};
// 同步单发货
MainWindow.Instance.pddBuyerOrderReadCtrl.SendAsyncWaybillOrder(orderLiteInfo, true);
}
}
+3 -2
View File
@@ -86,8 +86,9 @@ namespace _29WxOrderWpf
//shopListCtrl.Visibility = Visibility.Visible;
orderListCtrl.Visibility = Visibility.Visible;
pddBuyerOrderReadCtrl.Visibility = Visibility.Visible;
pddBuyerSelectCtrl.Visibility = Visibility.Visible;
pddBuyerOrderReadCtrl.Visibility = Visibility.Visible;
tbBuyerOrderReadCtrl.Visibility = Visibility.Visible;
pddBuyerSelectCtrl.Visibility = Visibility.Visible;
Task.Run(() =>
{
GetServerShop();
@@ -227,11 +227,12 @@ namespace _29WxOrderWpf.ViewModels
//cef 138 如果没有设置RequestContext 可能为空,直接getCookieManager
//await WPFCEFBrowser.SetCookieAsync(JsonHelper.SerializeObject(cookieLst), CefWebBrowser.GetCookieManager(null));
foreach (var cook in cookieLst)
{
await WPFCEFBrowser.SetCookieAsync(cook.Domain.Trim('.'), cook.Name + "=" + cook.Value + ";", CefWebBrowser.GetCookieManager(null));
//t.Wait(5000);
}
if (OpenType != EnumOpenType.login)
foreach (var cook in cookieLst)
{
await WPFCEFBrowser.SetCookieAsync(cook.Domain.Trim('.'), cook.Name + "=" + cook.Value + ";", CefWebBrowser.GetCookieManager(null));
//t.Wait(5000);
}
//根据登录的具体店铺设置local storage
if (!string.IsNullOrEmpty(buyer?.buyer_id))
@@ -134,8 +134,8 @@ namespace _29WxOrderWpf.Windows.OrderWindows
{
if (OrderItem?.ItemOrder?.OrderBuyType == "云仓" && (OrderItem?.ItemTransitOrder?.warehouse_status).ParseToInt() < 1)
{
BaseMsgWindow.ShowError("当前订单仓库状态不支持创建退货订单!");
return;
//BaseMsgWindow.ShowError("当前订单仓库状态不支持创建退货订单!");
//return;
}
if (txtWaybillId.Text.Trim().IsNullOrEmpty() || PddBuyerOrderLiteInfo.GetPddToTransitWarehouseExpressCompanyCode(cmbExpressName.SelectedItem.ParseToString()).IsNullOrEmpty())
{
+1 -1
View File
@@ -37,7 +37,7 @@ namespace AllBase
/// 版本ID
/// </summary>
public static int VersionCount = 316;
public static int VersionCount = 321;
public static string ServerUrl { get; set; } = "http://1.13.195.131:9000";
public static string DebugUrl { get; set; } = "http://localhost:9000";
@@ -50,7 +50,8 @@ XDYWHC ;武汉2仓 ;杨先生 ;13044121071 ;湖北省武汉市江汉区
XDYSHANDC ;山东2仓 ;鸿鹄小申 ;13044121239 ;山东省临沂市费县南外环东转盘往东200米顺通快递有限公司(仓库二楼) ;22 ;292 ;2415 ;山东省 ;临沂市 ;费县 ;费城街道 ;南外环东转盘往东200米顺通快递有限公司(仓库二楼)
XDYSHC ;上海新仓 ;纪先生 ;13044121150 ;上海市上海市普陀区真如镇街道真北路2653弄T区 ;25 ;321 ;2709 ;上海市 ;上海市 ;普陀区 ;真如镇街道 ;真北路2653弄T区
XDYSZC ;深圳仓 ;峰峰 ;15343351331 ;广东省东莞市凤岗镇浸校塘东良巷逸乐轩E栋5号楼 ;6 ;79 ;732 ;广东省 ;东莞市 ;凤岗镇 ;凤岗街道 ;浸校塘东良巷逸乐轩E栋5号楼
XDYYWC ;义乌仓 ;小田 ;19058117371 ;浙江省金华市义乌市北苑街道西站大道妈妈商贸18号库39号楼誉达 ;31 ;386 ;3409 ;浙江省 ;金华市 ;义乌市 ;北苑街道 ;西站大道妈妈商贸18号库39号楼誉达";
XDYYWC ;义乌仓 ;小田 ;19058117371 ;浙江省义乌市后宅街道金城高尔夫二期别墅区401栋 ;31 ;386 ;3409 ;浙江省 ;金华市 ;义乌市 ;后宅街道 ;金城高尔夫二期别墅区401栋";
//XDYYWC ;义乌仓 ;小田 ;19058117371 ;浙江省金华市义乌市北苑街道西站大道妈妈商贸18号库39号楼誉达 ;31 ;386 ;3409 ;浙江省 ;金华市 ;义乌市 ;北苑街道 ;西站大道妈妈商贸18号库39号楼誉达
//XDYJJC ;晋江仓 ;安群 ;19905951984 ;福建省泉州市南安市霞美镇温山村431号鸿鹄大厦 ;4 ;58 ;569 ;福建省 ;泉州市
//XDYCDC ;成都仓 ;谢春虹 ;15828201479 ;四川省资阳市乐至县仙鹤大道桑都街15-19号仓库(不要放驿站,送到仓库) ;26 ;340 ;2898 ;四川省 ;资阳市
//XDYCHONGQC ;重庆2仓 ;翁桂柱 ;18923911055 ;重庆市九龙坡区中梁山街道云飞九龙香山(二纵线东50米)重庆九龙坡区渝州公司 ;32 ;394 ;3339
+1 -1
View File
@@ -756,7 +756,7 @@ namespace AllBase.Model.DBModel
else
IsShowChangeWaybillBtn = true;
if (IsWaitBuy)
if (IsWaitBuy || this.orderItems.All(oi => oi.ItemTransitOrderWithVoid == null))
IsShowTransitExtraPackagesBtn = false;
else
IsShowTransitExtraPackagesBtn = true;
@@ -31,7 +31,9 @@ namespace AllBase.Model.DBModel
public long? refundAmount { get; set; }
public long? orderDate { get; set; }
public string statusText { get; set; }
public string afterSaleAddress { get; set; }
string _afterSaleAddress;
public string afterSaleAddress { get { return _afterSaleAddress.Replace("鹅歌(全程视频验货,请原封退回,以免售后失败)", "鹅歌"); } set {_afterSaleAddress = value; } }
public string order_detail { get; set; }
public DateTime add_time { get; set; }
public DateTime mdy_time { get; set; }
@@ -257,16 +257,19 @@ namespace AllBase.Model.Result
public string buyerId { get; set; } // 买手Id
public string buyerName { get; set; } // 买手名称
public string tbOrderSn { get; set; } // 淘宝的买手单号
public string orderSn
{
get
{
if (!string.IsNullOrEmpty(tbOrderSn))
return tbOrderSn;
var detailPage = listItemExtraVO.navToDetailPageUrl;
return BaseRegex.GetStringQuery(ref detailPage, "order_sn");
}
set { }
}
public int? orderDate { get { return orderSn.Split('-').FirstOrDefault().ParseToInt(); } set { } }
public int? tbOrderDate { get; set; }
public int? orderDate { get { return tbOrderDate ?? orderSn.Split('-').FirstOrDefault().ParseToInt(); } }
public long? afterSalesId { get; set; } // 20129688312436,
@@ -284,12 +287,12 @@ namespace AllBase.Model.Result
public class ListItemAmountVO
{
public string orderAmountTitle { get; set; } // "实付:",
public string orderAmountTitle { get; set; } = "实付:"; // "实付:",
public int? orderAmount { get; set; } // 1580,
public object payLaterAmountTitle { get; set; } // null,
public object payLaterAmount { get; set; } // null,
public string refundAmountTitle { get; set; } // "退款金额:",
public int? refundAmount { get; set; } // 1580,
public string refundAmountTitle { get; set; } = "退款金额:"; // "退款金额:",
public int? refundAmount { get; set; } // 1580,
public object refundAmountText { get; set; } // null,
public bool? useCoupon { get; set; } // false
+11 -7
View File
@@ -393,13 +393,16 @@ namespace AllBase.Model.Result
set { this.SetValue(x => x.OutAfterSaleStatusStr, value); }
}
/// <summary>
/// 物流公司名称,可以尝试直接从列表中匹配
/// </summary>
[JsonIgnore]
// 淘宝的物流公司名称,单独写
public string tbOutExpressCompanyMsg { get; set; } = null;
/// <summary>
/// 物流公司名称,可以尝试直接从列表中匹配
/// </summary>
[JsonIgnore]
public string outExpressCompanyMsg
{
get { return extra_info?.order_hint?.message; }
get { return tbOutExpressCompanyMsg ?? extra_info?.order_hint?.message; }
set { }
}
/// <summary>
@@ -448,8 +451,9 @@ namespace AllBase.Model.Result
if (outExpressCompanyMsg.Contains("极兔快递")) return "极兔速递";
if (outExpressCompanyMsg.Contains("申通快递")) return "申通快递";
if (outExpressCompanyMsg.Contains("韵达快递")) return "韵达快递";
if (outExpressCompanyMsg.Contains("圆通快递")) return "圆通快递";
if (outExpressCompanyMsg.Contains("中通快递")) return "中通快递";
if (outExpressCompanyMsg.Contains("圆通快递")) return "圆通快递";
if (outExpressCompanyMsg.Contains("圆通速递")) return "圆通快递";
if (outExpressCompanyMsg.Contains("中通快递")) return "中通快递";
if (outExpressCompanyMsg.Contains("百世快运")) return "百世快运";
if (outExpressCompanyMsg.Contains("百世快递")) return "百世快递";
if (outExpressCompanyMsg.Contains("顺丰速运")) return "顺丰速运";
+113 -13
View File
@@ -25,7 +25,9 @@ using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Runtime.InteropServices.ComTypes;
@@ -34,6 +36,7 @@ using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
//using System.Web.Hosting;
using System.Windows.Forms;
using Work;
@@ -158,6 +161,7 @@ namespace TemuKJD.ToolForms
if (this.Created)
Invoke(new Action(() =>
{
this.pnlMask.Dock = DockStyle.Fill;
this.pnlMask.Visible = true;
this.pnlMask.Text = "自动拍单倒计时\r\n" + i;
}));
@@ -548,7 +552,7 @@ namespace TemuKJD.ToolForms
var limitProfit = GlobalConfig.AutoBuyConfig.MinProfit * 0.01m;
if (profit < limitProfit)
{
throw new Exception("拍单利润" + profit + "小于设定的数值 " + limitProfit + ",跳过当前订单");
throw new Exception("拍单利润 " + profit + " 小于设定的数值 " + limitProfit + ",跳过当前订单");
}
}
@@ -637,6 +641,9 @@ namespace TemuKJD.ToolForms
}
}
/// <summary>
/// 自动拍单循环
/// </summary>
public void AotoBuyLoop()
{
Task.Run(async () =>
@@ -689,7 +696,7 @@ namespace TemuKJD.ToolForms
Thread.Sleep(Randomx.GetId(500, 1000));
if (!IsAutoBuy) return;
var ts2 = await EvaluateJsBuyTagNameAndInnerHtml("span", "立即支付", true);
for (int i = 0; i < 5; i++)
for (int i = 0; i < 20; i++)
{
if (ts2.Result?.Value is string rstStr && rstStr == "success")
break;
@@ -705,11 +712,11 @@ namespace TemuKJD.ToolForms
Thread.Sleep(Randomx.GetId(500, 1000));
if (!IsAutoBuy) return;
ts2 = await EvaluateJsBuyTagNameAndInnerHtml("span", "确认付款", true);
for (int i = 0; i < 50; i++)
for (int i = 0; i < 25; i++)
{
if (ts2.Result?.Value is string rstStr && rstStr == "success")
break;
Thread.Sleep(100);
Thread.Sleep(500);
ts2 = await EvaluateJsBuyTagNameAndInnerHtml("span", "确认付款", true);
}
@@ -717,12 +724,12 @@ namespace TemuKJD.ToolForms
Thread.Sleep(Randomx.GetId(500, 1000));
if (!IsAutoBuy) return;
ts2 = await EvaluateJsBuyTagNameAndInnerHtml("div", "输入支付密码");
for (int i = 0; i < 50; i++)
for (int i = 0; i < 20; i++)
{
if (ts2.Result?.Value is string rstStr && rstStr == "success")
break;
Thread.Sleep(100);
Thread.Sleep(500);
ts2 = await EvaluateJsBuyTagNameAndInnerHtml("div", "输入支付密码");
}
Thread.Sleep(Randomx.GetId(500, 1000));
@@ -735,12 +742,12 @@ namespace TemuKJD.ToolForms
Thread.Sleep(Randomx.GetId(500, 1000));
if (!IsAutoBuy) return;
ts2 = await EvaluateJsBuyTagNameAndInnerHtml("button", "下一步", true);
for (int i = 0; i < 50; i++)
for (int i = 0; i < 20; i++)
{
if (ts2.Result?.Value is string rstStr && rstStr == "success")
break;
Thread.Sleep(200);
Thread.Sleep(500);
if (!IsAutoBuy) return;
ts2 = await EvaluateJsBuyTagNameAndInnerHtml("button", "下一步", true);
}
@@ -837,10 +844,9 @@ namespace TemuKJD.ToolForms
/// <returns></returns>
public async Task<string> ChangeAddress(TransitWarehouseParam transit)
{
Thread.Sleep(200);
for (int i = 0; i < 50; i++)
{
Thread.Sleep(100);
{
Thread.Sleep(200);
if (host == null || client == null)
{
host = cefWebBrowser.GetBrowser().GetHost();
@@ -1010,8 +1016,22 @@ namespace TemuKJD.ToolForms
Thread.Sleep(500);
if (!this.Disposing && !this.IsDisposed)
{
//MainForm.instance.Invoke(new Action(() => { this.Dispose(); }));
}
//MainForm.instance.Invoke(new Action(() => { this.Dispose(); }));
// 1. 解除 JS 绑定
cefWebBrowser?.JavascriptObjectRepository?.UnRegisterAll();
cefWebBrowser?.CloseDevTools();
// 2. 优雅关闭浏览器
cefWebBrowser?.GetBrowser()?.CloseBrowser(false);
// 3. 清理残留子进程(按路径判断,避免误杀)
//CleanupBrowserSubprocesses();
// 4. 释放控件
cefWebBrowser?.Dispose();
cefWebBrowser = null;
}
});
}
@@ -1791,5 +1811,85 @@ namespace TemuKJD.ToolForms
{
txtBuyTransitWarehouseStr = txtBuyTransitWarehouse.Text.Trim();
}
private void lblErrMsg_TextChanged(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(lblErrMsg.Text))
pnlMsg.Visible = false;
else
pnlMsg.Visible = true;
}
private void pictureBox4_Click(object sender, EventArgs e)
{
this.pnlMsg.Visible = false;
}
/// <summary>
/// 清理本应用创建的CefSharp.BrowserSubprocess子进程
/// </summary>
private void CleanupBrowserSubprocesses()
{
try
{
string appBasePath = AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\', '/');
Process[] subprocesses = Process.GetProcessesByName("CefSharp.BrowserSubprocess");
foreach (Process process in subprocesses)
{
bool shouldKill = false;
try
{
// 安全地获取进程模块信息,进程可能在我们检查时已退出
if (process != null && !process.HasExited)
{
string moduleFileName = process.MainModule?.FileName;
if (!string.IsNullOrEmpty(moduleFileName))
{
// 判断进程是否从当前应用目录启动
string processDir = Path.GetDirectoryName(moduleFileName);
if (!string.IsNullOrEmpty(processDir) &&
(processDir.Equals(appBasePath, StringComparison.OrdinalIgnoreCase)
|| appBasePath.Contains(processDir) // 处理子目录情况
|| moduleFileName.Contains(appBasePath)))
{
shouldKill = true;
}
}
}
}
catch (InvalidOperationException)
{
// 进程可能在检查过程中已退出,忽略
continue;
}
catch (Win32Exception ex) when (ex.NativeErrorCode == 5) // 访问被拒绝
{
// 可能是权限问题或其他应用的进程,跳过
continue;
}
if (shouldKill)
{
try
{
process.Kill();
process.WaitForExit(500); // 等待最多500毫秒,确保进程终止
}
catch (Exception killEx)
{
// 记录日志,但通常进程已死
//System.Diagnostics.Debug.WriteLine($"终止进程时出错: {killEx.Message}");
}
}
}
}
catch (Exception ex)
{
// 这里最好不要用MessageBox,尤其是在关闭流程中,可能引发线程问题
// 建议记录到日志文件
//System.Diagnostics.Debug.WriteLine($"清理子进程时发生异常: {ex}");
}
}
}
}
+57 -23
View File
@@ -30,8 +30,10 @@
{
this.components = new System.ComponentModel.Container();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.pnlMask = new DevComponents.DotNetBar.PanelEx();
this.pnlMsg = new System.Windows.Forms.Panel();
this.pictureBox4 = new System.Windows.Forms.PictureBox();
this.lblErrMsg = new System.Windows.Forms.Label();
this.pnlMask = new DevComponents.DotNetBar.PanelEx();
this.btnJumpOrderList = new DevComponents.DotNetBar.PanelEx();
this.txtBuySkuName = new System.Windows.Forms.TextBox();
this.label21 = new System.Windows.Forms.Label();
@@ -116,6 +118,8 @@
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.pnlMsg.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
this.splitContainer2.Panel1.SuspendLayout();
this.splitContainer2.Panel2.SuspendLayout();
@@ -133,7 +137,6 @@
//
this.pbCloseBase.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.pbCloseBase.Location = new System.Drawing.Point(1326, 0);
this.pbCloseBase.Size = new System.Drawing.Size(32, 17);
//
// splitContainer1
//
@@ -149,30 +152,69 @@
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.pnlMsg);
this.splitContainer1.Panel1.Controls.Add(this.pnlMask);
this.splitContainer1.Panel1MinSize = 0;
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.BackColor = System.Drawing.Color.White;
this.splitContainer1.Panel2.Controls.Add(this.lblErrMsg);
this.splitContainer1.Panel2.Controls.Add(this.btnJumpOrderList);
this.splitContainer1.Panel2MinSize = 0;
this.splitContainer1.Size = new System.Drawing.Size(864, 903);
this.splitContainer1.SplitterDistance = 875;
this.splitContainer1.Size = new System.Drawing.Size(864, 888);
this.splitContainer1.SplitterDistance = 860;
this.splitContainer1.SplitterWidth = 3;
this.splitContainer1.TabIndex = 4;
//
// pnlMsg
//
this.pnlMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.pnlMsg.Controls.Add(this.pictureBox4);
this.pnlMsg.Controls.Add(this.lblErrMsg);
this.pnlMsg.Location = new System.Drawing.Point(47, 537);
this.pnlMsg.Name = "pnlMsg";
this.pnlMsg.Size = new System.Drawing.Size(771, 100);
this.pnlMsg.TabIndex = 898;
this.pnlMsg.Visible = false;
//
// pictureBox4
//
this.pictureBox4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.pictureBox4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(152)))), ((int)(((byte)(99)))), ((int)(((byte)(143)))));
this.pictureBox4.Image = global::Work.Properties.Resources.close;
this.pictureBox4.Location = new System.Drawing.Point(736, 3);
this.pictureBox4.Name = "pictureBox4";
this.pictureBox4.Size = new System.Drawing.Size(32, 32);
this.pictureBox4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pictureBox4.TabIndex = 897;
this.pictureBox4.TabStop = false;
this.pictureBox4.Click += new System.EventHandler(this.pictureBox4_Click);
//
// lblErrMsg
//
this.lblErrMsg.BackColor = System.Drawing.Color.White;
this.lblErrMsg.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.lblErrMsg.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblErrMsg.Font = new System.Drawing.Font("微软雅黑", 18F, System.Drawing.FontStyle.Bold);
this.lblErrMsg.ForeColor = System.Drawing.Color.Red;
this.lblErrMsg.Location = new System.Drawing.Point(0, 0);
this.lblErrMsg.Name = "lblErrMsg";
this.lblErrMsg.Size = new System.Drawing.Size(771, 100);
this.lblErrMsg.TabIndex = 893;
this.lblErrMsg.Text = "errMsg ";
this.lblErrMsg.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lblErrMsg.TextChanged += new System.EventHandler(this.lblErrMsg_TextChanged);
//
// pnlMask
//
this.pnlMask.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
this.pnlMask.Cursor = System.Windows.Forms.Cursors.Hand;
this.pnlMask.DisabledBackColor = System.Drawing.Color.Empty;
this.pnlMask.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlMask.Dock = System.Windows.Forms.DockStyle.Top;
this.pnlMask.Font = new System.Drawing.Font("微软雅黑", 50F);
this.pnlMask.Location = new System.Drawing.Point(0, 0);
this.pnlMask.Name = "pnlMask";
this.pnlMask.Size = new System.Drawing.Size(864, 875);
this.pnlMask.Size = new System.Drawing.Size(864, 426);
this.pnlMask.Style.Alignment = System.Drawing.StringAlignment.Center;
this.pnlMask.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(245)))), ((int)(((byte)(235)))), ((int)(((byte)(255)))));
this.pnlMask.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(245)))), ((int)(((byte)(235)))), ((int)(((byte)(255)))));
@@ -188,17 +230,6 @@
this.pnlMask.Text = "自动拍单倒计时\r\n8";
this.pnlMask.Visible = false;
//
// lblErrMsg
//
this.lblErrMsg.AutoSize = true;
this.lblErrMsg.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblErrMsg.ForeColor = System.Drawing.Color.Red;
this.lblErrMsg.Location = new System.Drawing.Point(166, 5);
this.lblErrMsg.Name = "lblErrMsg";
this.lblErrMsg.Size = new System.Drawing.Size(87, 17);
this.lblErrMsg.TabIndex = 893;
this.lblErrMsg.Text = "errMsg ";
//
// btnJumpOrderList
//
this.btnJumpOrderList.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
@@ -738,7 +769,7 @@
this.splitContainer2.BackColor = System.Drawing.Color.White;
this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer2.Location = new System.Drawing.Point(1, 18);
this.splitContainer2.Location = new System.Drawing.Point(1, 33);
this.splitContainer2.Name = "splitContainer2";
this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
@@ -750,7 +781,7 @@
//
this.splitContainer2.Panel2.Controls.Add(this.panel1);
this.splitContainer2.Panel2.Controls.Add(this.splitContainer1);
this.splitContainer2.Size = new System.Drawing.Size(1358, 941);
this.splitContainer2.Size = new System.Drawing.Size(1358, 926);
this.splitContainer2.SplitterDistance = 26;
this.splitContainer2.TabIndex = 5;
//
@@ -801,7 +832,7 @@
this.panel1.Controls.Add(this.pnlMap);
this.panel1.Location = new System.Drawing.Point(867, 3);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(487, 905);
this.panel1.Size = new System.Drawing.Size(487, 890);
this.panel1.TabIndex = 0;
//
// btnCancelAutoBuy
@@ -1174,7 +1205,7 @@
this.pnlMap.Controls.Add(this.cmbTransitWarehouse);
this.pnlMap.Controls.Add(this.txtMapGoodsId);
this.pnlMap.Controls.Add(this.txtMapSkuName);
this.pnlMap.Location = new System.Drawing.Point(12, 700);
this.pnlMap.Location = new System.Drawing.Point(12, 685);
this.pnlMap.Name = "pnlMap";
this.pnlMap.Size = new System.Drawing.Size(468, 203);
this.pnlMap.TabIndex = 871;
@@ -1196,9 +1227,10 @@
((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit();
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
this.splitContainer1.Panel2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.pnlMsg.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit();
this.splitContainer2.Panel1.ResumeLayout(false);
this.splitContainer2.Panel1.PerformLayout();
this.splitContainer2.Panel2.ResumeLayout(false);
@@ -1304,5 +1336,7 @@
private System.Windows.Forms.PictureBox pictureBox2;
private DevComponents.DotNetBar.PanelEx btnCancelAutoBuy;
private System.Windows.Forms.Label lblErrMsg;
protected System.Windows.Forms.PictureBox pictureBox4;
private System.Windows.Forms.Panel pnlMsg;
}
}