diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml index 8fa1ae5..2cb0bf2 100644 --- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml @@ -265,9 +265,9 @@ HorizontalAlignment="Left" VerticalAlignment="Center" BorderBrush="{StaticResource mainColorBrush}" + Click="chkSyncDirectOrderWaybill_Click" Content="同步物流单" FontSize="12" - Click="chkSyncDirectOrderWaybill_Click" IsChecked="False" /> @@ -1070,7 +1070,8 @@ - + + diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs index 46cfb37..18cc28e 100644 --- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs @@ -1779,9 +1779,11 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls return true; if (cmbRejectStatusText == "申请中" && !order.orderItems.Any(oi => oi.AddEditTransitWarehouseRejectStr == "已申请拒收")) return true; - if (cmbRejectStatusText == "拒收成功" && !order.orderItems.Any(oi => oi.AddEditTransitWarehouseRejectStr.StartsWith("申请拒收成功"))) + if (cmbRejectStatusText == "申请成功" && !order.orderItems.Any(oi => oi.AddEditTransitWarehouseRejectStr.StartsWith("申请成功"))) return true; - if (cmbRejectStatusText == "拒收失败" && !order.orderItems.Any(oi => oi.AddEditTransitWarehouseRejectStr.StartsWith("申请拒收失败"))) + if (cmbRejectStatusText == "申请失败" && !order.orderItems.Any(oi => oi.AddEditTransitWarehouseRejectStr.StartsWith("申请失败"))) + return true; + if (cmbRejectStatusText == "拒收成功" && !order.orderItems.Any(oi => oi.AddEditTransitWarehouseRejectStr.StartsWith("拒收成功"))) return true; if (order.order_id == "3738674216947317248") diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs index 94ae036..1537f94 100644 --- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs @@ -1077,8 +1077,20 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls private void btnAddEditTransitWarehouseReject_Click(object sender, RoutedEventArgs e) { - if (sender == btnAddEditTransitWarehouseReject) + if (sender == btnAddEditTransitWarehouseReject && this.DataContext is oms_wei_order_item_info orderItem1 && !string.IsNullOrWhiteSpace(orderItem1.ItemTransitOrderWithVoid?.express_1_waybill)) + { + BaiduGetWaybillInfoView buyerLoginForm = new BaiduGetWaybillInfoView(orderItem1); + buyerLoginForm.ViewModel.InitUrl = "https://www.baidu.com/s?ie=UTF-8&wd=" + orderItem1.ItemTransitOrderWithVoid?.express_1_waybill; + + new DialogWindow() + { + Width = 1280, + Height = 800, + Title = "物流拒收查询", + Content = buyerLoginForm, + }.Show(); return; + } string msg = $@" diff --git a/29WxOrderWpf/ViewModels/BaiduGetWaybillInfoViewModel.cs b/29WxOrderWpf/ViewModels/BaiduGetWaybillInfoViewModel.cs new file mode 100644 index 0000000..5758a81 --- /dev/null +++ b/29WxOrderWpf/ViewModels/BaiduGetWaybillInfoViewModel.cs @@ -0,0 +1,267 @@ +using _29WxOrderWpf.CefHelper; +using _29WxOrderWpf.Commands; +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 +{ + + + /// + /// 拼多多买手移动版登录窗口 视图模型(WPF 版 TaobaoLoginForm) + /// + 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; + + /// 浏览器创建完成后触发(视图在此把浏览器加入可视树) + public event Action BrowserCreated; + + /// 请求关闭窗口 + 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); } + } + + /// 地址栏 + public string Address + { + get { return this.GetValue(x => x.Address); } + set { this.SetValue(x => x.Address, value); } + } + + /// 物流信息 + 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); + } + + /// + /// 窗口加载完成时调用 + /// + public async Task Start() + { + await AutoLogin(); + } + + /// + /// 窗口关闭时调用,停止后台任务 + /// + public void Stop() + { + _isWindowLoaded = false; + } + + /// + /// 自动登录店铺后台 + /// + 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); + } + } + } +} \ No newline at end of file diff --git a/29WxOrderWpf/Views/BaiduGetWaybillInfoView.xaml b/29WxOrderWpf/Views/BaiduGetWaybillInfoView.xaml new file mode 100644 index 0000000..d98de4c --- /dev/null +++ b/29WxOrderWpf/Views/BaiduGetWaybillInfoView.xaml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/29WxOrderWpf/Views/BaiduGetWaybillInfoView.xaml.cs b/29WxOrderWpf/Views/BaiduGetWaybillInfoView.xaml.cs new file mode 100644 index 0000000..30eaa5d --- /dev/null +++ b/29WxOrderWpf/Views/BaiduGetWaybillInfoView.xaml.cs @@ -0,0 +1,63 @@ +using _29WxOrderWpf.BaseWindows; +using _29WxOrderWpf.ViewModels; +using AllBase.Model.DBModel; +using CefSharp.Wpf; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Input; +using System.Windows.Media; + +namespace _29WxOrderWpf.Views +{ + /// + /// 百度获取物流信息窗口 + /// + public partial class BaiduGetWaybillInfoView : UserControl + { + /// 视图模型 + public BaiduGetWaybillInfoViewModel ViewModel { get; } + + public BaiduGetWaybillInfoView(oms_wei_order_item_info orderItem) + { + + InitializeComponent(); + + ViewModel = new BaiduGetWaybillInfoViewModel(orderItem); + ViewModel.BrowserCreated += ViewModel_BrowserCreated; + ViewModel.RequestClose += ViewModel_RequestClose; + DataContext = ViewModel; + } + + private async void BaiduGetWaybillInfoView_Loaded(object sender, RoutedEventArgs e) + { + ViewModel.Start(); + } + + private void BaiduGetWaybillInfoView_Closed(object sender, System.EventArgs e) + { + ViewModel.Stop(); + } + + private void ViewModel_BrowserCreated(ChromiumWebBrowser browser) + { + Grid.SetRow(browser, 0); + Grid.SetColumn(browser, 0); + BrowserHost.Children.Add(browser); + } + + private void ViewModel_RequestClose() + { + Window parentWindow = Window.GetWindow(this); + if (this.IsLoaded && parentWindow != null) + parentWindow.Close(); + } + + private void txtAddress_KeyDown(object sender, KeyEventArgs e) + { + if (e.Key == Key.Enter) + { + ViewModel.ReloadCommand.Execute(null); + } + } + } +} \ No newline at end of file diff --git a/29WxOrderWpf/Views/TaobaoLoginView.xaml b/29WxOrderWpf/Views/TaobaoLoginView.xaml index e0079b3..a53cceb 100644 --- a/29WxOrderWpf/Views/TaobaoLoginView.xaml +++ b/29WxOrderWpf/Views/TaobaoLoginView.xaml @@ -48,12 +48,17 @@ + + + + diff --git a/AllBase/Model/DBModel/oms_wei_order_item_info.cs b/AllBase/Model/DBModel/oms_wei_order_item_info.cs index 04a4f8e..04c5465 100644 --- a/AllBase/Model/DBModel/oms_wei_order_item_info.cs +++ b/AllBase/Model/DBModel/oms_wei_order_item_info.cs @@ -332,11 +332,13 @@ namespace AllBase.Model.DBModel if (this.ItemTransitOrderWithVoid?.has_reject == 1) AddEditTransitWarehouseRejectStr = "已申请拒收"; if (this.ItemTransitOrderWithVoid?.has_reject == 2) - AddEditTransitWarehouseRejectStr = "申请拒收失败"; + AddEditTransitWarehouseRejectStr = "申请失败"; if (this.ItemTransitOrderWithVoid?.has_reject == 3) - AddEditTransitWarehouseRejectStr = "申请拒收成功"; + AddEditTransitWarehouseRejectStr = "申请成功"; if (this.ItemTransitOrderWithVoid?.has_reject == 5) AddEditTransitWarehouseRejectStr = "已取消拒收"; + if (this.ItemTransitOrderWithVoid?.has_reject == 99) + AddEditTransitWarehouseRejectStr = "拒收成功"; if (this.ItemTransitOrderWithVoid == null || (this.ItemRefund?.type != "REFUND" && !this.ItemOrder.IsAbnormal) || // 仅退款 TransitRefundStatusStr.Contains("退款成功") ||