1921 lines
117 KiB
C#
1921 lines
117 KiB
C#
using _29WxOrderWpf.BaseWindows;
|
|
using _29WxOrderWpf.CefHelper;
|
|
using AllBase;
|
|
using AllBase.Helper;
|
|
using AllBase.Model;
|
|
using AllBase.Model.DBModel;
|
|
using AllBase.Model.Result;
|
|
using CefSharp;
|
|
using CefSharp.DevTools.LayerTree;
|
|
using CefSharp.DevTools.Network;
|
|
using CefSharp.Handler;
|
|
using CefSharp.Wpf;
|
|
using NaiBa.Util;
|
|
using NaiBa.Util.Extension;
|
|
using Newtonsoft.Json.Linq;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Security.Cryptography.X509Certificates;
|
|
using System.Security.Policy;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Data;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
using System.Windows.Navigation;
|
|
using System.Windows.Shapes;
|
|
using System.Xml.XPath;
|
|
using TemuKJD.ToolForms;
|
|
using Work;
|
|
using Work._29Tools.BLL;
|
|
using Work._29Tools.CefTools;
|
|
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Tab;
|
|
|
|
namespace _29WxOrderWpf.Ctrls.BuyerCtrls
|
|
{
|
|
/// <summary>
|
|
/// PDDBuyerOrderReadCtrl.xaml 的交互逻辑
|
|
/// </summary>
|
|
public partial class PDDBuyerOrderReadCtrl : UserControl
|
|
{
|
|
ChromiumWebBrowser cefWebBrowser = null;
|
|
public string cefAddress = "";
|
|
public ObservableCollection<PddBuyerOrderLiteInfo> lstPddBuyerOrderInfoLite { get; set; } = new ObservableCollection<PddBuyerOrderLiteInfo>();
|
|
public ObservableCollection<PddBuyerOrderLiteInfo> lstFilterPddBuyerOrderInfoLite { get; set; } = new ObservableCollection<PddBuyerOrderLiteInfo>();
|
|
public ObservableCollection<PddBuyerAfterSaleLiteInfo> lstPddBuyerAfterSaleInfoLite { get; set; } = new ObservableCollection<PddBuyerAfterSaleLiteInfo>();
|
|
public ObservableCollection<PddBuyerAfterSaleLiteInfo> lstFilterPddBuyerAfterSaleInfoLite { get; set; } = new ObservableCollection<PddBuyerAfterSaleLiteInfo>();
|
|
public CancellationTokenSource cancellationTokenSource { get; set; } = new CancellationTokenSource();
|
|
//public ChromiumWebBrowser cefWebBrowser = null;
|
|
public BuyerReadOrderConfig buyerReadOrderConfig = new BuyerReadOrderConfig();
|
|
public DateTime nextGetOrderTime = DateTime.MinValue;
|
|
public DateTime lastCefReadOrderTime = DateTime.Now;
|
|
/// <summary>
|
|
/// 是否正在读买手单
|
|
/// </summary>
|
|
bool isReadBuyerOrder = false;
|
|
/// <summary>
|
|
/// 是否已初始化已读的买手单
|
|
/// </summary>
|
|
bool isInitBuyerOrder = false;
|
|
/// <summary>
|
|
/// 是否已初始化已读的售后单
|
|
/// </summary>
|
|
bool isInitBuyerAfterSale = false;
|
|
/// <summary>
|
|
/// 当前正在读单的买手信息
|
|
/// </summary>
|
|
string currentReadBuyer = "";
|
|
/// <summary>
|
|
/// 过滤查询的订单文本信息;
|
|
/// </summary>
|
|
string filterTxt = "";
|
|
/// <summary>
|
|
/// 是否过滤无微信系统订单号的拼多多买手单
|
|
/// </summary>
|
|
bool isHideNoWxOrderNo = true;
|
|
/// <summary>
|
|
/// 软件是否完成加载
|
|
/// </summary>
|
|
bool isLoad = false;
|
|
int maxZIndex = 1;
|
|
|
|
public PDDBuyerOrderReadCtrl()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
void filterBuyerOrder()
|
|
{
|
|
//string filterTxt = txtFilter?.Text.ParseToString().Trim();
|
|
//lstFilterPddBuyerOrderInfoLite = new ObservableCollection<PddBuyerOrderLiteInfo>(lstPddBuyerOrderInfoLite
|
|
// .Where(o => GlobalConfig.PDDBuyerLoginList.Any(u => u.buyer_name == o.buyerName)));
|
|
|
|
//lstFilterPddBuyerOrderInfoLite = new ObservableCollection<PddBuyerOrderLiteInfo>(lstFilterPddBuyerOrderInfoLite.Where(x =>
|
|
// x.order_time > BaseClass.DateTimeToTimestampSeconds(new DateTime(2026, 6, 25))
|
|
//));
|
|
|
|
//lstFilterPddBuyerOrderInfoLite = new ObservableCollection<PddBuyerOrderLiteInfo>(lstFilterPddBuyerOrderInfoLite.Where(x =>
|
|
// chkHideNoWxIdOrder.IsChecked != true || !x.ShopOrderIdStr.IsNullOrEmpty()
|
|
//));
|
|
|
|
//lstFilterPddBuyerOrderInfoLite = new ObservableCollection<PddBuyerOrderLiteInfo>(lstFilterPddBuyerOrderInfoLite.Where(x =>
|
|
// string.IsNullOrEmpty(filterTxt) || x.order_sn.Contains(filterTxt) || x.ShopOrderIdStr.Contains(filterTxt) || x.tracking_number.Contains(filterTxt)
|
|
//));
|
|
|
|
lstFilterPddBuyerOrderInfoLite = new ObservableCollection<PddBuyerOrderLiteInfo>(lstPddBuyerOrderInfoLite
|
|
.Where(o => filterOneBuyerOrder(o) == true));
|
|
|
|
if (dgBuyerOrder != null)
|
|
this.dgBuyerOrder.ItemsSource = lstFilterPddBuyerOrderInfoLite;
|
|
|
|
|
|
lstFilterPddBuyerAfterSaleInfoLite = new ObservableCollection<PddBuyerAfterSaleLiteInfo>(lstPddBuyerAfterSaleInfoLite
|
|
.Where(o => filterOneBuyerAfterSale(o) == true));
|
|
|
|
if (dgBuyerAfterSale != null)
|
|
this.dgBuyerAfterSale.ItemsSource = lstFilterPddBuyerAfterSaleInfoLite;
|
|
}
|
|
|
|
bool filterOneBuyerOrder(PddBuyerOrderLiteInfo order)
|
|
{
|
|
if (order == null)
|
|
return false;
|
|
|
|
if (!GlobalConfig.PDDBuyerLoginList.Any(u => u.buyer_name == order.buyerName))
|
|
return false;
|
|
if (order.OrderTime < new DateTime(2025, 6, 29))
|
|
return false;
|
|
if (isHideNoWxOrderNo && order.ShopOrderIdStr.IsNullOrEmpty())
|
|
return false;
|
|
if (!string.IsNullOrEmpty(filterTxt) && !order.order_sn.Contains(filterTxt) && !order.ShopOrderIdStr.ParseToString().Contains(filterTxt) &&
|
|
!order.tracking_number.Contains(filterTxt) &&
|
|
!order.sendStatus.ParseToString().Contains(filterTxt))
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
|
|
bool filterOneBuyerAfterSale(PddBuyerAfterSaleLiteInfo afterSale)
|
|
{
|
|
if (afterSale == null)
|
|
return false;
|
|
|
|
if (!GlobalConfig.PDDBuyerLoginList.Any(u => u.buyer_name == afterSale.buyerName))
|
|
return false;
|
|
if (isHideNoWxOrderNo && afterSale.ShopOrderIdStr.IsNullOrEmpty())
|
|
return false;
|
|
if (!string.IsNullOrEmpty(filterTxt) && !afterSale.orderSn.Contains(filterTxt) && !afterSale.ShopOrderIdStr.ParseToString().Contains(filterTxt) &&
|
|
//!afterSale.tracking_number.Contains(filterTxt) &&
|
|
!afterSale.sendStatus.ParseToString().Contains(filterTxt))
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
|
|
private void UserControl_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
buyerReadOrderConfig = NaiBa.Util.Helper.ConfigHelper.LoadConfig<BuyerReadOrderConfig>("pdd_buyer_read_order_config");
|
|
if (buyerReadOrderConfig == null)
|
|
buyerReadOrderConfig = new BuyerReadOrderConfig();
|
|
this.chkAutoReadBuyerOrder.IsChecked = buyerReadOrderConfig.IsAutoReadOrder;
|
|
this.chkAutoAfterSale.IsChecked = buyerReadOrderConfig.IsAutoAfterSale;
|
|
|
|
|
|
lstPddBuyerOrderInfoLite = NaiBa.Util.Helper.ConfigHelper.LoadConfig<ObservableCollection<PddBuyerOrderLiteInfo>>("pdd_buyer_order_list");
|
|
if (lstPddBuyerOrderInfoLite == null)
|
|
lstPddBuyerOrderInfoLite = new ObservableCollection<PddBuyerOrderLiteInfo>();
|
|
foreach (var item in lstPddBuyerOrderInfoLite.ToList())
|
|
{
|
|
if (item.OrderTime < DateTime.Now.AddMonths(-1))
|
|
lstPddBuyerOrderInfoLite.Remove(item);
|
|
}
|
|
|
|
lstPddBuyerAfterSaleInfoLite = NaiBa.Util.Helper.ConfigHelper.LoadConfig<ObservableCollection<PddBuyerAfterSaleLiteInfo>>("pdd_buyer_after_sale_list");
|
|
if (lstPddBuyerAfterSaleInfoLite == null)
|
|
lstPddBuyerAfterSaleInfoLite = new ObservableCollection<PddBuyerAfterSaleLiteInfo>();
|
|
|
|
lstPddBuyerAfterSaleInfoLite = new ObservableCollection<PddBuyerAfterSaleLiteInfo>(lstPddBuyerAfterSaleInfoLite.Where(af => af != null));
|
|
foreach (var item in lstPddBuyerAfterSaleInfoLite.ToList())
|
|
{
|
|
if (item.orderDate < DateTime.Now.AddMonths(-1).ToString("yyMMdd").ParseToInt())
|
|
lstPddBuyerAfterSaleInfoLite.Remove(item);
|
|
}
|
|
|
|
Task.Run(() => {
|
|
|
|
while (dgBuyerOrder == null || !MainWindow.Instance.hasGetPddBuyer)
|
|
{
|
|
Thread.Sleep(100);
|
|
}
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
filterBuyerOrder();
|
|
}));
|
|
|
|
while (!MainWindow.Instance.hasReadShop || !MainWindow.Instance.hasGetPddBuyer || !MainWindow.Instance.orderListCtrl.hasReadOrder)
|
|
{
|
|
Thread.Sleep(100);
|
|
}
|
|
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
InitCef();
|
|
}));
|
|
|
|
while (isInitBuyerOrder || isInitBuyerAfterSale)
|
|
{
|
|
Thread.Sleep(500);
|
|
}
|
|
AutoGetPddOrder();
|
|
});
|
|
|
|
isLoad = true;
|
|
}
|
|
|
|
void AutoGetPddOrder()
|
|
{
|
|
Task.Run(() =>
|
|
{
|
|
Thread.Sleep(5000);
|
|
while (true)
|
|
{
|
|
if (!buyerReadOrderConfig.IsAutoReadOrder)
|
|
{
|
|
Thread.Sleep(1000);
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
btnSearch.Content = "自动刷新暂停中";
|
|
}));
|
|
continue;
|
|
}
|
|
|
|
if (DateTime.Now > nextGetOrderTime)
|
|
{
|
|
GetOrderAndAfterSale();
|
|
}
|
|
if (isReadBuyerOrder)
|
|
{
|
|
nextGetOrderTime = DateTime.Now.AddMinutes(25);
|
|
}
|
|
Thread.Sleep(1000);
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
var ticks = nextGetOrderTime - DateTime.Now;
|
|
btnSearch.Content = "刷新订单 " + ticks.Minutes + ":" + ticks.Seconds;
|
|
}));
|
|
}
|
|
});
|
|
}
|
|
|
|
public void InitCef()
|
|
{
|
|
//CefSharp.Wpf.ChromiumWebBrowser cefWebBrowser = new CefSharp.Wpf.ChromiumWebBrowser();
|
|
//cefWebBrowser.Address = "https://www.baidu.com";
|
|
//cefWebBrowser = WPFCEFBrowser.CreateChromiumWebBrowser("https://www.baidu.com", false);
|
|
//Grid.SetRow(cefWebBrowser, 0);
|
|
//this.GridCef.Children.Add(cefWebBrowser);
|
|
|
|
//LocalResourceRequestHandler resourceRequestHandler = new LocalResourceRequestHandler();
|
|
//resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete;
|
|
//resourceRequestHandler.BeforeResourceLoadEvent += RequestHandler_BeforeResourceLoad;
|
|
//cefWebBrowser.RequestHandler = new LocalRequestHandler(resourceRequestHandler);
|
|
//var lifeSapnHandler = new LocalLifeSpanHandler(PopWindowType.SelfWindow);
|
|
//cefWebBrowser.LifeSpanHandler = lifeSapnHandler;
|
|
//cefWebBrowser.KeyboardHandler = new KeyboardHandler();
|
|
//cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd;
|
|
//cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged;
|
|
//cefWebBrowser.LoadError += CefWebBrowser_LoadError;
|
|
|
|
|
|
foreach (var buyer in GlobalConfig.PDDBuyerLoginList)
|
|
{
|
|
Thread.Sleep(1);
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
buyer.wpf_browser = WPFCEFBrowser.CreateChromiumWebBrowser("about:blank", false);
|
|
LocalResourceRequestHandler resourceRequestHandler = new LocalResourceRequestHandler();
|
|
resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete;
|
|
resourceRequestHandler.BeforeResourceLoadEvent += RequestHandler_BeforeResourceLoad;
|
|
buyer.wpf_browser.RequestHandler = new LocalRequestHandler(resourceRequestHandler);
|
|
var lifeSapnHandler = new LocalLifeSpanHandler(PopWindowType.SelfWindow);
|
|
buyer.wpf_browser.LifeSpanHandler = lifeSapnHandler;
|
|
buyer.wpf_browser.KeyboardHandler = new KeyboardHandler();
|
|
buyer.wpf_browser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd;
|
|
buyer.wpf_browser.AddressChanged += CefWebBrowser_AddressChanged;
|
|
buyer.wpf_browser.LoadError += CefWebBrowser_LoadError;
|
|
Grid.SetRow(buyer.wpf_browser, 0);
|
|
this.GridCef.Children.Add(buyer.wpf_browser);
|
|
}));
|
|
}
|
|
}
|
|
|
|
private void CefWebBrowser_LoadError(object sender, LoadErrorEventArgs e)
|
|
{
|
|
}
|
|
private void CefWebBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
|
|
{
|
|
}
|
|
private void CefWebBrowser_AddressChanged(object sender, DependencyPropertyChangedEventArgs e)
|
|
{
|
|
cefAddress = e.NewValue.ParseToString();
|
|
}
|
|
|
|
|
|
private bool RequestHandler_BeforeResourceLoad(object sender, string url, string postData, IRequest request)
|
|
{
|
|
return false;
|
|
}
|
|
private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData, IRequest request)
|
|
{
|
|
var cookie1 = request.Headers["Cookie"];
|
|
Task.Run(() =>
|
|
{
|
|
var url1 = url;
|
|
var data1 = responseData;
|
|
|
|
//if (data1.Contains("260415-154067299863696") || data1.Contains("待用户退回商品") || data1.Contains("已寄出,待商家处理") || data1.Contains("待商家处理退货申请") || data1.Contains("待用户拒收商品"))
|
|
//{
|
|
|
|
//}
|
|
|
|
// 已发货 第一页
|
|
if (url1.StartsWith("https://mobile.yangkeduo.com/orders.html?type=3")) //https://mobile.yangkeduo.com/orders.html?type=3
|
|
{
|
|
Task.Run(() =>
|
|
{
|
|
if (data1.Contains("display_amount"))
|
|
{
|
|
var jsonData = BaseRegex.GetJsonObjStrJson(ref data1, "ordersStore")?.FirstOrDefault();
|
|
var nickName = BaseRegex.GetStringJson(ref data1, "nickName");
|
|
var uid = BaseRegex.GetStringJson(ref data1, "uid");
|
|
var buyerId = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == uid)?.buyer_id;
|
|
if (buyerId.IsNullOrEmpty())
|
|
buyerId = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_nick == nickName)?.buyer_id;
|
|
if (!string.IsNullOrEmpty(jsonData) && !string.IsNullOrEmpty(buyerId))
|
|
{
|
|
var ordersStr = BaseRegex.GetJsonObjStrJson(ref jsonData, "initOdersList")?.FirstOrDefault();
|
|
if (ordersStr != null && ordersStr.StartsWith("{\"3\":"))
|
|
{
|
|
ordersStr = "{\"orders\":" + ordersStr.Substring(5);
|
|
CefReadBuyerOrder(buyerId, ordersStr);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
// 待发货 第一页
|
|
if (url1.StartsWith("https://mobile.yangkeduo.com/orders.html?type=2"))
|
|
{
|
|
Task.Run(() =>
|
|
{
|
|
if (data1.Contains("display_amount"))
|
|
{
|
|
var jsonData = BaseRegex.GetJsonObjStrJson(ref data1, "ordersStore")?.FirstOrDefault();
|
|
var nickName = BaseRegex.GetStringJson(ref data1, "nickName");
|
|
var uid = BaseRegex.GetStringJson(ref data1, "uid");
|
|
var buyerId = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == uid)?.buyer_id;
|
|
if (buyerId.IsNullOrEmpty())
|
|
buyerId = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_nick == nickName)?.buyer_id;
|
|
if (!string.IsNullOrEmpty(jsonData) && !string.IsNullOrEmpty(buyerId))
|
|
{
|
|
var ordersStr = BaseRegex.GetJsonObjStrJson(ref jsonData, "initOdersList")?.FirstOrDefault();
|
|
if (ordersStr != null && ordersStr.StartsWith("{\"2\":"))
|
|
{
|
|
ordersStr = "{\"orders\":" + ordersStr.Substring(5);
|
|
CefReadBuyerOrder(buyerId, ordersStr);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
// 读订单
|
|
if (/*(cefAddress.Contains("orders.html")) &&*/
|
|
url1.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/aristotle/order_list_v"))
|
|
{
|
|
Task.Run(() =>
|
|
{
|
|
CefReadBuyerOrder(url1, data1);
|
|
});
|
|
}
|
|
|
|
// 售后 第一页
|
|
if (url1.StartsWith("https://mobile.yangkeduo.com/complaint_list.html"))
|
|
{
|
|
Task.Run(() =>
|
|
{
|
|
if (data1.Contains("listItemStatusVo") && data1.Contains("afterSalesId") && data1.Contains("statusText"))
|
|
{
|
|
var cookie2 = cookie1.Replace(";", "&").Replace(" ", "");
|
|
var jsonDatas = BaseRegex.GetJsonObjStrJson(ref data1, "listDataMap");
|
|
var jsonData = jsonDatas?.OrderByDescending(x => x.Length).FirstOrDefault();
|
|
var uid = BaseRegex.GetStringQuery(ref cookie2, "pdd_user_id");
|
|
var buyerId = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == uid)?.buyer_id;
|
|
if (!string.IsNullOrEmpty(buyerId) && !string.IsNullOrEmpty(jsonData))
|
|
{
|
|
try
|
|
{
|
|
var jObj = JsonHelper.JObjectParse(jsonData);
|
|
jObj["result"] = jObj["all"];
|
|
jObj["result"]["listItemVOList"] = jObj["result"]["list"];
|
|
CefReadBuyerAfterSale(buyerId, JsonHelper.SerializeObject(jObj));
|
|
}
|
|
catch
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
// 读取售后
|
|
if (url1.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/blade/after_sales_list"))
|
|
{
|
|
Task.Run(() =>
|
|
{
|
|
CefReadBuyerAfterSale(url1, data1);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
/// <summary>
|
|
/// 读取中转仓拍单订单
|
|
/// </summary>
|
|
/// <param name="out_order_nos"></param>
|
|
List<oms_wei_external_procurement_log_info> GetOrderTransitWarehouseInfo(string out_order_nos)
|
|
{
|
|
var url3 = BaseClass.Build29WxObjString("order/wx_get_transit_order");
|
|
var data3 = UserLogin.GetSignaturex();
|
|
data3 += "&out_order_no=" + out_order_nos;
|
|
var html3 = GetHtml.PostUtf8(url3, data3);
|
|
if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
|
|
html3 = GetHtml.PostUtf8(url3, data3);
|
|
if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
|
|
{
|
|
//Dispatcher.Invoke(new Action(() =>
|
|
//{
|
|
// BaseMsgWindow.ShowError(MainWindow.Instance, "订单读取失败 " + BaseRegex.GetStringJson(ref html, "msg"));
|
|
//}));
|
|
//break;
|
|
}
|
|
List<oms_wei_external_procurement_log_info> transitOrderList = new List<oms_wei_external_procurement_log_info>();
|
|
try
|
|
{
|
|
transitOrderList = JsonHelper.DeserializeJsonToList<oms_wei_external_procurement_log_info>(JObject.Parse(html3)["data"].ParseToString());
|
|
// 直接过滤掉仓库作废单
|
|
//transitOrderList = transitOrderList.Where(t => t.order_void_status != 1).ToList();
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
return transitOrderList;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 读取订单详情信息
|
|
/// </summary>
|
|
/// <param name="order_ids"></param>
|
|
/// <returns></returns>
|
|
List<oms_wei_order_info> GetOrderInfo(string order_ids)
|
|
{
|
|
Thread.Sleep(100);
|
|
var url1 = BaseClass.Build29WxObjString("order/get_erp_order_list");
|
|
var data1 = UserLogin.GetSignaturex();
|
|
data1 += "&erp_order_id_in=" + order_ids;
|
|
data1 += "&page_size=" + 1000;
|
|
var html1 = GetHtml.PostUtf8(url1, data1);
|
|
if (string.IsNullOrEmpty(html1) || !html1.Contains("\"code\":200"))
|
|
html1 = GetHtml.PostUtf8(url1, data1);
|
|
if (string.IsNullOrEmpty(html1) || !html1.Contains("\"code\":200"))
|
|
{
|
|
//BaseMsgWindow.ShowError("订单读取失败 " + BaseRegex.GetStringJson(ref html, "msg"));
|
|
//break;
|
|
}
|
|
List<oms_wei_order_info> orders = new List<oms_wei_order_info>();
|
|
try
|
|
{
|
|
orders = JsonHelper.DeserializeJsonToList<oms_wei_order_info>(JObject.Parse(html1)["data"].ParseToString());
|
|
if (orders == null)
|
|
orders = new List<oms_wei_order_info>();
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
var orderItems = GetOrderItemInfo(order_ids);
|
|
foreach (var orderItem in orderItems)
|
|
{
|
|
var order = orders.FirstOrDefault(o => o.order_id == orderItem.order_id);
|
|
orderItem.ItemOrder = order;
|
|
order.orderItems.Add(orderItem);
|
|
}
|
|
return orders;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 读取订单详情信息
|
|
/// </summary>
|
|
/// <param name="order_ids"></param>
|
|
/// <returns></returns>
|
|
List<oms_wei_order_item_info> GetOrderItemInfo(string order_ids)
|
|
{
|
|
Thread.Sleep(100);
|
|
var url1 = BaseClass.Build29WxObjString("order/get_erp_order_item_list");
|
|
var data1 = UserLogin.GetSignaturex();
|
|
data1 += "&erp_order_id_in=" + order_ids;
|
|
data1 += "&page_size=" + 1000;
|
|
var html1 = GetHtml.PostUtf8(url1, data1);
|
|
if (string.IsNullOrEmpty(html1) || !html1.Contains("\"code\":200"))
|
|
html1 = GetHtml.PostUtf8(url1, data1);
|
|
if (string.IsNullOrEmpty(html1) || !html1.Contains("\"code\":200"))
|
|
{
|
|
//BaseMsgWindow.ShowError("订单读取失败 " + BaseRegex.GetStringJson(ref html, "msg"));
|
|
//break;
|
|
}
|
|
List<oms_wei_order_item_info> orderItems = new List<oms_wei_order_item_info>();
|
|
try
|
|
{
|
|
orderItems = JsonHelper.DeserializeJsonToList<oms_wei_order_item_info>(JObject.Parse(html1)["data"].ParseToString());
|
|
if (orderItems == null)
|
|
orderItems = new List<oms_wei_order_item_info>();
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
return orderItems;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 读取售后单
|
|
/// </summary>
|
|
/// <param name="order_ids"></param>
|
|
/// <returns></returns>
|
|
List<oms_wei_refund_info> GetOrderRefundInfo(string order_ids)
|
|
{
|
|
Thread.Sleep(100);
|
|
var url2 = BaseClass.Build29WxObjString("order/get_erp_refund_list");
|
|
var data2 = UserLogin.GetSignaturex();
|
|
data2 += "&erp_order_id_in=" + order_ids;
|
|
var html2 = GetHtml.PostUtf8(url2, data2);
|
|
if (string.IsNullOrEmpty(html2) || !html2.Contains("\"code\":200"))
|
|
html2 = GetHtml.PostUtf8(url2, data2);
|
|
if (string.IsNullOrEmpty(html2) || !html2.Contains("\"code\":200"))
|
|
{
|
|
//BaseMsgWindow.ShowError(MainWindow.Instance, "订单读取失败 " + BaseRegex.GetStringJson(ref html, "msg"));
|
|
//break;
|
|
}
|
|
List<oms_wei_refund_info> refunds = new List<oms_wei_refund_info>();
|
|
try { refunds = JsonHelper.DeserializeJsonToList<oms_wei_refund_info>(JObject.Parse(html2)["data"].ParseToString()); } catch { }
|
|
return refunds;
|
|
}
|
|
|
|
void UpdateOrderStatus(PddBuyerOrderLiteInfo pdd_order, oms_wei_order_item_info wx_order_item, oms_wei_refund_info wx_refund_item, oms_wei_external_procurement_log_info wx_transit_order)
|
|
{
|
|
pdd_order.ShopOrderIdStr = wx_order_item?.order_id ?? wx_transit_order?.order_no;
|
|
pdd_order.ShopOrderSkuIdStr = wx_order_item?.sku_id ?? wx_transit_order?.order_sku_id;
|
|
pdd_order.ShopOrderSkuNameStr = wx_order_item?.sku_attr_str;
|
|
pdd_order.WxOrderCreateTime = wx_order_item?.ItemOrder?.create_time == null ? DateTime.MinValue : BaseClass.StampToDateTime((wx_order_item?.ItemOrder?.create_time).ParseToInt());
|
|
pdd_order.ShopOrderRefundStr = ""; // (/*refund_item?.count > 0 &&*/ wx_order_item.refund_status > 1) ? "店铺售后" : "";
|
|
pdd_order.wxRefundStatus = "";
|
|
if (wx_order_item?.refund_status > 1)
|
|
{
|
|
pdd_order.ShopOrderRefundStr = "店铺售后";
|
|
pdd_order.wxRefundStatus = pdd_order.order_status_prompt.Contains("待发货") ? "待退款" : "待退货";
|
|
}
|
|
pdd_order.TransitBuyerOrderRefundStatus = wx_transit_order?.refund_status;
|
|
pdd_order.TransitWarehouseIdStr = wx_transit_order?.platform;
|
|
pdd_order.Express1WaybillStr = wx_transit_order?.express_1_waybill;
|
|
pdd_order.Express1CompanyStr = wx_transit_order?.express_1_company;
|
|
pdd_order.Express2WaybillStr = wx_transit_order?.express_2_waybill;
|
|
pdd_order.Express2CompanyStr = wx_transit_order?.express_2_company;
|
|
pdd_order.TransferWareHouseStatus = wx_transit_order?.transfer_warehouse_status.ParseToString();
|
|
pdd_order.WxOrderVoidStatus = wx_transit_order?.order_void_status.ParseToString();
|
|
pdd_order.PreAllocatedOrderNoStr = wx_transit_order?.pre_allocated_order_no.ParseToString();
|
|
// 更新订单中转取号状态
|
|
pdd_order.sendStatus = (pdd_order.TransitOrderStatus + " " + pdd_order.ShopOrderRefundStr).Trim();
|
|
if (pdd_order.WxOrderVoidStatus == "1")
|
|
{
|
|
pdd_order.sendStatus += " 已作废";
|
|
}
|
|
pdd_order.TransitCreateTime = wx_transit_order?.created_time ?? DateTime.MinValue;
|
|
pdd_order.TransitPickupTime = wx_transit_order?.pickup_time ?? DateTime.MaxValue.AddMonths(-1);
|
|
}
|
|
|
|
|
|
void UpdateAfterSaleStatus(PddBuyerAfterSaleLiteInfo pdd_afterSale, oms_wei_order_item_info wx_order_item, oms_wei_refund_info wx_refund_item, oms_wei_external_procurement_log_info wx_transit_order)
|
|
{
|
|
pdd_afterSale.ShopOrderIdStr = wx_order_item?.order_id ?? wx_transit_order?.order_no;
|
|
pdd_afterSale.ShopOrderSkuIdStr = wx_order_item?.sku_id ?? wx_transit_order?.order_sku_id;
|
|
pdd_afterSale.ShopOrderSkuNameStr = wx_order_item?.sku_attr_str;
|
|
pdd_afterSale.WxOrderCreateTime = wx_order_item?.ItemOrder?.create_time == null ? DateTime.MinValue : BaseClass.StampToDateTime((wx_order_item?.ItemOrder?.create_time).ParseToInt());
|
|
pdd_afterSale.ShopOrderRefundStr = ""; // (/*refund_item?.count > 0 &&*/ wx_order_item.refund_status > 1) ? "店铺售后" : "";
|
|
//pdd_afterSale.wxRefundStatus = "";
|
|
if (wx_order_item.refund_status > 1)
|
|
{
|
|
pdd_afterSale.ShopOrderRefundStr = "店铺售后";
|
|
//pdd_afterSale.wxRefundStatus = pdd_afterSale.order_status_prompt.Contains("待发货") ? "待退款" : "待退货";
|
|
}
|
|
pdd_afterSale.TransitBuyerOrderRefundStatus = wx_transit_order?.refund_status;
|
|
pdd_afterSale.TransitWarehouseIdStr = wx_transit_order?.platform;
|
|
pdd_afterSale.Express1WaybillStr = wx_transit_order?.express_1_waybill;
|
|
pdd_afterSale.Express1CompanyStr = wx_transit_order?.express_1_company;
|
|
pdd_afterSale.Express2WaybillStr = wx_transit_order?.express_2_waybill;
|
|
pdd_afterSale.Express2CompanyStr = wx_transit_order?.express_2_company;
|
|
pdd_afterSale.TransferWareHouseStatus = wx_transit_order?.transfer_warehouse_status.ParseToString();
|
|
pdd_afterSale.WxOrderVoidStatus = wx_transit_order?.transfer_warehouse_status.ParseToString();
|
|
pdd_afterSale.PreAllocatedOrderNoStr = wx_transit_order?.pre_allocated_order_no.ParseToString();
|
|
// 更新订单中转取号状态
|
|
pdd_afterSale.sendStatus = (pdd_afterSale.TransitOrderStatus + " " + pdd_afterSale.ShopOrderRefundStr).Trim();
|
|
pdd_afterSale.TransitCreateTime = wx_transit_order?.created_time ?? DateTime.MinValue;
|
|
pdd_afterSale.TransitPickupTime = wx_transit_order?.pickup_time ?? DateTime.MaxValue.AddMonths(-1);
|
|
}
|
|
|
|
|
|
void CefReadBuyerOrder(string url, string data)
|
|
{
|
|
if (data.Contains("轻奢壁挂式香皂盒置物架卫生间沥水家居可拆卸收纳盒翻盖肥皂盒"))
|
|
{
|
|
|
|
}
|
|
|
|
var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => url.Contains(b.buyer_id));
|
|
if (buyer == null)
|
|
return;
|
|
|
|
lastCefReadOrderTime = DateTime.Now;
|
|
|
|
//{"server_time":1775789489,"orders":[],"extra_info":{}}
|
|
if (data.Contains("\"orders\":[]"))
|
|
{
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
lblMsg.Content = buyer.buyer_name + " 获取到空订单列表,退出自动滑动 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
}));
|
|
currentReadBuyer = "";
|
|
return;
|
|
}
|
|
if (data.Contains("\"error_code\":40001"))
|
|
{
|
|
currentReadBuyer = "";
|
|
PddMobileLoginForm.CheckBuyerLogin(new List<BuyerLoginInfo> { buyer }, false);
|
|
return;
|
|
}
|
|
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
lblMsg.Content = buyer.buyer_name + " 正在获取订单列表 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
}));
|
|
|
|
var list = JsonHelper.DeserializeJsonToList<PddBuyerOrderLiteInfo>(JsonHelper.JObjectParse(data)["orders"].ParseToString());
|
|
|
|
var out_order_nos = string.Join(",", list.Select(bo => bo.order_sn));
|
|
var transitOrderList = GetOrderTransitWarehouseInfo(out_order_nos);
|
|
|
|
var order_ids = string.Join(",", transitOrderList.Select(ts => ts.order_no));
|
|
var orders = GetOrderInfo(order_ids);
|
|
foreach(var order in orders)
|
|
{
|
|
foreach (var orderItem in order.orderItems)
|
|
{
|
|
// 中转仓订单
|
|
if (orderItem.ItemOrder.orderItems.Count > 1)
|
|
orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id && t.order_sku_id == orderItem.sku_id));
|
|
else
|
|
orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id));
|
|
}
|
|
}
|
|
var refunds = GetOrderRefundInfo(order_ids);
|
|
|
|
foreach (PddBuyerOrderLiteInfo o in list)
|
|
{
|
|
o.buyerId = buyer.buyer_id;
|
|
o.buyerName = buyer.buyer_name;
|
|
|
|
// 查找店铺订单并更新店铺订单状态
|
|
var transit_item = transitOrderList.FirstOrDefault(t1 => t1.out_order_no == o.order_sn);
|
|
if (transit_item != null)
|
|
{
|
|
var shopOrder = orders.FirstOrDefault(o1 => o1.order_id == transit_item.order_no);
|
|
var order_item = shopOrder?.orderItems.FirstOrDefault(oi => oi.ItemTransitOrders.Any(t1 => t1.out_order_no == o.order_sn));
|
|
var refund_item = refunds.FirstOrDefault(ri => ri.order_id == order_item?.order_id) ?? order_item?.ItemRefund;
|
|
|
|
UpdateOrderStatus(o, order_item, refund_item, transit_item);
|
|
}
|
|
|
|
PddBuyerOrderLiteInfo order = null;
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
order = this.lstPddBuyerOrderInfoLite.FirstOrDefault(or => or.order_sn == o.order_sn);
|
|
}));
|
|
if (order == null)
|
|
{
|
|
order = o;
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
lstPddBuyerOrderInfoLite.Add(order);
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
//if (JsonHelper.SerializeObject(order) != JsonHelper.SerializeObject(o))
|
|
{
|
|
//if (order.order_status_prompt.Contains("待发货") && !o.order_status_prompt.Contains("待发货"))
|
|
//{
|
|
// order.sendStatus = "";
|
|
//}
|
|
|
|
//if (order.sendStatus == "已取号" || order.sendStatus == "提前取号")
|
|
//{
|
|
// if (!string.IsNullOrEmpty(o.Express1WaybillStr) && !string.IsNullOrEmpty(o.Express1CompanyStr))
|
|
// order.sendStatus = "已提交";
|
|
// if (o.PreAllocatedOrderNoStr.IsNullOrEmpty())
|
|
// order.sendStatus = "";
|
|
//}
|
|
//if (!o.sendStatus .IsNullOrEmpty())
|
|
{
|
|
order.sendStatus = o.sendStatus;
|
|
}
|
|
|
|
//order = JsonHelper.DeserializeJsonToObject<PddBuyerOrderInfoLite>(JsonHelper.SerializeObject(o));
|
|
order.activity_type = o.activity_type;
|
|
order.after_sales = o.after_sales;
|
|
order.discount_amount = o.discount_amount;
|
|
order.display_amount = o.display_amount;
|
|
order.extra_info = JsonHelper.DeserializeJsonToObject<extra_info>(JsonHelper.SerializeObject(o.extra_info));
|
|
order.order_amount = o.order_amount;
|
|
order.order_Goods = JsonHelper.DeserializeJsonToList<order_good>(JsonHelper.SerializeObject(o.order_Goods));
|
|
order.order_link_url = o.order_link_url;
|
|
order.order_prompt_color = o.order_prompt_color;
|
|
order.order_status_prompt = o.order_status_prompt;
|
|
order.parent_order_sn = o.parent_order_sn;
|
|
order.service_amount = o.service_amount;
|
|
order.shipping_amount = o.shipping_amount;
|
|
order.order_time = o.order_time;
|
|
order.tracking_number = o.tracking_number;
|
|
|
|
order.TransitCreateTime = o.TransitCreateTime;
|
|
order.TransitPickupTime = o.TransitPickupTime;
|
|
|
|
order.WxOrderCreateTime = o.WxOrderCreateTime;
|
|
order.ShopOrderIdStr = o.ShopOrderIdStr;
|
|
order.ShopOrderSkuIdStr = o.ShopOrderSkuIdStr;
|
|
order.ShopOrderSkuNameStr = o.ShopOrderSkuNameStr;
|
|
order.TransitBuyerOrderRefundStatus = o.TransitBuyerOrderRefundStatus;
|
|
order.TransitWarehouseIdStr = o.TransitWarehouseIdStr;
|
|
order.Express1WaybillStr = o.Express1WaybillStr;
|
|
order.Express1CompanyStr = o.Express1CompanyStr;
|
|
order.Express2WaybillStr = o.Express2WaybillStr;
|
|
order.Express2CompanyStr = o.Express2CompanyStr;
|
|
order.TransferWareHouseStatus = o.TransferWareHouseStatus;
|
|
order.WxOrderVoidStatus = o.WxOrderVoidStatus;
|
|
order.PreAllocatedOrderNoStr = o.PreAllocatedOrderNoStr;
|
|
order.ShopOrderRefundStr = o.ShopOrderRefundStr;
|
|
order.wxRefundStatus = o.wxRefundStatus;
|
|
|
|
var index = lstPddBuyerOrderInfoLite.IndexOf(order);
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
lstPddBuyerOrderInfoLite.Remove(order);
|
|
lstPddBuyerOrderInfoLite.Insert(index, order);
|
|
}));
|
|
}
|
|
}
|
|
|
|
if (filterOneBuyerOrder(order))
|
|
{
|
|
var orderExist = lstFilterPddBuyerOrderInfoLite.FirstOrDefault(oe => oe.order_sn == order.order_sn);
|
|
if (orderExist == null)
|
|
{
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
lstFilterPddBuyerOrderInfoLite.Add(order);
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
var index = lstFilterPddBuyerOrderInfoLite.IndexOf(orderExist);
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
lstFilterPddBuyerOrderInfoLite.Remove(orderExist);
|
|
lstFilterPddBuyerOrderInfoLite.Insert(index, order);
|
|
}));
|
|
}
|
|
}
|
|
|
|
Task.Run(() =>
|
|
{
|
|
//SendOrderE57(order);
|
|
//if (order.sendStatus.ParseToString().Contains("售后"))
|
|
|
|
if (order.order_sn == "260706-681553467002665")
|
|
{
|
|
|
|
}
|
|
if (order.ShopOrderRefundStr.ParseToString().Contains("售后"))
|
|
{
|
|
if (!",2,3,4,5,7,8,10,31,".Contains("," + (order.after_sales?.after_sales_status).ParseToString() + ","))
|
|
{
|
|
// 待发货直接售后,并通知中转仓接口修改退货状态
|
|
var afterSaleRst = PddAutoAfterSale(order);
|
|
}
|
|
// 作废订单 后台服务端自动进行 需要核对,未取号订单也无法取消
|
|
//if (order.PreAllocatedOrderNoStr == "0" && order.WxOrderVoidStatus != "1")
|
|
//{
|
|
// string url2 = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/discardOrder";
|
|
// var data2 = new JObject();
|
|
// data2["orderNo"] = order.ShopOrderIdStr;
|
|
// data2["outOrderNo"] = order.order_sn;
|
|
// var dataStr2 = JsonHelper.SerializeObject(data2);
|
|
// var discardRst = HttpResponseWXBLL.e57PostResponse(url2, dataStr2, "");
|
|
//}
|
|
}
|
|
|
|
// 根据订单状态 取号/修改取号
|
|
SendTransitOrderE57(order);
|
|
|
|
if (!string.IsNullOrEmpty(order.ShopOrderIdStr))
|
|
{
|
|
// 买手订单状态记录到数据库
|
|
order_pdd_buyer_order pddBuyerOrder = new order_pdd_buyer_order()
|
|
{
|
|
after_sales_status = (order.after_sales?.after_sales_status).ParseToInt(),
|
|
buyerId = order.buyerId,
|
|
buyerName = order.buyerName,
|
|
order_amount = order.order_amount.ParseToInt(),
|
|
order_sn = order.order_sn,
|
|
order_status_prompt = order.order_status_prompt,
|
|
outExpressCompanyCode = order.outExpressCompanyCode,
|
|
order_time = order.order_time,
|
|
pre_allocated_order_no = order.PreAllocatedOrderNoStr.ParseToInt(),
|
|
tracking_number = order.tracking_number,
|
|
TransitCreateTime = order.TransitCreateTime,
|
|
TransitPickupTime = order.TransitPickupTime,
|
|
wx_order_id = order.ShopOrderIdStr,
|
|
wx_sku_id = order.ShopOrderSkuIdStr,
|
|
};
|
|
var url3 = BaseClass.Build29WxObjString("order/wx_add_mdy_buyer_order");
|
|
var data3 = UserLogin.GetSignaturex();
|
|
data3 += "&after_sales_status=" + pddBuyerOrder.after_sales_status;
|
|
data3 += "&buyerId=" + pddBuyerOrder.buyerId;
|
|
data3 += "&buyerName=" + pddBuyerOrder.buyerName;
|
|
data3 += "&order_amount=" + pddBuyerOrder.order_amount;
|
|
data3 += "&pdd_order_sn=" + pddBuyerOrder.order_sn;
|
|
data3 += "&order_status_prompt=" + pddBuyerOrder.order_status_prompt;
|
|
data3 += "&outExpressCompanyCode=" + pddBuyerOrder.outExpressCompanyCode;
|
|
data3 += "&order_time=" + pddBuyerOrder.order_time;
|
|
data3 += "&pre_allocated_order_no=" + pddBuyerOrder.pre_allocated_order_no;
|
|
data3 += "&tracking_number=" + pddBuyerOrder.tracking_number;
|
|
data3 += "&TransitCreateTime=" + pddBuyerOrder.TransitCreateTime.ToString("yyyy-MM-dd HH:mm:ss");
|
|
data3 += "&TransitPickupTime=" + pddBuyerOrder.TransitPickupTime.ToString("yyyy-MM-dd HH:mm:ss");
|
|
data3 += "&wx_order_id=" + pddBuyerOrder.wx_order_id;
|
|
data3 += "&wx_sku_id=" + pddBuyerOrder.wx_sku_id;
|
|
var html3 = GetHtml.PostUtf8(url3, data3);
|
|
if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
|
|
html3 = GetHtml.PostUtf8(url3, data3);
|
|
}
|
|
});
|
|
}
|
|
NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite);
|
|
}
|
|
|
|
void CefReadBuyerAfterSale(string url, string data)
|
|
{
|
|
var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => url.Contains(b.buyer_id));
|
|
if (buyer == null)
|
|
return;
|
|
|
|
lastCefReadOrderTime = DateTime.Now;
|
|
|
|
if (data.Contains("\"listItemVOList\":[]") || data.Contains("\"hasNextQuery\":false"))
|
|
{
|
|
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 = "";
|
|
PddMobileLoginForm.CheckBuyerLogin(new List<BuyerLoginInfo> { buyer }, false);
|
|
return;
|
|
}
|
|
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
lblMsg.Content = buyer.buyer_name + " 正在获取售后列表 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
}));
|
|
|
|
var list = JsonHelper.DeserializeJsonToList<PddBuyerAfterSaleLiteInfo>(JsonHelper.JObjectParse(data)["result"]["listItemVOList"].ParseToString());
|
|
|
|
var out_order_nos = string.Join(",", list.Select(bo => bo.orderSn));
|
|
var transitOrderList = GetOrderTransitWarehouseInfo(out_order_nos);
|
|
|
|
var order_ids = string.Join(",", transitOrderList.Select(ts => ts.order_no));
|
|
var orders = GetOrderInfo(order_ids);
|
|
foreach (var order in orders)
|
|
{
|
|
foreach (var orderItem in order.orderItems)
|
|
{
|
|
// 中转仓订单
|
|
if (orderItem.ItemOrder.orderItems.Count > 1)
|
|
orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id && t.order_sku_id == orderItem.sku_id));
|
|
else
|
|
orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id));
|
|
}
|
|
}
|
|
var refunds = GetOrderRefundInfo(order_ids);
|
|
|
|
foreach (var af in list)
|
|
{
|
|
if (af.orderSn == "260414-035525772830257")
|
|
{
|
|
|
|
}
|
|
|
|
af.buyerId = buyer.buyer_id;
|
|
af.buyerName = buyer.buyer_name;
|
|
|
|
// 查找店铺订单并更新店铺订单状态
|
|
var transit_item = transitOrderList.FirstOrDefault(t1 => t1.out_order_no == af.orderSn);
|
|
if (transit_item != null)
|
|
{
|
|
var shopOrder = orders.FirstOrDefault(o1 => o1.order_id == transit_item.order_no);
|
|
var order_item = shopOrder?.orderItems.FirstOrDefault(oi => oi.ItemTransitOrders.Any(t1 => t1.out_order_no == af.orderSn));
|
|
var refund_item = refunds.FirstOrDefault(ri => ri.order_id == order_item?.order_id) ?? order_item?.ItemRefund;
|
|
|
|
UpdateAfterSaleStatus(af, order_item, refund_item, transit_item);
|
|
}
|
|
|
|
bool isUpdate = false;
|
|
PddBuyerAfterSaleLiteInfo afterSale = null;
|
|
if (!this.lstPddBuyerAfterSaleInfoLite.ToList().Any(or => or.afterSalesId == af.afterSalesId))
|
|
{
|
|
isUpdate = true;
|
|
afterSale = af;
|
|
lstPddBuyerAfterSaleInfoLite.Add(afterSale);
|
|
}
|
|
else
|
|
{
|
|
afterSale = this.lstPddBuyerAfterSaleInfoLite.FirstOrDefault(aft => aft.afterSalesId == af.afterSalesId);
|
|
var afterSaleTmp = JsonHelper.DeserializeJsonToObject<PddBuyerAfterSaleLiteInfo>(JsonHelper.SerializeObject(afterSale));
|
|
afterSaleTmp.sendStatus = "";
|
|
afterSaleTmp.listItemMallVO = new ListItemMallVO();
|
|
var afTmp = JsonHelper.DeserializeJsonToObject<PddBuyerAfterSaleLiteInfo>(JsonHelper.SerializeObject(af));
|
|
afTmp.listItemMallVO = new ListItemMallVO();
|
|
//"{\"buyerId\":\"9303896321\",\"buyerName\":\"吴镇强\",\"sendStatus\":\"\",\"orderSn\":\"260419-166104962590257\",\"orderDate\":260419,\"afterSalesId\":20379701953346,\"listItemExtraVO\":{\"navToDetailPageUrl\":\"/complaints_new_detail.html?after_sales_id=20379701953346&order_sn=260419-166104962590257\"},\"listItemMallVO\":{\"mallName\":\"喜悦时光婚礼屋\",\"mallLogo\":\"http://t16img.yangkeduo.com/pdd_ims/img_check/v2/F3E6FF9A2BE40120200112155401880/9632a275dd974e9aa2e138cde6d0adf9.png\",\"mallTagLink\":null,\"pddRoute\":\"mall_page.html?mall_id=938572084&msn=zjdvupyguflkhtcgugbw3hbdpm_axbuy&_sop_rcto=YWLr7xLhO9bbI6L9S-r6ALQbTuXTx_3fIjo\"},\"listItemStatusVO\":{\"statusText\":\"待用户发货\"},\"listItemGoodsVO\":{\"goodsImage\":\"https://img.pddpic.com/mms-material-img/2026-03-21/005e0aa1-ad62-4db3-8018-00490ddc0a82.jpeg\",\"goodsName\":\"2026高级可折叠蚊帐家用卧室懒人免安装加高加厚加密学生宿舍蚊帐\",\"spec\":\"免安装/可折叠/网眼加密【可爱粉】+固定器,适用双人1.8m床【190*160*80】\",\"goodsPrice\":1890,\"goodsNumber\":1,\"richTextList\":null},\"listItemAmountVO\":{\"orderAmountTitle\":\"实付:\",\"orderAmount\":1890,\"payLaterAmountTitle\":null,\"payLaterAmount\":null,\"refundAmountTitle\":\"退款金额:\",\"refundAmount\":1890,\"refundAmountText\":null,\"useCoupon\":false}}"
|
|
//"{\"buyerId\":\"9303896321\",\"buyerName\":\"吴镇强\",\"sendStatus\":\"\",\"orderSn\":\"260419-166104962590257\",\"orderDate\":260419,\"afterSalesId\":20379701953346,\"listItemExtraVO\":{\"navToDetailPageUrl\":\"/complaints_new_detail.html?after_sales_id=20379701953346&order_sn=260419-166104962590257\"},\"listItemMallVO\":{\"mallName\":\"喜悦时光婚礼屋\",\"mallLogo\":\"http://t16img.yangkeduo.com/pdd_ims/img_check/v2/F3E6FF9A2BE40120200112155401880/9632a275dd974e9aa2e138cde6d0adf9.png\",\"mallTagLink\":null,\"pddRoute\":\"mall_page.html?mall_id=938572084&msn=zjdvupyguflkhtcgugbw3hbdpm_axbuy&_sop_rcto=YWKCoxwbKDHFAaL9S-r6ALQbTuXTx_3fIjo\"},\"listItemStatusVO\":{\"statusText\":\"待用户发货\"},\"listItemGoodsVO\":{\"goodsImage\":\"https://img.pddpic.com/mms-material-img/2026-03-21/005e0aa1-ad62-4db3-8018-00490ddc0a82.jpeg\",\"goodsName\":\"2026高级可折叠蚊帐家用卧室懒人免安装加高加厚加密学生宿舍蚊帐\",\"spec\":\"免安装/可折叠/网眼加密【可爱粉】+固定器,适用双人1.8m床【190*160*80】\",\"goodsPrice\":1890,\"goodsNumber\":1,\"richTextList\":null},\"listItemAmountVO\":{\"orderAmountTitle\":\"实付:\",\"orderAmount\":1890,\"payLaterAmountTitle\":null,\"payLaterAmount\":null,\"refundAmountTitle\":\"退款金额:\",\"refundAmount\":1890,\"refundAmountText\":null,\"useCoupon\":false}}"
|
|
if (JsonHelper.SerializeObject(afterSaleTmp) != JsonHelper.SerializeObject(afTmp))
|
|
{
|
|
isUpdate = true;
|
|
//order = JsonHelper.DeserializeJsonToObject<PddBuyerOrderInfoLite>(JsonHelper.SerializeObject(o));
|
|
afterSale.afterSalesId = af.afterSalesId;
|
|
afterSale.listItemAmountVO = JsonHelper.DeserializeJsonToObject<ListItemAmountVO>(JsonHelper.SerializeObject(af.listItemAmountVO));
|
|
afterSale.listItemExtraVO = JsonHelper.DeserializeJsonToObject<ListItemExtraVO>(JsonHelper.SerializeObject(af.listItemExtraVO));
|
|
afterSale.listItemGoodsVO = JsonHelper.DeserializeJsonToObject<ListItemGoodsVO>(JsonHelper.SerializeObject(af.listItemGoodsVO));
|
|
afterSale.listItemMallVO = JsonHelper.DeserializeJsonToObject<ListItemMallVO>(JsonHelper.SerializeObject(af.listItemMallVO));
|
|
afterSale.listItemStatusVO = JsonHelper.DeserializeJsonToObject<ListItemStatusVO>(JsonHelper.SerializeObject(af.listItemStatusVO));
|
|
|
|
afterSale.TransitCreateTime = af.TransitCreateTime;
|
|
afterSale.TransitPickupTime = af.TransitPickupTime;
|
|
afterSale.WxOrderCreateTime = af.WxOrderCreateTime;
|
|
afterSale.ShopOrderIdStr = af.ShopOrderIdStr;
|
|
afterSale.ShopOrderSkuIdStr = af.ShopOrderSkuIdStr;
|
|
afterSale.ShopOrderSkuNameStr = af.ShopOrderSkuNameStr;
|
|
afterSale.TransitBuyerOrderRefundStatus = af.TransitBuyerOrderRefundStatus;
|
|
afterSale.TransitWarehouseIdStr = af.TransitWarehouseIdStr;
|
|
afterSale.Express1WaybillStr = af.Express1WaybillStr;
|
|
afterSale.Express1CompanyStr = af.Express1CompanyStr;
|
|
afterSale.Express2WaybillStr = af.Express2WaybillStr;
|
|
afterSale.Express2CompanyStr = af.Express2CompanyStr;
|
|
afterSale.TransferWareHouseStatus = af.TransferWareHouseStatus;
|
|
afterSale.WxOrderVoidStatus = af.WxOrderVoidStatus;
|
|
afterSale.PreAllocatedOrderNoStr = af.PreAllocatedOrderNoStr;
|
|
afterSale.ShopOrderRefundStr = af.ShopOrderRefundStr;
|
|
//afterSale.wxRefundStatus = af.wxRefundStatus;
|
|
|
|
// 移除,添加 自动更新列表显示
|
|
var index = lstPddBuyerAfterSaleInfoLite.IndexOf(afterSale);
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
lstPddBuyerAfterSaleInfoLite.Remove(afterSale);
|
|
lstPddBuyerAfterSaleInfoLite.Insert(index, afterSale);
|
|
}));
|
|
}
|
|
}
|
|
if (filterOneBuyerAfterSale(afterSale))
|
|
{
|
|
var afterSaleExist = lstFilterPddBuyerAfterSaleInfoLite.FirstOrDefault(afe => afe.orderSn == afterSale.orderSn);
|
|
if (afterSaleExist == null)
|
|
{
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
lstFilterPddBuyerAfterSaleInfoLite.Add(afterSale);
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
var index = lstFilterPddBuyerAfterSaleInfoLite.IndexOf(afterSaleExist);
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
lstFilterPddBuyerAfterSaleInfoLite.Remove(afterSaleExist);
|
|
lstFilterPddBuyerAfterSaleInfoLite.Insert(index, afterSale);
|
|
}));
|
|
}
|
|
}
|
|
|
|
if (afterSale.orderDate < DateTime.Now.AddMonths(-2).ToString("yyMMdd").ParseToInt())
|
|
{
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
lblMsg.Content = buyer.buyer_name + " 近2个月售后列表获取完成,退出自动滑动 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
}));
|
|
currentReadBuyer = "";
|
|
//return;
|
|
}
|
|
|
|
if (isUpdate)
|
|
{
|
|
// 如果买手退款成功,仓库不是买手退款成功,则修改仓库售后字段为买手退款成功
|
|
if (afterSale.AfterSaleStatusStr.Contains("退款成功") || afterSale.AfterSaleStatusStr.Contains("交易已取消"))
|
|
{
|
|
if (afterSale.TransitBuyerOrderRefundStatus != "买手退款成功")
|
|
{
|
|
var orderTmp = new PddBuyerOrderLiteInfo() { ShopOrderIdStr = afterSale.ShopOrderIdStr, order_sn = afterSale.orderSn };
|
|
var refundRst = SendTransitAfterSaleE57(orderTmp, "买手退款成功");
|
|
if (refundRst.Contains("<code>0</code>") || refundRst.Contains("<code>200</code>"))
|
|
{
|
|
afterSale.afterSaleSendStatus = "退款成功 买手退款信息更新成功";
|
|
}
|
|
else
|
|
{
|
|
var msg = BaseRegex.GetStringXml(ref refundRst, "msg");
|
|
afterSale.afterSaleSendStatus = "退款成功 买手退款信息更新失败,服务端返回 " + msg;
|
|
}
|
|
}
|
|
}
|
|
// 如果中转仓表买手售后状态不等于买手售后单售后,更新仓库买手售后状态
|
|
else if (afterSale.TransitBuyerOrderRefundStatus != afterSale.AfterSaleStatusStr)
|
|
{
|
|
//if (!afterSale.AfterSaleStatusStr.Contains("关闭") && !afterSale.AfterSaleStatusStr.Contains("撤销") && !afterSale.AfterSaleStatusStr.Contains("失败"))
|
|
var orderTmp = new PddBuyerOrderLiteInfo() { ShopOrderIdStr = afterSale.ShopOrderIdStr, order_sn = afterSale.orderSn };
|
|
var refundRst = SendTransitAfterSaleE57(orderTmp, afterSale.AfterSaleStatusStr);
|
|
if (refundRst.Contains("<code>0</code>") || refundRst.Contains("<code>200</code>"))
|
|
{
|
|
afterSale.afterSaleSendStatus = "买手退款信息更新成功";
|
|
}
|
|
else
|
|
{
|
|
var msg = BaseRegex.GetStringXml(ref refundRst, "msg");
|
|
afterSale.afterSaleSendStatus = "买手退款信息更新失败,服务端返回 " + msg;
|
|
}
|
|
}
|
|
}
|
|
// 作废订单 后台服务端自动进行 需要核对,未取号订单也无法取消
|
|
//if (afterSale.PreAllocatedOrderNoStr == "0" && afterSale.WxOrderVoidStatus != "1")
|
|
//{
|
|
// string url2 = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/discardOrder";
|
|
// var data2 = new JObject();
|
|
// data2["orderNo"] = afterSale.ShopOrderIdStr;
|
|
// data2["outOrderNo"] = afterSale.orderSn;
|
|
// var dataStr2 = JsonHelper.SerializeObject(data2);
|
|
// var discardRst = HttpResponseWXBLL.e57PostResponse(url2, dataStr2, "");
|
|
//}
|
|
}
|
|
NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_after_sale_list", lstPddBuyerAfterSaleInfoLite);
|
|
}
|
|
|
|
void ShowAfterSale(PddBuyerAfterSaleLiteInfo afterSale)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
TimeSpan PauseTick = new TimeSpan(1);
|
|
private void chkAutoReadBuyerOrder_CheckedChanged(object sender, RoutedEventArgs e)
|
|
{
|
|
if (isLoad)
|
|
{
|
|
buyerReadOrderConfig.IsAutoReadOrder = chkAutoReadBuyerOrder.IsChecked == true;
|
|
NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_config", buyerReadOrderConfig);
|
|
//buyerOrderConfig = NaiBa.Util.Helper.ConfigHelper.LoadConfig<BuyerOrderConfig>("pdd_buyer_order_config");
|
|
|
|
if (buyerReadOrderConfig.IsAutoReadOrder)
|
|
nextGetOrderTime = DateTime.Now + PauseTick;
|
|
else
|
|
PauseTick = nextGetOrderTime - DateTime.Now;
|
|
}
|
|
}
|
|
|
|
private void btnSearch_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
GetOrderAndAfterSale();
|
|
}
|
|
|
|
void GetOrderAndAfterSale()
|
|
{
|
|
GetPddOrder();
|
|
//MakeWxToPddAfterSales();
|
|
|
|
nextGetOrderTime = DateTime.Now.AddMinutes(25);
|
|
}
|
|
|
|
void GetPddOrder()
|
|
{
|
|
isReadBuyerOrder = true;
|
|
|
|
if (cancellationTokenSource != null)
|
|
cancellationTokenSource.Cancel();
|
|
cancellationTokenSource = new CancellationTokenSource();
|
|
|
|
Task.Run(() =>
|
|
{
|
|
var tokenSource = cancellationTokenSource;
|
|
while (isInitBuyerOrder || isInitBuyerAfterSale)
|
|
{
|
|
if (tokenSource.IsCancellationRequested)
|
|
{
|
|
BindBuyer(null, "已取消读取");
|
|
break;
|
|
}
|
|
Thread.Sleep(500);
|
|
}
|
|
|
|
currentReadBuyer = "";
|
|
|
|
foreach (var buyer in GlobalConfig.PDDBuyerLoginList)
|
|
{
|
|
if (tokenSource.IsCancellationRequested)
|
|
break;
|
|
|
|
PddMobileLoginForm.CheckBuyerLogin(new List<BuyerLoginInfo>() { buyer });
|
|
if (buyer.status != "在线")
|
|
continue;
|
|
|
|
//var row = dgvBuyer.Rows.Cast<DataGridViewRow>().FirstOrDefault(r => r.Cells["colBuyerNick"].Value.ParseToString() == buyer.buyer_nick);
|
|
//if (row == null)
|
|
//{
|
|
// continue;
|
|
//}
|
|
//if (row.Cells["colSelect"].Value.ParseToBool() != true)
|
|
//{
|
|
// Invoke(new Action(() => { row.Cells["colMessage"].Value = "未勾选买手号,跳过"; }));
|
|
// continue;
|
|
//}
|
|
|
|
try
|
|
{
|
|
bool isInitial = false;
|
|
while (isInitial == false)
|
|
{
|
|
Thread.Sleep(100);
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
if (buyer.wpf_browser != null)
|
|
{
|
|
var frame = buyer.wpf_browser.GetBrowser().MainFrame;
|
|
isInitial = buyer.wpf_browser != null && buyer.wpf_browser.IsBrowserInitialized && frame.IsValid;
|
|
}
|
|
}));
|
|
}
|
|
|
|
WPFCEFBrowser.DeleteCookie(buyer.wpf_browser.GetCookieManager(null));
|
|
|
|
var cookieLst = JsonHelper.DeserializeJsonToList<CefSharp.Cookie>(buyer?.cookie);
|
|
var t = WPFCEFBrowser.SetCookieAsync(JsonHelper.SerializeObject(cookieLst), buyer.wpf_browser.GetCookieManager(null));
|
|
t.Wait();
|
|
|
|
buyer.wpf_browser.Load("https://mobile.yangkeduo.com/personal.html");
|
|
Thread.Sleep(Randomx.GetId(2000, 3000));
|
|
|
|
string readBuyer = "";
|
|
int top = 0;
|
|
int times = 0;
|
|
|
|
#region 售后
|
|
if (1 == 1)
|
|
{
|
|
readBuyer = buyer.buyer_id;
|
|
currentReadBuyer = buyer.buyer_id;
|
|
buyer.wpf_browser.Load("https://mobile.yangkeduo.com/complaint_list.html?refer_page_name=personal&refer_page_sn=10001&tab=all");
|
|
Thread.Sleep(Randomx.GetId(2000, 3000));
|
|
|
|
Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = buyer.buyer_nick + " 售后读取中"; }));
|
|
BindBuyer(buyer, "正在读取售后");
|
|
|
|
top = 0;
|
|
times = 0;
|
|
lastCefReadOrderTime = DateTime.Now;
|
|
while (currentReadBuyer == readBuyer)
|
|
{
|
|
if (tokenSource.IsCancellationRequested)
|
|
{
|
|
BindBuyer(buyer, "已取消读取");
|
|
break;
|
|
}
|
|
|
|
if (lastCefReadOrderTime < DateTime.Now.AddSeconds(-30))
|
|
{
|
|
PddMobileLoginForm.CheckBuyerLogin(new List<BuyerLoginInfo>() { buyer });
|
|
if (buyer.status != "在线")
|
|
{
|
|
BindBuyer(buyer, "店铺掉线");
|
|
break;
|
|
}
|
|
BindBuyer(buyer, "停滞时间超过30秒,跳过");
|
|
break;
|
|
}
|
|
|
|
Dispatcher.Invoke(new Action(() => { Panel.SetZIndex(buyer.wpf_browser, maxZIndex++); }));
|
|
|
|
top += Randomx.GetId(450, 600);
|
|
Thread.Sleep(Randomx.GetId(100, 300));
|
|
|
|
var jsStr = @"window.scroll({
|
|
top: document.body.scrollHeight,
|
|
left: 0,
|
|
behavior: 'smooth' // 可选,使滚动平滑
|
|
});";
|
|
jsStr = @"window.scroll({
|
|
top: " + top + @",
|
|
left: 0,
|
|
behavior: 'smooth' // 可选,使滚动平滑
|
|
});";
|
|
//var t1 = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr);
|
|
//t1.Wait(1000);
|
|
var client = buyer.wpf_browser.GetDevToolsClient();
|
|
if (client != null)
|
|
{
|
|
var result = client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
|
|
result.Wait(5000);
|
|
}
|
|
}
|
|
if (tokenSource.IsCancellationRequested)
|
|
{
|
|
BindBuyer(buyer, "已取消读取");
|
|
break;
|
|
}
|
|
Thread.Sleep(Randomx.GetId(2000, 3000));
|
|
}
|
|
#endregion
|
|
|
|
// 待发货
|
|
readBuyer = buyer.buyer_id;
|
|
currentReadBuyer = buyer.buyer_id;
|
|
buyer.wpf_browser.Load("https://mobile.yangkeduo.com/orders.html?type=2");
|
|
Thread.Sleep(Randomx.GetId(2000, 3000));
|
|
|
|
Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = buyer.buyer_nick + " 待发货读取中"; }));
|
|
BindBuyer(buyer, "正在读取待发货");
|
|
|
|
top = 0;
|
|
lastCefReadOrderTime = DateTime.Now;
|
|
while (currentReadBuyer == readBuyer)
|
|
{
|
|
if (tokenSource.IsCancellationRequested)
|
|
{
|
|
BindBuyer(buyer, "已取消读取");
|
|
break;
|
|
}
|
|
|
|
if (lastCefReadOrderTime < DateTime.Now.AddSeconds(-30))
|
|
{
|
|
PddMobileLoginForm.CheckBuyerLogin(new List<BuyerLoginInfo>() { buyer });
|
|
if (buyer.status != "在线")
|
|
{
|
|
BindBuyer(buyer, "店铺掉线");
|
|
break;
|
|
}
|
|
BindBuyer(buyer, "停滞时间超过30秒,跳过");
|
|
break;
|
|
}
|
|
|
|
if (times % 100 == 0)
|
|
{
|
|
PddMobileLoginForm.CheckBuyerLogin(new List<BuyerLoginInfo>() { buyer });
|
|
}
|
|
if (buyer.status != "在线")
|
|
break;
|
|
times++;
|
|
|
|
Dispatcher.Invoke(new Action(() => { Panel.SetZIndex(buyer.wpf_browser, maxZIndex++); }));
|
|
|
|
top += Randomx.GetId(450, 600);
|
|
Thread.Sleep(Randomx.GetId(100, 300));
|
|
|
|
var jsStr = @"window.scroll({
|
|
top: document.body.scrollHeight,
|
|
left: 0,
|
|
behavior: 'smooth' // 可选,使滚动平滑
|
|
});";
|
|
jsStr = @"window.scroll({
|
|
top: " + top + @",
|
|
left: 0,
|
|
behavior: 'smooth' // 可选,使滚动平滑
|
|
});";
|
|
//var t1 = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr);
|
|
//t1.Wait(1000);
|
|
var client = buyer.wpf_browser.GetDevToolsClient();
|
|
if (client != null)
|
|
{
|
|
var result = client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
|
|
result.Wait(5000);
|
|
}
|
|
}
|
|
if (tokenSource.IsCancellationRequested)
|
|
{
|
|
BindBuyer(buyer, "已取消读取");
|
|
break;
|
|
}
|
|
Thread.Sleep(Randomx.GetId(2000, 3000));
|
|
|
|
Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = buyer.buyer_nick + " 已发货读取中"; }));
|
|
BindBuyer(buyer, "正在读取已发货");
|
|
|
|
// 已发货
|
|
readBuyer = buyer.buyer_id;
|
|
currentReadBuyer = buyer.buyer_id;
|
|
buyer.wpf_browser.Load("https://mobile.yangkeduo.com/orders.html?type=3");
|
|
Thread.Sleep(Randomx.GetId(2000, 3000));
|
|
|
|
top = 0;
|
|
lastCefReadOrderTime = DateTime.Now;
|
|
while (currentReadBuyer == readBuyer)
|
|
{
|
|
if (tokenSource.IsCancellationRequested)
|
|
{
|
|
BindBuyer(buyer, "已取消读取");
|
|
break;
|
|
}
|
|
|
|
if (lastCefReadOrderTime < DateTime.Now.AddSeconds(-30))
|
|
{
|
|
PddMobileLoginForm.CheckBuyerLogin(new List<BuyerLoginInfo>() { buyer });
|
|
if (buyer.status != "在线")
|
|
{
|
|
BindBuyer(buyer, "店铺掉线");
|
|
break;
|
|
}
|
|
BindBuyer(buyer, "停滞时间超过30秒,跳过");
|
|
break;
|
|
}
|
|
|
|
Dispatcher.Invoke(new Action(() => { Panel.SetZIndex(buyer.wpf_browser, maxZIndex++); }));
|
|
|
|
top += Randomx.GetId(450, 600);
|
|
Thread.Sleep(Randomx.GetId(100, 300));
|
|
|
|
var jsStr = @"window.scroll({
|
|
top: document.body.scrollHeight,
|
|
left: 0,
|
|
behavior: 'smooth' // 可选,使滚动平滑
|
|
});";
|
|
jsStr = @"window.scroll({
|
|
top: " + top + @",
|
|
left: 0,
|
|
behavior: 'smooth' // 可选,使滚动平滑
|
|
});";
|
|
//var t1 = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr);
|
|
//t1.Wait(1000);
|
|
var client = buyer.wpf_browser.GetDevToolsClient();
|
|
if (client != null)
|
|
{
|
|
var result = client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
|
|
result.Wait(5000);
|
|
}
|
|
}
|
|
//Invoke(new Action(() =>
|
|
//{
|
|
// if (row.Cells["colMessage"].Value.ParseToString().StartsWith("正在读取"))
|
|
// BindBuyer(buyer, " ");
|
|
//}));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
}
|
|
Thread.Sleep(Randomx.GetId(6000, 8000));
|
|
}
|
|
isReadBuyerOrder = false;
|
|
|
|
Dispatcher.Invoke(new Action(() => { MainWindow.Instance.Title = "订单读取已结束,等待下次读取"; }));
|
|
}, cancellationTokenSource.Token);
|
|
}
|
|
|
|
private void BindBuyer(BuyerLoginInfo buyer, string msg = "", List<string> selectIds = null)
|
|
{
|
|
}
|
|
|
|
private void btnSendBuyerOrder_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (sender is Button btn)
|
|
{
|
|
if (btn.DataContext is PddBuyerOrderLiteInfo buyerOrder)
|
|
{
|
|
btn.IsEnabled = false;
|
|
Task.Run(() =>
|
|
{
|
|
var out_order_nos = buyerOrder.order_sn;
|
|
var transitOrderList = GetOrderTransitWarehouseInfo(out_order_nos);
|
|
|
|
var order_ids = string.Join(",", transitOrderList.Select(ts => ts.order_no));
|
|
var orders = GetOrderInfo(order_ids);
|
|
foreach (var order in orders)
|
|
{
|
|
foreach (var orderItem in order.orderItems)
|
|
{
|
|
// 中转仓订单
|
|
if (orderItem.ItemOrder.orderItems.Count > 1)
|
|
orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id && t.order_sku_id == orderItem.sku_id));
|
|
else
|
|
orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id));
|
|
}
|
|
}
|
|
var refunds = GetOrderRefundInfo(order_ids);
|
|
|
|
// 查找店铺订单并更新店铺订单状态
|
|
//var ShopOrder = GlobalConfig.lstOrder.FirstOrDefault(o1 => o1.orderItems.Any(i1 => i1.ItemTransitOrders.Any(t1 => t1.out_order_no == buyerOrder.order_sn)));
|
|
//var ShopOrder = orders.FirstOrDefault(o1 => o1.orderItems.Any(i1 => i1.ItemTransitOrders.Any(t1 => t1.out_order_no == buyerOrder.order_sn)));
|
|
//if (ShopOrder != null)
|
|
var transit_item = transitOrderList.FirstOrDefault(t1 => t1.out_order_no == buyerOrder.order_sn);
|
|
if (transit_item != null)
|
|
{
|
|
var shopOrder = orders.FirstOrDefault(o => o.order_id == transit_item.order_no);
|
|
var order_item = shopOrder.orderItems.FirstOrDefault(oi => oi.ItemTransitOrders.Any(t1 => t1.out_order_no == buyerOrder.order_sn));
|
|
var refund_item = refunds.FirstOrDefault(ri => ri.order_id == order_item.order_id) ?? order_item?.ItemRefund;
|
|
|
|
UpdateOrderStatus(buyerOrder, order_item, refund_item, transit_item);
|
|
}
|
|
|
|
//SendOrderE57(order);
|
|
SendTransitOrderE57(buyerOrder, true);
|
|
|
|
Dispatcher.Invoke(new Action(() => {
|
|
btn.IsEnabled = true;
|
|
}));
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
public void SendTransitOrderE57(PddBuyerOrderLiteInfo order, bool resetSendStatus = false)
|
|
{
|
|
if (order == null)
|
|
return;
|
|
//if (resetSendStatus)
|
|
// order.sendStatus = "";
|
|
NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite);
|
|
|
|
// 仓库处理中
|
|
if (order.sendStatus.ParseToString().Contains("仓库处理中"))
|
|
{
|
|
// 仓库处理中超过10分钟认为已处理完成,否则跳过。
|
|
if (order.TransitCreateTime.AddMinutes(10) < DateTime.Now)
|
|
{
|
|
order.sendStatus = order.sendStatus.Replace("仓库处理中", "").Trim();
|
|
}
|
|
else
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
// "已取号(更正)", 已取号, 提前取号, 取号失败
|
|
// 正在处理取号、已取号(包括提前取号更正的订单)、有售后或者没有中转仓(非中转系统订单)的订单,不发送
|
|
if (order.sendStatus == "已取号" || order.sendStatus == "已取号(更正)" ||
|
|
order.sendStatus.ParseToString().Contains("已作废") || order.sendStatus.ParseToString().Contains("售后") ||
|
|
order.TransitWarehouseIdStr.IsNullOrEmpty())
|
|
{
|
|
return;
|
|
}
|
|
|
|
// 物流单号为空,先判断是否需要提前取号,无需提前取号则直接返回
|
|
if (order.outExpressCompanyCode.IsNullOrEmpty() || order.tracking_number.IsNullOrEmpty())
|
|
{
|
|
// 如果是隔天订单,拍单20分钟后立即提前取号
|
|
if (!order.sendStatus.Contains("提前取号") && order.TransitCreateTime != DateTime.MinValue &&
|
|
DateTime.Now.Date > order.WxOrderCreateTime.Date && DateTime.Now > order.TransitCreateTime.AddMinutes(20))
|
|
{
|
|
JObject data = new JObject();
|
|
data["outOrderNo"] = order.order_sn;
|
|
data["warehouseCode"] = order.TransitWarehouseIdStr; //transit.TransId; // 中转仓仓库对应编码
|
|
data["platform"] = "WEISHOP";
|
|
var getVirtualTicketUrl = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/order/virtual/create";
|
|
var getVirtualTicketDataStr = JsonHelper.SerializeObject(data);
|
|
|
|
var getVirtualTicketRst = HttpResponseWXBLL.e57PostResponse(getVirtualTicketUrl, getVirtualTicketDataStr, "");
|
|
if (!getVirtualTicketRst.ParseToString().Contains("<code>200</code>") && !getVirtualTicketRst.ParseToString().Contains("<code>0</code>"))
|
|
{
|
|
string msg = "";
|
|
string code = "";
|
|
try
|
|
{
|
|
System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
|
|
xmlDoc.LoadXml(getVirtualTicketRst);
|
|
code = xmlDoc["AjaxResult"]["code"].InnerText;
|
|
msg = xmlDoc["AjaxResult"]["msg"].InnerText;
|
|
}
|
|
catch
|
|
{
|
|
msg = getVirtualTicketRst.ParseToString();
|
|
}
|
|
//BaseMsgForm.ShowError("拍单信息保存成功,接收到erp服务端传递的错误消息:" + msg, "订单提前取号失败");
|
|
order.sendStatus = "提前取号失败,服务端返回 " + msg;
|
|
}
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
//// 如果物流不一致,提交物流信息 临时补救
|
|
//if (order.Express1CompanyStr != order.outExpressCompanyCode || order.Express1WaybillStr != order.tracking_number)
|
|
//{
|
|
// //var url3 = BaseClass.Build29WxObjString("order/wx_update_erp_order_express");
|
|
// //var data3 = UserLogin.GetSignaturex();
|
|
// //data3 += "&out_order_no=" + order.order_sn;
|
|
// //data3 += "&express_1_company=" + order.outExpressCompanyCode; // 物流公司编号
|
|
// //data3 += "&express_1_waybil=" + order.tracking_number; // 物流单号
|
|
// //var html3 = GetHtml.PostUtf8(url3, data3);
|
|
// //if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
|
|
// // html3 = GetHtml.PostUtf8(url3, data3);
|
|
// //if (html3.Contains("\"code\":200"))
|
|
// //{
|
|
// // order.sendStatus = "已提交";
|
|
// //}
|
|
//}
|
|
// 直接取号
|
|
if (order.sendStatus != "提前取号" && order.sendStatus != "提前取号(旧订单)")
|
|
{
|
|
// 立即取号
|
|
string url2 = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/transfer-warehouse/dispatch";
|
|
var data = new JObject();
|
|
data["outAmount"] = order.order_amount.ParseToString();
|
|
data["outAccount"] = order.buyerName;
|
|
data["outOrderNo"] = order.order_sn;
|
|
data["outExpressCompany"] = order.outExpressCompanyCode; // 物流公司编号
|
|
data["outExpressNo"] = order.tracking_number; // 物流编号
|
|
data["warehouseCode"] = order.TransitWarehouseIdStr; // 中转仓ID
|
|
data["platform"] = "WEISHOP";
|
|
var dataStr2 = JsonHelper.SerializeObject(data);
|
|
var dispatchRst = HttpResponseWXBLL.e57PostResponse(url2, dataStr2, "");
|
|
//<AjaxResult><msg>订单已成功调用鸿浩仓库接口发货</msg><code>200</code></AjaxResult>
|
|
|
|
if (dispatchRst.Contains("<code>0</code>") || dispatchRst.Contains("<code>200</code>"))
|
|
{
|
|
var msg = BaseRegex.GetStringXml(ref dispatchRst, "msg");
|
|
order.sendStatus = "取号成功";
|
|
var shopOrder = GlobalConfig.lstOrder.FirstOrDefault(o => o.orderItems.Any(oi => oi.ItemTransitOrders.Any(t => t.out_order_no == order.order_sn)));
|
|
if (shopOrder != null)
|
|
{
|
|
var orderItem = shopOrder.orderItems.FirstOrDefault(oi => oi.ItemTransitOrders.Any(t => t.out_order_no == order.order_sn));
|
|
if (orderItem != null)
|
|
{
|
|
var transit = orderItem.ItemTransitOrders.FirstOrDefault(t => t.out_order_no == order.order_sn);
|
|
if (transit != null)
|
|
{
|
|
if (transit.transfer_warehouse_status == 0)
|
|
transit.transfer_warehouse_status = 3;
|
|
//transit.pre_allocated_order_no = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
order.sendStatus = "直接取号失败,服务端返回 " + BaseRegex.GetStringXml(ref dispatchRst, "msg");
|
|
}
|
|
}
|
|
// 修改提前取号
|
|
else if (order.sendStatus == "提前取号" || order.sendStatus == "提前取号(旧订单)")
|
|
{
|
|
if (order.TransitPickupTime.AddHours(23) > DateTime.Now)
|
|
//if (order.TransitCreateTime.AddHours(23) > DateTime.Now)
|
|
{
|
|
order.sendStatus = "提前取号流程进行中";
|
|
return;
|
|
}
|
|
|
|
string url2 = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/update-upstream-waybill";
|
|
var data = new JObject();
|
|
//data["outAmount"] = order.order_amount.ParseToString();
|
|
//data["outAccount"] = order.buyerName;
|
|
data["outOrderNo"] = order.order_sn;
|
|
data["outExpressCompany"] = order.outExpressCompanyCode; // 物流公司编号
|
|
data["outExpressNo"] = order.tracking_number;
|
|
data["platform"] = "WEISHOP";
|
|
data["orderCode"] = order.order_sn; // 中转仓订单唯一标识码 = 外采订单号
|
|
var dataStr2 = JsonHelper.SerializeObject(data);
|
|
var dispatchRst = HttpResponseWXBLL.e57PostResponse(url2, dataStr2, "");
|
|
|
|
if (dispatchRst.Contains("<code>0</code>") || dispatchRst.Contains("<code>200</code>"))
|
|
{
|
|
var msg = BaseRegex.GetStringXml(ref dispatchRst, "msg");
|
|
if (order.OrderTime < new DateTime(2026, 6, 29) /*order.sendStatus == "提前取号(旧订单)"*/)
|
|
{
|
|
var url3 = BaseClass.Build29WxObjString("order/wx_update_erp_allocated_order_no");
|
|
var data3 = UserLogin.GetSignaturex();
|
|
data3 += "&out_order_no=" + order.order_sn;
|
|
data3 += "&pre_allocated_order_no=" + 3;
|
|
var html3 = GetHtml.PostUtf8(url3, data3);
|
|
if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
|
|
html3 = GetHtml.PostUtf8(url3, data3);
|
|
}
|
|
|
|
order.sendStatus = "修改提前取号成功";
|
|
var shopOrder = GlobalConfig.lstOrder.FirstOrDefault(o => o.orderItems.Any(oi => oi.ItemTransitOrders.Any(t => t.out_order_no == order.order_sn)));
|
|
if (shopOrder != null)
|
|
{
|
|
var orderItem = shopOrder.orderItems.FirstOrDefault(oi => oi.ItemTransitOrders.Any(t => t.out_order_no == order.order_sn));
|
|
if (orderItem != null)
|
|
{
|
|
var transit = orderItem.ItemTransitOrders.FirstOrDefault(t => t.out_order_no == order.order_sn);
|
|
if (transit != null)
|
|
transit.pre_allocated_order_no = 1;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
order.sendStatus = "修改提前取号失败,服务端返回 " + BaseRegex.GetStringXml(ref dispatchRst, "msg");
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 通过服务端批量读取微信售后并触发拼多多售后或显示提示供买手手动退货
|
|
/// </summary>
|
|
public void MakeWxToPddAfterSales()
|
|
{
|
|
Task.Run(() =>
|
|
{
|
|
while (isReadBuyerOrder)
|
|
{
|
|
Thread.Sleep(500);
|
|
}
|
|
|
|
foreach (var buyer in GlobalConfig.PDDBuyerLoginList)
|
|
{
|
|
//postman request POST 'https://po.e57.cn/prod-api/api/oms-api/external_procurement/hasAfterSsale' \
|
|
//--header 'Content-Type: application/json' \
|
|
//--body '{ "platform": "WEISHOP", "startTime": 1774763836, "endTime": "1776050614" , "userAccount": "闲鱼会开车的鱼2343"}'
|
|
JObject body = new JObject();
|
|
body["platform"] = "WEISHOP";
|
|
body["startTime"] = BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddDays(-7));
|
|
body["endTime"] = BaseClass.DateTimeToTimestampSeconds(DateTime.Now);
|
|
body["userAccount"] = buyer.buyer_name;
|
|
string url = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/hasAfterSsale";
|
|
var getE57AfterSaleRst = HttpResponseWXBLL.e57PostResponse(url, JsonHelper.SerializeObject(body), "");
|
|
if (getE57AfterSaleRst.ParseToString().Contains("<msg>success</msg>"))
|
|
{
|
|
try
|
|
{
|
|
var rstData = getE57AfterSaleRst.Substring(0, getE57AfterSaleRst.IndexOf("</data></AjaxResult>")).Substring(getE57AfterSaleRst.IndexOf("<data>") + "<data>".Length);
|
|
|
|
List<string> rstStrLst = rstData.Split(new string[] { "},{" }, StringSplitOptions.RemoveEmptyEntries).ToList();
|
|
foreach (var rstStr in rstStrLst)
|
|
{
|
|
var rstStrTmp = rstStr;
|
|
var outOrderNo = BaseRegex.GetStringJson(ref rstStrTmp, "outOrderNo");
|
|
if (outOrderNo.IsNullOrEmpty())
|
|
continue;
|
|
var afterSaleId = BaseRegex.GetStringJson(ref rstStrTmp, "afterSaleId");
|
|
var order = lstPddBuyerOrderInfoLite.FirstOrDefault(o => o.order_sn == outOrderNo);
|
|
if (order == null)
|
|
continue;
|
|
|
|
order.wxRefundStatus = order.order_status_prompt.Contains("待发货") ? "待退款" : "待退货";
|
|
NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite);
|
|
//Dispatcher.Invoke(new Action(() =>
|
|
//{
|
|
// ShowOrder(order);
|
|
//}));
|
|
//if (chkAutoAfterSale.IsChecked == true)
|
|
//{
|
|
// PddAutoAfterSale(order);
|
|
//}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
/// <summary>
|
|
/// 处理一条售后,未发货的直接售后
|
|
/// </summary>
|
|
/// <param name="order"></param>
|
|
/// <returns></returns>
|
|
public string PddAutoAfterSale(PddBuyerOrderLiteInfo order)
|
|
{
|
|
//if (isReadOrder)
|
|
//{
|
|
// BaseMsgForm.ShowError("正再读取订单,请稍候");
|
|
// return;
|
|
//}
|
|
//// 订单详情页
|
|
////https://mobile.yangkeduo.com/order.html?order_sn=260417-318525949581688
|
|
//// 退货详情页
|
|
////https://mobile.yangkeduo.com/complaint.html?order_sn=260417-357103060621688&after_sales_reason=0&after_sales_type=1&after_sales_code=1001
|
|
|
|
if (order.ShopOrderIdStr == "3737553300321619456")
|
|
{
|
|
|
|
}
|
|
|
|
if (!order.order_status_prompt.Contains("待发货"))
|
|
{
|
|
// 如果中转单没记录买手售后,写入买手售后信息
|
|
if (order.TransitBuyerOrderRefundStatus.IsNullOrEmpty())
|
|
{
|
|
var refundRst = SendTransitAfterSaleE57(order, "买手已发货,需手动申请售后");
|
|
}
|
|
return "{\"success\":false,\"msg\":\"仅未发货单可以自动退货\"}";
|
|
}
|
|
|
|
var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == order.buyerId);
|
|
var afterSaleRst = SimPddAfterSale(buyer, order);
|
|
if (afterSaleRst.Contains("\"after_sales_status\":1") || afterSaleRst.Contains("该订单已全额退款"))
|
|
{
|
|
// 保存退款成功状态
|
|
order.order_status_prompt = "退款成功";
|
|
// 中转仓订单买手号售后信息 存到服务端
|
|
var refundRst = SendTransitAfterSaleE57(order);
|
|
if (refundRst.Contains("<code>0</code>") || refundRst.Contains("<code>200</code>"))
|
|
{
|
|
order.sendStatus = "退款成功 买手退款信息更新成功";
|
|
}
|
|
else
|
|
{
|
|
var msg = BaseRegex.GetStringXml(ref refundRst, "msg");
|
|
order.sendStatus = "退款成功 买手退款信息更新失败,服务端返回 " + msg;
|
|
}
|
|
NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite);
|
|
return "{\"success\":true,\"msg\":\"操作成功\"}";
|
|
}
|
|
else
|
|
{
|
|
var error_msg = BaseRegex.GetStringJsonByRegs(ref afterSaleRst, afterSaleRst, "msg", "error_msg");
|
|
if (string.IsNullOrEmpty(error_msg))
|
|
error_msg = afterSaleRst;
|
|
return "{\"success\":false,\"msg\":\"" + error_msg + "\"}";
|
|
}
|
|
}
|
|
|
|
|
|
public static string SimPddAfterSale(BuyerLoginInfo buyer, PddBuyerOrderLiteInfo order)
|
|
{
|
|
var rst = YkdBuyerOrder.GetInitAfterSale(buyer, order.order_sn);
|
|
//<script>window.rawData={"store":{"errorRedirectUrl":"\u002F","abMap":{"allowPerItemAs":false,"allowPercentAs":true,"isSpringOn":false,"applyPlatformJoinText":false,"newResendEntrance":true,"newExchangeEntrance":true,"shippingTicketOcr":true,"applyAfterSalesChoose":true,"inSpringFestival":false,"openSpringFestival":false,"shippingTipsView":true,"expressRejectShowContact":true,"newApplyPage":true,"newApplyDetailPage":false,"newFeeDetailGray":true,"qualityReasonNoticeProof":true,"newQualityReasonNoticeProof":true,"freeNoCouponOrder":false,"userShippingStatusReject":false,"applyAmountDisplayAsCompensateAmount":false,"compensateAmountChoosePopUp":false,"maintainDescOptimize":true},"goodsInfo":{"skuId":1884196560652,"catId1":6398,"goodsId":936888997232,"goodsName":"【三只松鼠新疆灰枣】免洗红枣150g新疆特产枣子干货休闲零食","goodsPrice":1350,"goodsNumber":1,"goodsSpec":"新疆灰枣150g*5袋","goodsType":1,"goodsImage":"https:\u002F\u002Fimg.pddpic.com\u002Fmms-goods-image\u002F2026-04-11\u002F336d9a71-d957-4121-a84b-f70f084226c9.jpeg"},"reasonData":{"map1":[{"type":220003,"desc":"重量\u002F数量\u002F大小等描述不符","subDesc":null,"url":"https:\u002F\u002Ffunimg.pddpic.com\u002F200702_Food_and_Health_Category\u002F21_Weight_quantity_size_mismatch.png","reasonType":2200},{"type":220005,"desc":"图片\u002F品种\u002F口味\u002F标签等描述不符","subDesc":null,"url":"https:\u002F\u002Ffunimg.pddpic.com\u002F200702_Food_and_Health_Category\u002F23_Picture_mismatch.png","reasonType":2200},{"type":220001,"desc":"包装\u002F商品破损","subDesc":null,"url":"https:\u002F\u002Ffunimg.pddpic.com\u002F200702_Food_and_Health_Category\u002F28_Damaged_packaging9.png","reasonType":2100},{"type":220004,"desc":"少件\u002F漏发","subDesc":null,"url":"https:\u002F\u002Ffunimg.pddpic.com\u002F20_Quantity_mismatch.png","reasonType":2400},{"type":294,"desc":"商品变质\u002F发霉\u002F有异物","subDesc":null,"url":"https:\u002F\u002Ffunimg.pddpic.com\u002F200702_Food_and_Health_Category\u002F25_Spoiled_food.png","reasonType":2100},{"type":292,"desc":"生产日期\u002F保质期与商品描述不符","subDesc":null,"url":"https:\u002F\u002Ffunimg.pddpic.com\u002F22_Expired_food.png","reasonType":2200},{"type":81,"desc":"质量问题","subDesc":null,"url":null,"reasonType":2100},{"type":83,"desc":"商家发错货","subDesc":null,"url":"https:\u002F\u002Ffunimg.pddpic.com\u002F30_Inconsistent_product.png","reasonType":2200},{"type":262,"desc":"空包裹","subDesc":null,"url":null,"reasonType":2400},{"type":86,"desc":"假冒品牌","subDesc":null,"url":null,"reasonType":2500},{"type":95,"desc":"其他原因","subDesc":null,"url":null,"reasonType":1200}],"map2":[{"type":197,"desc":"不想要了","subDesc":null,"url":null,"reasonType":1100},{"type":194,"desc":"快递无跟踪记录","subDesc":null,"url":null,"reasonType":2300},{"type":4008,"desc":"发货慢\u002F未按承诺时间发货","subDesc":null,"url":null,"reasonType":2300},{"type":220001,"desc":"包装\u002F商品破损","subDesc":null,"url":null,"reasonType":2100},{"type":220002,"desc":"未收到货\u002F签收地址错误","subDesc":null,"url":null,"reasonType":2300},{"type":207,"desc":"其他原因","subDesc":null,"url":null,"reasonType":1200}],"map3":[{"type":88,"desc":"不想要了","subDesc":null,"url":null,"reasonType":1100},{"type":220003,"desc":"重量\u002F数量\u002F大小等描述不符","subDesc":null,"url":"https:\u002F\u002Ffunimg.pddpic.com\u002F200702_Food_and_Health_Category\u002F21_Weight_quantity_size_mismatch.png","reasonType":2200},{"type":220005,"desc":"图片\u002F品种\u002F口味\u002F标签等描述不符","subDesc":null,"url":"https:\u002F\u002Ffunimg.pddpic.com\u002F200702_Food_and_Health_Category\u002F23_Picture_mismatch.png","reasonType":2200},{"type":220001,"desc":"包装\u002F商品破损","subDesc":null,"url":"https:\u002F\u002Ffunimg.pddpic.com\u002F200702_Food_and_Health_Category\u002F28_Damaged_packaging9.png","reasonType":2100},{"type":220004,"desc":"少件\u002F漏发","subDesc":null,"url":"https:\u002F\u002Ffunimg.pddpic.com\u002F20_Quantity_mismatch.png","reasonType":2400},{"type":294,"desc":"商品变质\u002F发霉\u002F有异物","subDesc":null,"url":"https:\u002F\u002Ffunimg.pddpic.com\u002F200702_Food_and_Health_Category\u002F25_Spoiled_food.png","reasonType":2100},{"type":292,"desc":"生产日期\u002F保质期与商品描述不符","subDesc":null,"url":"https:\u002F\u002Ffunimg.pddpic.com\u002F22_Expired_food.png","reasonType":2200},{"type":81,"desc":"质量问题","subDesc":null,"url":null,"reasonType":2100},{"type":83,"desc":"商家发错货","subDesc":null,"url":"https:\u002F\u002Ffunimg.pddpic.com\u002F30_Inconsistent_product.png","reasonType":2200},{"type":86,"desc":"假冒品牌","subDesc":null,"url":null,"reasonType":2500},{"type":95,"desc":"其他原因","subDesc":null,"url":null,"reasonType":1200}],"map4":[{"type":66,"desc":"不想要了","subDesc":null,"url":null,"reasonType":1100},{"type":289,"desc":"协商一致退款","subDesc":null,"url":null,"reasonType":1200},{"type":290,"desc":"缺货","subDesc":null,"url":null,"reasonType":2300},{"type":4000,"desc":"发货慢","subDesc":null,"url":null,"reasonType":2300},{"type":4003,"desc":"地址\u002F信息填写错误","subDesc":null,"url":null,"reasonType":1100},{"type":79,"desc":"其他原因","subDesc":null,"url":null,"reasonType":1200}],"map5":[{"type":502,"desc":"材质、面料与商品描述不符","subDesc":null,"url":null,"reasonType":2200},{"type":503,"desc":"大小尺寸与商品描述不符","subDesc":null,"url":null,"reasonType":2200},{"type":504,"desc":"颜色、款式、图案与描述不符","subDesc":null,"url":null,"reasonType":2200},{"type":505,"desc":"质量问题","subDesc":null,"url":null,"reasonType":2100},{"type":90,"desc":"收到商品少件(含少配件)","subDesc":null,"url":null,"reasonType":2400},{"type":91,"desc":"商品破损或污渍","subDesc":null,"url":null,"reasonType":2100},{"type":507,"desc":"商家发错货","subDesc":null,"url":null,"reasonType":2200},{"type":508,"desc":"其他原因","subDesc":null,"url":null,"reasonType":1200}],"map6":[{"type":901,"desc":"少发、漏发","subDesc":null,"url":null,"reasonType":2400},{"type":902,"desc":"配件破损","subDesc":null,"url":null,"reasonType":2100},{"type":903,"desc":"主商品破损","subDesc":null,"url":null,"reasonType":2100},{"type":196,"desc":"快递一直未送达","subDesc":null,"url":null,"reasonType":2300}],"map7":[{"type":401,"desc":"配件故障","subDesc":null,"url":null,"reasonType":2100},{"type":402,"desc":"性能故障","subDesc":null,"url":null,"reasonType":2100},{"type":403,"desc":"屏幕故障","subDesc":null,"url":null,"reasonType":2100},{"type":404,"desc":"制冷系统故障","subDesc":null,"url":null,"reasonType":2100},{"type":405,"desc":"其他原因","subDesc":null,"url":null,"reasonType":1200}],"map8":[{"type":97,"desc":"质量问题","subDesc":null,"url":null,"reasonType":2100}]},"selectGoodsMetricInfo":{"page_el_sn":"9415312"},"forwardLogisticsVo":{"title":"商品正在运输中","content":"圆通快递: 您的快件离开【芜湖转运中心】,已发往【长春转运中心】。预计【04月18日】到达【长春市】,因运输距离较远,预计将在【18日晚上】为您更新快件状态,请您放心!","jumpExpressUrl":"\u002Fgoods_express.html?shipping_id=85&thumb_url=https:\u002F\u002Fimg.pddpic.com\u002Fmms-goods-image\u002F2026-04-11\u002F336d9a71-d957-4121-a84b-f70f084226c9.jpeg&hide_address=1&tracking_number=YT8859108440293&goods_id=936888997232&order_sn=260415-355310016032464"},"leftChar":170,"serviceTypeInfo":[],"priceArr":[13.5,13.5,13.5],"autoImageUploader":false,"firstSelectParams":null,"isPre":false,"isAllImageReady":true,"triggerAction":2,"finalCreateParam":{},"preBlockedPopupList":[],"hitSupplyDesc":false,"isServerRendered":true,"isFinishInitLoading":true,"selectedFakeCodes":[],"priceArrInPanel":[],"hasShowMoneyInputPanelOnce":false,"hasChangeAsTypeInHuanhuo":false,"userReceiveInfo":{"userReceiveName":"王(66187","userReceivePhone":"13439731154","userReceiveProvince":15,"userReceiveProvinceName":"吉林省","userReceiveCity":211,"userReceiveCityName":"长春市","userReceiveDistrict":1774,"userReceiveDistrictName":"绿园区","userReceiveAddressId":59596218123,"userReceiveAddress":"城西镇聚富家园28栋","userReceiveAddressDetail":"\n 吉林省\n 长春市\n 绿园区\n 城西镇聚富家园28栋\n ","userReceiveAddressSnapshotId":"1000000051695684417"},"imageUrlList":[],"mediaUrlList":[],"isPreferPickup":true,"userSatisfaction":-1,"bookBatchDecision":{},"proposedShowGuideTips":false,"isShowCouponRulePop":false,"showCheckPopType":null,"afterCheckCallback":null,"popupWindowData":null,"preCheckLayer":null,"showBookBatchCheckPanel":false,"showMultipleSkuCheckPanel":false,"showReturnOrRefundPanel":false,"entryBoardBlockLayerData":null,"multipleSkuStatus":0,"curReturnIntention":-1,"isShowGoodsProblemPage":false,"userfullRefundReasonCode":0,"helpedFeedback":0,"solvedProblem":0,"handleMode":0,"applyPddJudgeDesc":null,"showAmountChoosePopUp":false,"floatingLayerDataMap":null,"hasShowFastAsPopOnce":false,"mustUploadProof":false,"hasSupplyReason":false,"showDescLessHover":false,"showNoProofReasonPop":false,"firstEnteringUpdateAstype":false,"canSupportReturnNumLogic":false,"orderModuleInfo":{"goodsName":"【三只松鼠新疆灰枣】免洗红枣150g新疆特产枣子干货休闲零食","spec":"新疆灰枣150g*5袋","thumbUrl":"https:\u002F\u002Fimg.pddpic.com\u002Fmms-goods-image\u002F2026-04-11\u002F336d9a71-d957-4121-a84b-f70f084226c9.jpeg","goodsNumber":1,"orderDetailUrl":"\u002Forder.html?page_from=702&order_sn=260415-355310016032464"},"selectedReturnGoodsNum":1,"mode":16,"orderSn":"260415-355310016032464","curVersion":0,"predictAmountTips":"","priceModifyArr":[],"afterSalesStatus":"","userPhone":"13439731154","afterSalesIds":[],"complaintReason":0,"complaintGoodProblem":null,"lastComplaintReason":0,"afterSalesTrigger":3,"afterSalesType":1,"afterSalesCode":1001,"subAfterSalesType":0,"exchangeAfterSalesType":0,"afterSalesTypePopUpMap":{},"shippingStatus":1,"tempUserShipStatus":0,"orderAmount":1350,"goodsAmount":1350,"shippingAmount":0,"returnCouponAmount":0,"complaintPrice":13.5,"complaintGoodsNumber":1,"complaintPercent":0,"complaintPartAsType":1,"goodsSkuInfo":{"isOnSale":true,"quantity":100,"imageUrl":"","thumbUrl":"https:\u002F\u002Fimg.pddpic.com\u002Fgaudit-image\u002F2026-04-11\u002F1d246236f884010908095da02c3a759a.jpeg","linkUrl":"goods.html?goods_id=936888997232&_oak_rcto=YWK-VzKCPlTWOOqfF_24n6zP10ePnWAlqiOmSz41CZfdbHO2Mjf7X5-V","skuList":[{"skuId":1884196560650,"goodsId":936888997232,"groupPrice":360,"quantity":159,"spec":"新疆灰枣150g*1袋","thumbUrl":"https:\u002F\u002Fimg.pddpic.com\u002Fmms-goods-image\u002F2026-04-11\u002F336d9a71-d957-4121-a84b-f70f084226c9.jpeg"},{"skuId":1884196560652,"goodsId":936888997232,"groupPrice":1350,"quantity":644,"spec":"新疆灰枣150g*5袋","thumbUrl":"https:\u002F\u002Fimg.pddpic.com\u002Fmms-goods-image\u002F2026-04-11\u002F336d9a71-d957-4121-a84b-f70f084226c9.jpeg"}],"mallId":166290398,"badGoodsType":null,"isShowBadCommonGoodsService":null,"afterSalesType":null,"exceptionInfo":"","defaultSkuId":""},"selectedSkuId":0,"selectedSkuInfo":{},"exchangeGoodsNumber":1,"complaintDesc":"","images":[],"showRightsModal":false,"showTicketsRefundAmountDescModal":false,"showRefundDescModal":false,"showRefundAmountDescModal":false,"joinSceneList":[],"reasonList":[],"showSceneSelect":false,"sceneCode":0,"reasonCode":0,"autoFocusJoinScene":false,"autoFocusJoinReason":false,"autoFocusASType":false,"autoFocusMoney":false,"autoFocusUserShip":false,"autoFocusReason":false,"autoFocusDescription":false,"autoFocusMobile":false,"autoFocusSpecificSituation":false,"entryApplyBtnList":[],"afterSalesRightsList":[],"reasonCodeMappingTips":"","hasExchangeFreight":false,"orderInsuranceDto":{"amount":0,"insuranceCombineType":1,"extraSubsidyType":0,"hasOrderInsurance":false,"monthMembershipStrengthenGray":false,"insuranceAmountYuan":0,"insuranceLabelNew":{"type":"solid-hollow","char":["享","退货包运费"]}},"goodsProblemInfo":null,"updateAfterSalesRightsSeed":1,"veriRefresh":false,"compensatePercentCouponAmount":0,"inputMoneyTimes":3,"activityRetrieveInfoList":[],"retrieveSummaryTitle":[],"refundLayerTitle":"","newMaxApplyAmount":1350,"applyMoneyVO":{"applyAmountInfo":{"applyAmount":1350,"maxApplyAmount":1350,"amountLocked":false},"blankAmountInfo":false,"blankAmountText":"请输入申请金额,最多13.5元","createAfterSalesInfo":{"refundAmount":1350,"returnCashCouponAmount":0},"mergePaymentOrderNote":"","metricInfo":{},"extension":{"payRemitDetail":"1"}},"isIllegalInput":false,"isQualityReason":false,"reasonLock":false,"joinRemindInfo":null,"initService":{},"submitService":{},"refundPollingConfig":[2000,300,900],"isComplaintVideoLongDuration":false,"originMode":64,"afterSalesId":"","proposedAfterSalesType":0,"webpEnable":true,"msgId":0,"joinPageSource":0,"isMiniProgramNewShop":false,"isNativePlatform":false,"curPlatform":"unknown","modifySource":"","isMiniProgramKTT":false,"isAddInvisibleChar":false,"isCsr":false,"appVersion":"","firstVisitAfterSalesType":1,"applyInfoReturnMark":true,"noPriceTips":false,"couponAmount":0,"couponReturnControlType":0,"remainFullBackCouponAmount":0,"remainMallFullBackCouponAmount":0,"couponType":0,"orderPayType":0,"couponDelayDisplayType":0,"retrieveCouponNum":0,"retrieveCouponAmount":0,"retrieveCashAmount":0,"refundAmount":0,"predictRetrievePayReductionAmount":0,"predictRetrieveInstallPayReductionAmount":0,"partakeRetrieveCashActivities":[],"retrieveCash":false,"retrieveCoupon":false,"isPartakeFullBack":false,"isPartakeMallFullBack":false,"isReturnCoupon":true,"couponEndTimeDisplay":"","payLater":false,"payLaterStatus":0,"refundDesc":"","automaticTicket":false,"pattern":0,"serviceCharge":0,"refundAmountRules":[],"refundAmountTitle":"","payReductionOrder":false,"compensateCouponInfo":{"maxCouponAmount":0,"couponTypeText":"","rulesDesc":"","couponExpireText":""},"mergePaymentOrderNote":"","orchardZeroYuanOrder":false,"fillPartAsVal":1,"returnableGoodsNum":1,"deliveryScheduleOrder":false,"isUserReceiveAddressLock":false,"showShippingStatusSelect":true,"mustProofInfo":[],"RemindInfo":[{"remindType":23,"applyRemindFilter":{"includeAfterSalesType":[1,2],"includeAfterSalesReason":[86,102]},"params":{"applyRemarkTips":"请详细描述您\u003Cspan style=\"color:#E02E24\"\u003E认为商品为假货品牌的具体理由 \u003C\u002Fspan\u003E,并提供相应凭证;有助于更好的帮您处理退款","specificSituation":[{"code":1,"text":"品牌标识不符","metricInfo":{"page_el_sn":"10155064"}},{"code":2,"text":"已鉴定是假货","metricInfo":{"page_el_sn":"10155065"}},{"code":3,"text":"商家承认售假","metricInfo":{"page_el_sn":"10155066"}},{"code":4,"text":"做工、质量与正品有明显差异","metricInfo":{"page_el_sn":"10155067"}}]}}],"remindInfoBelow":[{"remindType":10,"applyRemindFilter":{"includeAfterSalesType":[2]}},{"remindType":5,"applyRemindFilter":{"includeAfterSalesType":[1,2],"includeUserShippingStatus":[2],"includeAfterSalesReason":[66,79,88,95,104,111,197,4005]}}],"remindInfoAbove":[],"belowAfterSalesTypeRemindInfoList":[{"remindType":9,"applyRemindFilter":{"includeAfterSalesType":[3],"availableAfterSalesType":2}}],"remindInfoAboveRemark":[],"topBannerRemindInfoList":[],"aboveApplyButtonRemindInfoList":[],"bizType":0,"discountAmount":0,"serviceAmount":0,"sfExpressAmount":0,"provinceId":15,"cityId":211,"districtId":1774,"addressId":59596218123,"mallId":166290398,"receiveName":"王(66187","mobile":"13439731154","provinceName":"吉林省","cityName":"长春市","districtName":"绿园区","shippingAddress":"城西镇聚富家园28栋","addressSnapshotId":"1000000051695684417","refundableAmount":1350,"alreadyRefundAmount":0,"refundAmountLocked":false,"aliveAfterSales":false,"compensateType":999,"unSignSelectOption":true,"goodsType":1,"originComplaintPrice":13.5,"installFeeAmount":0,"canEditShipping":true,"isDeletedOrder":false,"isOutsideConsoOrder":false,"isCrossConsoOrder":false,"isKTTOrder":false,"isVegetableOrder":false,"kttSplitBillOrder":false,"paidOver2Days":false,"entryExtraButtonList":[],"showAppendContent":false,"payReductionAmount":0,"payReductionText":"信用卡分期立减"},"deliveryStore":{"errorRedirectUrl":"\u002F","lightImageLoaderViewID":"tracking-number-image-uploader","isAllImageReady":true,"canMergeTrackingNumber":false,"isServerRendered":true,"isFinishInitLoading":true,"currCurrency":null,"showEmptyInputErr":false,"rawShippingList":[],"imageInfoList":[],"shipAmountTips":"","showEqualMoneyPopUp":false,"showProofTips":false,"remarkShippingName":"","showRemarkShippingName":false,"showSelfProofPopup":false,"hasShowModifyDeliveryFeePop":false,"guidePutProofTextView":null,"contactSelectedValue":1,"paymentSelectedValue":1,"freightCollectSelectedValue":1,"showSearch":false,"complaintShippingName":"","complaintShippingLogo":"","complaintShippingId":0,"tipsDesc":"","complaintDeliverySn":"","checkedDeliverySn":"","complaintDeliveryFee":"","ocrDeliverySn":"","ocrShippingId":0,"isOcrFromDetail":false,"complaintDesc":"","leftChar":170,"ocrImgUrl":"","newOrcImg":"","ocrOriginImg":"","cachedOcrOriginImg":"","isMatchingCompany":false,"canAutoMatchCompany":true,"hasMatched":false,"isShowConfirmPage":false,"isShowExpressPhotoDemo":true,"isShowOcrProgressToast":false,"ocrProgressValue":0,"ocrProgressStep":300,"autoExpandCurrency":false,"autoFocusDeliveryCompany":false,"autoFocusDeliveryNo":false,"autoFocusDescription":false,"autoFocusDeliveryFee":false,"veriDeliveryRefresh":false,"initService":{},"deliveryService":{},"mode":64,"orderSn":"260415-355310016032464","afterSalesId":"","webpEnable":true,"autoOcr":false,"isNativePlatform":false}};</script>
|
|
var mobile = BaseRegex.GetStringJson(ref rst, "userReceivePhone");
|
|
var applyAmount = BaseRegex.GetIntJson(ref rst, "applyAmount");
|
|
var refundAmount = BaseRegex.GetIntJson(ref rst, "refundAmount");
|
|
var newMaxApplyAmount = BaseRegex.GetIntJson(ref rst, "newMaxApplyAmount");
|
|
var shippingStatus = BaseRegex.GetIntJson(ref rst, "shippingStatus");
|
|
if (shippingStatus == -1)
|
|
{
|
|
return "{\"success\":false,\"msg\":\"订单未付款\"}";
|
|
}
|
|
if (shippingStatus == 1 || !rst.Contains("\"shippingStatus\":0,") || !order.order_status_prompt.Contains("待发货"))
|
|
{
|
|
return "{\"success\":false,\"msg\":\"仅未发货单可以自动退货\"}";
|
|
}
|
|
|
|
if (applyAmount == 0) applyAmount = order.order_amount.ParseToInt();
|
|
if (refundAmount == 0) refundAmount = order.order_amount.ParseToInt();
|
|
if (newMaxApplyAmount == 0) newMaxApplyAmount = order.order_amount.ParseToInt();
|
|
if (string.IsNullOrEmpty(mobile))
|
|
{
|
|
return "{\"success\":false,\"msg\":\"退货信息获取失败,请检查买手是否掉线\"}";
|
|
}
|
|
Thread.Sleep(Randomx.GetId(1000, 2000));
|
|
var afterSaleRst = YkdBuyerOrder.SetOrderAfterSale(buyer, mobile, order.order_sn, applyAmount, refundAmount, newMaxApplyAmount);
|
|
return afterSaleRst;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 将处理的或读取到更新的售后返回服务端接口
|
|
/// </summary>
|
|
/// <param name="afterSale"></param>
|
|
public string SendTransitAfterSaleE57(PddBuyerOrderLiteInfo order, string refundStatus = "买手退款成功")
|
|
{
|
|
string url2 = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/purchase/refundStatus";
|
|
var data = new JObject();
|
|
data["orderId"] = order.ShopOrderIdStr;
|
|
data["outOrderId"] = order.order_sn;
|
|
data["refundStatus"] = refundStatus;
|
|
var dataStr2 = JsonHelper.SerializeObject(data);
|
|
var refundStatusRst = HttpResponseWXBLL.e57PostResponse(url2, dataStr2, "");
|
|
return refundStatusRst;
|
|
|
|
//Thread.Sleep(100);
|
|
//var url2 = BaseClass.Build29WxObjString("order/wx_update_erp_order_express");
|
|
//var data2 = UserLogin.GetSignaturex();
|
|
//data2 += "&out_order_no=" + order.order_sn;
|
|
//data2 += "&refund_status=" + "买手退款成功";
|
|
//var html2 = GetHtml.PostUtf8(url2, data2);
|
|
//if (string.IsNullOrEmpty(html2) || !html2.Contains("\"code\":200"))
|
|
// html2 = GetHtml.PostUtf8(url2, data2);
|
|
//if (string.IsNullOrEmpty(html2) || !html2.Contains("\"code\":200"))
|
|
//{
|
|
// order.sendStatus = "退款成功 买手退款信息更新失败";
|
|
//}
|
|
//else
|
|
// order.sendStatus = "退款成功 买手退款信息更新成功";
|
|
}
|
|
|
|
private void chkHideNoWxIdOrder_CheckedChanged(object sender, RoutedEventArgs e)
|
|
{
|
|
isHideNoWxOrderNo = chkHideNoWxIdOrder.IsChecked == true;
|
|
filterBuyerOrder();
|
|
}
|
|
|
|
private void btnFilter_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
filterBuyerOrder();
|
|
}
|
|
|
|
private void dgBuyerOrder_LoadingRow(object sender, DataGridRowEventArgs e)
|
|
{
|
|
e.Row.Header = e.Row.GetIndex() + 1;
|
|
}
|
|
|
|
private void txtFilter_TextChanged(object sender, TextChangedEventArgs e)
|
|
{
|
|
filterTxt = txtFilter.Text.Trim();
|
|
}
|
|
|
|
private void btnHide_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (btnHide.Content.ParseToString() == "▲")
|
|
{
|
|
btnHide.Content = "▼";
|
|
gridTable.Visibility = Visibility.Visible;
|
|
}
|
|
else
|
|
{
|
|
btnHide.Content = "▲";
|
|
gridTable.Visibility = Visibility.Collapsed;
|
|
}
|
|
}
|
|
|
|
private void chkAutoAfterSale_Checked(object sender, RoutedEventArgs e)
|
|
{
|
|
if (isLoad)
|
|
{
|
|
buyerReadOrderConfig.IsAutoAfterSale = chkAutoAfterSale.IsChecked == true;
|
|
NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_config", buyerReadOrderConfig);
|
|
}
|
|
}
|
|
|
|
private void btnHideAll_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (MainWindow.Instance.gridPddBuyerOrderReadCtrl.Visibility != Visibility.Visible)
|
|
MainWindow.Instance.gridPddBuyerOrderReadCtrl.Visibility = Visibility.Visible;
|
|
if (Panel.GetZIndex(MainWindow.Instance.gridPddBuyerOrderReadCtrl) < 1)
|
|
Panel.SetZIndex(MainWindow.Instance.gridPddBuyerOrderReadCtrl, 1);
|
|
else
|
|
Panel.SetZIndex(MainWindow.Instance.gridPddBuyerOrderReadCtrl, -1);
|
|
}
|
|
}
|
|
|
|
public class YkdBuyerOrder
|
|
{
|
|
public static string GetInitAfterSale(BuyerLoginInfo buyer, string orderSn)
|
|
{
|
|
string url = "https://mobile.yangkeduo.com/complaint.html?order_sn=" + orderSn + "&after_sales_reason=0&after_sales_type=1&after_sales_code=1001";
|
|
var rst = HttpResponseYkdBLL.YangkeduoGetPageResponse(buyer, url);
|
|
return rst;
|
|
}
|
|
|
|
public static string SetOrderAfterSale(BuyerLoginInfo buyer, string user_phone, string order_sn, int apply_amount, int refund_amount, int new_refund_amount)
|
|
{
|
|
string url = "https://mobile.yangkeduo.com/proxy/api/after_sales/create?pdduid=" + buyer.buyer_id;
|
|
string body = @"{""order_sn"":""260417-318525949581688"",""coupon_return_control_type"":0,""after_sales_type"":1,""user_ship_status"":0,""user_phone"":""17855141112"",""images"":[],""return_coupon_amount"":0,""question_type"":66,""question_desc"":"""",""apply_amount"":1568,""refund_amount"":1568,""new_refund_amount"":1568,""is_lite"":true}";
|
|
body = @"{""order_sn"":""" + order_sn + @""",""coupon_return_control_type"":0,""after_sales_type"":1,""user_ship_status"":0,""user_phone"":""" + user_phone +
|
|
@""",""images"":[],""return_coupon_amount"":0,""question_type"":66,""question_desc"":"""",""apply_amount"":" + apply_amount +
|
|
@",""refund_amount"":" + refund_amount + @",""new_refund_amount"":" + new_refund_amount + @",""is_lite"":true}";
|
|
|
|
string referer = "https://mobile.yangkeduo.com/complaint.html?order_sn=260417-318525949581688&refer_page_name=order_detail&refer_page_id=10038_1776391960785_p20v9j3op4&refer_page_sn=10038&after_sales_reason=66&after_sales_type=1&after_sales_code=1001";
|
|
referer = "https://mobile.yangkeduo.com/complaint.html?order_sn=" + order_sn + "&refer_page_name=order_detail&&after_sales_reason=66";
|
|
|
|
var rst = HttpResponseYkdBLL.YangkeduoPostResponse(buyer, url, body, referer);
|
|
return rst;
|
|
}
|
|
|
|
public static string GetSearchOrder(BuyerLoginInfo buyer, string orderSn)
|
|
{
|
|
//1778823980132_ro0aie9x73
|
|
var page_id = "10032_" + BaseClass.DateTimeToTimestampMilliseconds(DateTime.Now) + "_" + Randomx.GetWordNumber(10);
|
|
string url = "https://mobile.yangkeduo.com/transac_orders_search_results.html?keyWord=" + orderSn +
|
|
"&type=0&main_orders=1&refer_page_name=my_order&refer_page_id=" + page_id + "&refer_page_sn=10032";
|
|
|
|
string refere = "https://mobile.yangkeduo.com/orders.html?type=0&comment_tab=1&combine_orders=1&main_orders=1&refer_page_name=personal&refer_page_id=&refer_page_sn=10001&page_id=" + page_id + "&is_back=1";
|
|
var rst = HttpResponseYkdBLL.YangkeduoGetSearchOrderResponse(buyer, url, refere);
|
|
return rst;
|
|
}
|
|
}
|
|
|
|
public class BuyerReadOrderConfig
|
|
{
|
|
/// <summary>
|
|
/// 是否自动读单
|
|
/// </summary>
|
|
public bool IsAutoReadOrder = true;
|
|
/// <summary>
|
|
/// 是否自动售后未发货订单
|
|
/// </summary>
|
|
public bool IsAutoAfterSale = true;
|
|
}
|
|
}
|