267 lines
12 KiB
C#
267 lines
12 KiB
C#
using _29WxOrderWpf.CefHelper;
|
||
using WxOrder.Framework.Commons;
|
||
using _29WxOrderWpf.Ctrls.OrderCtrls;
|
||
using AllBase;
|
||
using AllBase.Helper;
|
||
using AllBase.Model.DBModel;
|
||
using AllBase.Model.MvvmBaseClasses;
|
||
using CefSharp;
|
||
using CefSharp.Handler;
|
||
using CefSharp.Wpf;
|
||
using NaiBa.Util.Extension;
|
||
using Org.BouncyCastle.Asn1.Ocsp;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Security.Policy;
|
||
using System.Text;
|
||
using System.Threading;
|
||
using System.Threading.Tasks;
|
||
using System.Windows;
|
||
using System.Windows.Input;
|
||
using System.Windows.Threading;
|
||
using TemuKJD.ToolForms;
|
||
using Work;
|
||
using Work._29Tools.BLL;
|
||
using Work._29Tools.CefTools;
|
||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
|
||
|
||
namespace _29WxOrderWpf.ViewModels
|
||
{
|
||
|
||
|
||
/// <summary>
|
||
/// 拼多多买手移动版登录窗口 视图模型(WPF 版 TaobaoLoginForm)
|
||
/// </summary>
|
||
public class BaiduGetWaybillInfoViewModel : PropertyNotifyObject
|
||
{
|
||
// 拼多多买手退货退款售后地址
|
||
// https://mobile.yangkeduo.com/complaint.html?order_sn=260718-101481213440980&after_sales_reason=0&after_sales_type=2&after_sales_code=1002
|
||
|
||
public static BaiduGetWaybillInfoViewModel BaiduGetWaybillInfoInstance { get; set; } = null;
|
||
|
||
/// <summary>浏览器创建完成后触发(视图在此把浏览器加入可视树)</summary>
|
||
public event Action<ChromiumWebBrowser> BrowserCreated;
|
||
|
||
/// <summary>请求关闭窗口</summary>
|
||
public event Action RequestClose;
|
||
|
||
private string CookieHead { get; set; } = "baidu.com";
|
||
public string InitUrl { get; set; } = "";
|
||
private string MainUrl = "https://www.baidu.com/";
|
||
|
||
public ChromiumWebBrowser CefWebBrowser { get; private set; }
|
||
private string currentUrl = "";
|
||
private volatile bool _isWindowLoaded = false;
|
||
|
||
#region 界面绑定属性
|
||
|
||
public oms_wei_order_item_info OrderItem
|
||
{
|
||
get { return this.GetValue(x => x.OrderItem); }
|
||
set { this.SetValue(x => x.OrderItem, value); }
|
||
}
|
||
|
||
/// <summary>地址栏</summary>
|
||
public string Address
|
||
{
|
||
get { return this.GetValue(x => x.Address); }
|
||
set { this.SetValue(x => x.Address, value); }
|
||
}
|
||
|
||
/// <summary>物流信息</summary>
|
||
public string LatestWaybillStr
|
||
{
|
||
get { return this.GetValue(x => x.LatestWaybillStr); }
|
||
set { this.SetValue(x => x.LatestWaybillStr, value); }
|
||
}
|
||
|
||
public bool IsLoading
|
||
{
|
||
get { return this.GetValue(x => x.IsLoading); }
|
||
set { this.SetValue(x => x.IsLoading, value); }
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region 命令
|
||
|
||
public ICommand ReloadCommand { get; }
|
||
public ICommand SetRejectStatusCommand { get; }
|
||
|
||
#endregion
|
||
|
||
public BaiduGetWaybillInfoViewModel(oms_wei_order_item_info orderItem)
|
||
{
|
||
IsLoading = true;
|
||
BaiduGetWaybillInfoInstance = this;
|
||
OrderItem = orderItem;
|
||
|
||
ReloadCommand = new DelegateCommand(Reload);
|
||
SetRejectStatusCommand = new DelegateCommand(SetRejectStatus);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 窗口加载完成时调用
|
||
/// </summary>
|
||
public async Task Start()
|
||
{
|
||
await AutoLogin();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 窗口关闭时调用,停止后台任务
|
||
/// </summary>
|
||
public void Stop()
|
||
{
|
||
_isWindowLoaded = false;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 自动登录店铺后台
|
||
/// </summary>
|
||
private async Task AutoLogin()
|
||
{
|
||
_ = Application.Current.Dispatcher.InvokeAsync(async () =>
|
||
{
|
||
if (CefWebBrowser == null)
|
||
{
|
||
if (!string.IsNullOrEmpty(InitUrl))
|
||
CefWebBrowser = WPFCEFBrowser.CreateChromiumWebBrowser(InitUrl, false);
|
||
else
|
||
CefWebBrowser = WPFCEFBrowser.CreateChromiumWebBrowser(MainUrl, false);
|
||
|
||
LocalResourceRequestHandler resourceRequestHandler = new LocalResourceRequestHandler();
|
||
resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete;
|
||
resourceRequestHandler.BeforeResourceLoadEvent += RequestHandler_BeforeResourceLoad;
|
||
CefWebBrowser.RequestHandler = new LocalRequestHandler(resourceRequestHandler);
|
||
var lifeSapnHandler = new LocalLifeSpanHandler(PopWindowType.SelfWindow);
|
||
CefWebBrowser.LifeSpanHandler = lifeSapnHandler;
|
||
//CefWebBrowser.KeyboardHandler = new KeyboardHandler();
|
||
CefWebBrowser.KeyboardHandler = new CefKeyboardHandler();
|
||
CefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd;
|
||
CefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged;
|
||
CefWebBrowser.LoadError += CefWebBrowser_LoadError;
|
||
|
||
// 通知视图把浏览器加入可视树(必须在等待浏览器初始化之前完成)
|
||
BrowserCreated?.Invoke(CefWebBrowser);
|
||
|
||
|
||
}
|
||
//chat-submit-button
|
||
while (CefWebBrowser == null || CefWebBrowser.IsLoading)
|
||
{
|
||
Thread.Sleep(100);
|
||
}
|
||
await Task.Run(() =>
|
||
{
|
||
|
||
Thread.Sleep(4000);
|
||
IsLoading = false;
|
||
|
||
if (string.IsNullOrEmpty(LatestWaybillStr))
|
||
{
|
||
var jsStr = "document.getElementById('chat-submit-button').click();";
|
||
var client = CefWebBrowser.GetDevToolsClient();
|
||
if (client != null)
|
||
{
|
||
client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
|
||
}
|
||
}
|
||
|
||
});
|
||
});
|
||
|
||
|
||
}
|
||
|
||
|
||
private void CefWebBrowser_LoadError(object sender, CefSharp.LoadErrorEventArgs e)
|
||
{
|
||
}
|
||
|
||
private void CefWebBrowser_AddressChanged(object sender, DependencyPropertyChangedEventArgs e)
|
||
{
|
||
if (Application.Current?.Dispatcher != null)
|
||
{
|
||
Application.Current.Dispatcher.Invoke(new Action(() =>
|
||
{
|
||
currentUrl = e.NewValue.ParseToString();
|
||
Address = e.NewValue.ParseToString();
|
||
}));
|
||
}
|
||
}
|
||
|
||
private void CefWebBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e)
|
||
{
|
||
//js绑定C#对象 html页面内声明绑定的C#对象
|
||
StringBuilder sb = new StringBuilder();
|
||
sb.Append("(function(){");
|
||
sb.Append("CefSharp.BindObjectAsync('shopObj');");
|
||
sb.Append("})();");
|
||
CefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(sb.ToString());
|
||
}
|
||
|
||
private bool RequestHandler_BeforeResourceLoad(object sender, string url, string postData, IRequest request)
|
||
{
|
||
return false;
|
||
}
|
||
|
||
private async void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData, IRequest request)
|
||
{
|
||
await DoResourceLoadComplete(url, responseData);
|
||
}
|
||
|
||
private async Task DoResourceLoadComplete(string url, string responseData)
|
||
{
|
||
if (url.Contains("https://alayn.baidu.com/express/appdetail/pc_express"))
|
||
{
|
||
await Task.Run(async () =>
|
||
{
|
||
if (responseData.Contains("\"status\":0"))
|
||
{
|
||
//jsonp_1790501236188_28581({"status":0,"error_code":0,"msg":"","data":{"context":[{"time":1790324628,"desc":"您的快件已退回签收。如有疑问请联系网点,网点电话:95554,投诉电话:95554。感谢使用圆通速递,期待再次为您服务!","zone":""},{"time":1790324332,"desc":"【广东省广州市番禺区火车南站】的周继双(17396260642)正在为您派件(95161和18521号段的上海号码为圆通快递员专属号码,请放心接听。如遇物流问题,请联系快递员为您解决,或联系网点电话:18521191496,或致电专属客服95554)","zone":""},{"time":1790312940,"desc":"您的快件已经到达【广东省广州市番禺区沙湾】【物流问题请致电(专属热线:95554)更快解决】","zone":""},{"time":1790287250,"desc":"您的快件离开【佛山转运中心】,已发往【广东省广州市番禺区沙湾】","zone":""},{"time":1790284964,"desc":"您的快件已经到达【佛山转运中心】【物流问题请致电(专属热线:95554)更快解决】","zone":""},{"time":1790272720,"desc":"您的快件离开【深圳转运中心】,已发往【佛山转运中心】","zone":""},{"time":1790272619,"desc":"您的快件已经到达【深圳转运中心】【物流问题请致电(专属热线:95554)更快解决】","zone":""},{"time":1790263927,"desc":"您的快件离开【广东省东莞市凤岗】,已发往【深圳转运中心】","zone":""},{"time":1790263156,"desc":"您的快件已经到达【广东省东莞市凤岗】【物流问题请致电(专属热线:95554)更快解决】","zone":""},{"time":1790257882,"desc":"您的快件已被【广东省东莞市凤岗】安排退回,退回原因:客户要求退回","zone":""},{"time":1790257874,"desc":"发件人拦截,快件将原路退回或更改派送地址!如有疑问请联系【广东省东莞市凤岗】(专属客服电话:95554)","zone":""},{"time":1790164947,"desc":"您的快件已到达[喵站](浸校塘喵站)兔喜快递超市(浸校塘东良巷店),请及时取件,如有取件码问题或找不到包裹等问题,请联系站点:13556614729,或联系快递员:18521194191,或联系网点电话:18521871340,或致电专属客服95554。感谢使用圆通速递,期待再次为您服务!","zone":""},{"time":1790139598,"desc":"【广东省东莞市凤岗】的黎志威(18521194191)正在为您派件(95161和18521号段的上海号码为圆通快递员专属号码,请放心接听。如遇物流问题,请联系快递员为您解决,或联系网点电话:18521871340,或致电专属客服95554)","zone":""},{"time":1790139558,"desc":"您的快件已经到达【广东省东莞市凤岗】【物流问题请致电(专属热线:95554)更快解决】","zone":""},{"time":1790124801,"desc":"您的快件离开【深圳转运中心】,已发往【广东省东莞市凤岗】","zone":""},{"time":1790124513,"desc":"您的快件已经到达【深圳转运中心】【物流问题请致电(专属热线:95554)更快解决】","zone":""},{"time":1790111473,"desc":"您的快件离开【佛山转运中心】,已发往【深圳转运中心】","zone":""},{"time":1790111393,"desc":"您的快件已经到达【佛山转运中心】【物流问题请致电(专属热线:95554)更快解决】","zone":""},{"time":1790107910,"desc":"您的快件离开【广东省广州市番禺区火车南站】,已发往【佛山转运中心】","zone":""},{"time":1790104565,"desc":"您的快件在【广东省广州市番禺区火车南站】已揽收,揽收人: 董伟咏(18521870969)【物流问题请致电(专属热线:95554)更快解决】","zone":""}],"status":"1","state":"3","officalService":{"comCode":"yuantong","com":"圆通","comName":"圆通速递","urlDesc":"官网地址:","url":"https://www.yto.net.cn/","logo":"https://cityservice-hb.cdn.bcebos.com/amis/img/b5f54f0b2d6b.png","servicePhoneDesc":"官方电话:","servicePhone":"95554","service":[{"url":"https://www.yto.net.cn/ytoExpress/subCreatePages/create","name":"我要寄件"},{"url":"https://www.yto.net.cn/ytoExpress/querySupport/standardPrice","name":"运价查询"},{"url":"https://online.yto.net.cn/#/","name":"在线客服"}]}}})
|
||
LatestWaybillStr = BaseRegex.GetStringJson(ref responseData, "desc");
|
||
|
||
if (LatestWaybillStr.Contains("退回") || LatestWaybillStr.Contains("拒收") || LatestWaybillStr.Contains("拦截"))
|
||
{
|
||
if (!LatestWaybillStr.Contains("√"))
|
||
LatestWaybillStr = "√ " + LatestWaybillStr;
|
||
|
||
var transitOrder = OrderItem.ItemTransitOrderWithVoid;
|
||
if (transitOrder.has_reject != 99)
|
||
{
|
||
var url = BaseClass.Build29WxObjString("order/wx_update_transit_order_reject_status");
|
||
var data = UserLogin.GetSignaturex();
|
||
data += "&order_no=" + OrderItem.order_id;
|
||
data += "&order_sku_id=" + OrderItem.sku_id;
|
||
data += "&has_reject=" + 99;
|
||
var html = GetHtml.PostUtf8(url, data);
|
||
|
||
transitOrder.has_reject = 99;
|
||
OrderListCtrl.InitOrderItemObservableProp(OrderItem);
|
||
MainWindow.Instance.Dispatcher.Invoke(() => { MainWindow.Instance.orderListCtrl.FilterOneOrder(OrderItem.ItemOrder); });
|
||
}
|
||
|
||
}
|
||
}
|
||
});
|
||
}
|
||
}
|
||
|
||
private void SetRejectStatus()
|
||
{
|
||
}
|
||
|
||
private void Reload()
|
||
{
|
||
if (CefWebBrowser != null)
|
||
{
|
||
if (Address != "about:blank")
|
||
CefWebBrowser.Load(Address);
|
||
else
|
||
CefWebBrowser.Load(MainUrl);
|
||
}
|
||
}
|
||
}
|
||
} |