diff --git a/29WxOrderWpf/29WxOrderWpf.csproj b/29WxOrderWpf/29WxOrderWpf.csproj index 8b1d1ab..246def0 100644 --- a/29WxOrderWpf/29WxOrderWpf.csproj +++ b/29WxOrderWpf/29WxOrderWpf.csproj @@ -168,7 +168,7 @@ ShopListCtrl.xaml - + LoginWindow.xaml @@ -184,6 +184,9 @@ UcWindowBoxes.xaml + + TransitAfterSaleWindow.xaml + Designer MSBuild:Compile @@ -216,7 +219,7 @@ Designer MSBuild:Compile - + Designer MSBuild:Compile @@ -284,6 +287,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + @@ -379,6 +386,7 @@ + diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml index 8cc8e4e..d6883fd 100644 --- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml @@ -185,6 +185,8 @@ + diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs index afe9186..1afcea6 100644 --- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs @@ -266,10 +266,10 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls })); break; } - List pddTransitAfterSales = new List(); + List transitAfterSaleList = new List(); try { - pddTransitAfterSales = JsonHelper.DeserializeJsonToList(JObject.Parse(html5)["data"].ParseToString()) + transitAfterSaleList = JsonHelper.DeserializeJsonToList(JObject.Parse(html5)["data"].ParseToString()) .OrderByDescending(p => p.created_time).ToList(); } catch { } @@ -310,6 +310,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls } })); + //装载订单商品详情 order.orderItems = new ObservableCollection(); foreach (var item in orderItems.Where(oi => oi.order_id == order.order_id)) @@ -318,6 +319,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls item.ItemOrder = order; order.orderItems.Add(item); + // 更新店铺是否加入代发情况 item.Shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ErpShopId == item.order_id); Dispatcher.Invoke(new Action(() => { item.UpdateOrderItemBuyButton(); })); @@ -338,16 +340,23 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls item.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == item.order_id && t.order_sku_id == item.sku_id)); else item.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == item.order_id)); + item.ItemTransitOrderAfterSales = transitAfterSaleList.Where(a => item.ItemTransitOrders.Any(t => t.out_order_no == a.order_code)).ToList(); + // 中转仓买手订单 item.PddBuyerOrders = pddBuyerOrders.Where(po => po.wx_order_id == item.order_id && po.wx_sku_id == item.sku_id).ToList(); } - //装载订单售后详情 + + // 装载订单售后详情 order.refundItems = new ObservableCollection(refunds.Where(of => of.order_id == order.order_id)); + + // 读取订单后立即赋值,防止滚动时实时赋值造成卡顿 foreach (var orderItem in order.orderItems) { - orderItem.SetItemRefund(order.refundItems.ToList()); + orderItem.SetTransitOrder(); + orderItem.SetItemRefund(); } + // 删除再添加,触发更新。 todo: 如果已存在相同订单,则直接修改更新 var orderExist = GlobalConfig.lstOrder.FirstOrDefault(o => o.order_id == order.order_id); if (orderExist != null) GlobalConfig.lstOrder.Remove(orderExist); @@ -361,9 +370,6 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls { GlobalConfig.lstOrder.Add(order); } - if (order.orderItems.Count > 1) - { - } Dispatcher.Invoke(new Action(() => { @@ -518,12 +524,13 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls { return true; } - // 过滤多件商品 - if (chkNoMultiOrder.IsChecked.ParseToBool() && order.orderItems.Sum(o => o.sku_cnt) > 1) + // 过滤多子单订单 + if (chkNoMultiOrder.IsChecked.ParseToBool() && order.orderItems.Count() > 1) { return true; } - if (chkOnlyWarehouseOrder.IsChecked.ParseToBool() && order.status >= 30 && order.orderItems.All(oi => oi.ItemTransitOrderWithVoid == null)) + // 过滤非中转仓订单 + if (chkOnlyWarehouseOrder.IsChecked.ParseToBool() && !order.IsWaitBuy && order.orderItems.All(oi => oi.ItemTransitOrderWithVoid == null)) { return true; } diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowCtrl.xaml.cs b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowCtrl.xaml.cs index 9b366a5..f0138c9 100644 --- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowCtrl.xaml.cs +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowCtrl.xaml.cs @@ -39,28 +39,21 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls this.DataContextChanged += OrderListRowCtrl_DataContextChanged; } - private void OrderListRowCtrl_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) + private async void OrderListRowCtrl_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) { if (this.DataContext is oms_wei_order_info order) - { - //Task.Run(() => - //{ + { int index = 0; foreach (var orderItem in order.orderItems) { gridChildOrder.RowDefinitions.Insert(gridChildOrder.RowDefinitions.Count - 1, new RowDefinition() { Height = GridLength.Auto }); - //Thread.Sleep(5); index++; - //Dispatcher.Invoke(new Action(() => - //{ var rowItem = new OrderListRowItemCtrl() { DataContext = orderItem, Name = "rowItem" + index }; Grid.SetRow(rowItem, index); this.gridChildOrder.Children.Add(rowItem); - //})); if (index >= 5) break; } - //}); } } diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowHeaderCtrl.xaml.cs b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowHeaderCtrl.xaml.cs index c50832b..147fe58 100644 --- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowHeaderCtrl.xaml.cs +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowHeaderCtrl.xaml.cs @@ -46,6 +46,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls ShopBLL.CheckShopLogin(shop); if (shop.LoginStatus == "登录成功") { + // 在线直接进店 shopLoginForm.openType = EnumOpenType.manage; shopLoginForm.WindowState = System.Windows.Forms.FormWindowState.Maximized; shopLoginForm.InitUrl = "https://store.weixin.qq.com/shop/home"; @@ -53,6 +54,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls } else { + // 掉线登录 shopLoginForm.openType = EnumOpenType.login; shopLoginForm.ShowDialog(); diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml index 26d1db4..7e55f03 100644 --- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml @@ -96,11 +96,10 @@ Visibility="{Binding ItemOrder.ship_done_time_visibility}"/> - - + Visibility="{Binding RefundTimeVisibility}"/> + @@ -173,7 +172,7 @@ - @@ -364,6 +363,14 @@ + + + + + + diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs index 27b44b1..4ca3fe4 100644 --- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs @@ -2,6 +2,7 @@ using _29WxOrderWpf.Converters; using _29WxOrderWpf.Ctrls.BuyerCtrls; using _29WxOrderWpf.UserControls; +using _29WxOrderWpf.Windows.OrderWindows; using AllBase; using AllBase.Helper; using AllBase.Model; @@ -204,9 +205,10 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls BaseMsgWindow.ShowError("请选择买手号"); return; } - if (orderItem.sku_cnt > 1 || orderItem.ItemOrder.orderItems.Count > 1) + if (/*orderItem.sku_cnt > 1 ||*/ orderItem.ItemOrder.orderItems.Count > 1) { - BaseMsgWindow.ShowError("多单或多件商品订单中转仓暂不支持"); + //BaseMsgWindow.ShowError("多子单或多件商品订单中转仓暂不支持"); + BaseMsgWindow.ShowError("多子单订单中转仓暂不支持"); return; } @@ -230,6 +232,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls orderItem = newOrder?.orderItems?.FirstOrDefault(oi => oi.sku_id == skuId); if (orderItem == null) return; + // 如果是退款单,弹出退款窗口 if (/*orderItem?.ItemRefund?.count > 0 &&*/ orderItem.refund_status > 1) { @@ -252,7 +255,6 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls return; } - // 拍单前检测买手号是否在线 if (GlobalConfig.CurrentPddBuyer.status == "在线") { @@ -268,29 +270,6 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls return; } - //if (!GlobalConfig.BuyConfig.IsUseAppBalance) - //{ - - // var url = BaseClass.Build29WxObjString("shop/get_shop_erp_merchant"); - // var data = UserLogin.GetSignaturex(); - // data += "&corporate_account_user_id=" + orderItem.Shop.ErpCorporateAccountUserId; - // data += "&manage_user_id=" + orderItem.Shop.ErpManageUserId; - // data += "&shop_id=" + orderItem.Shop.ErpShopId; - // var html = GetHtml.PostUtf8(url, data); - // if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) - // html = GetHtml.PostUtf8(url, data); - // if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) - // { - // Dispatcher.Invoke(new Action(() => - // { - // //BaseMsgWindow.ShowError("未找到店铺账户!" + BaseRegex.GetStringJson(ref html, "msg")); - // //btnBuyOrder.Cursor = Cursors.Hand; - // GlobalConfig.BuyConfig.IsUseAppBalance = true; - // })); - // //return; - // } - //} - orderRetry: // 拍单前查询账户余额 if (GlobalConfig.BuyConfig.IsUseAppBalance) @@ -318,17 +297,12 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls { Dispatcher.Invoke(new Action(() => { - //BaseMsgWindow.ShowError("未找到店铺账户!" + BaseRegex.GetStringJson(ref html, "msg")); btnBuyOrder.Cursor = Cursors.Hand; })); - if (orderItem.Shop.ErpCorporateAccountUserId == null && orderItem.Shop.ErpManageUserId == null) - { - GlobalConfig.BuyConfig.IsUseAppBalance = true; - StartUp.SaveBuyConfig(); - BaseMsgWindow.ShowError("未找到店铺账户!" + BaseRegex.GetStringJson(ref html, "msg") + ",自动切换为快递余额拍单。"); - goto orderRetry; - } - //return; + GlobalConfig.BuyConfig.IsUseAppBalance = true; + StartUp.SaveBuyConfig(); + BaseMsgWindow.ShowError("未找到店铺账户!" + BaseRegex.GetStringJson(ref html, "msg") + ",自动切换为快递余额拍单。"); + goto orderRetry; } if (!string.IsNullOrEmpty(html) && html.Contains("\"code\":200")) { @@ -340,14 +314,12 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls { Dispatcher.Invoke(new Action(() => { - //BaseMsgWindow.ShowError("未找到店铺账户!"); btnBuyOrder.Cursor = Cursors.Hand; })); GlobalConfig.BuyConfig.IsUseAppBalance = true; StartUp.SaveBuyConfig(); BaseMsgWindow.ShowError("未找到店铺账户!自动切换为快递余额拍单。"); goto orderRetry; - //return; } var balance = erpM.balance.ParseToDecimal(); @@ -355,10 +327,12 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls { Dispatcher.Invoke(new Action(() => { - BaseMsgWindow.ShowError("ERP账户余额不足(剩余" + balance.ToString("0.00") + "元,拍单至少需保留10元),无法中转拍单,请先充值!"); btnBuyOrder.Cursor = Cursors.Hand; })); - return; + GlobalConfig.BuyConfig.IsUseAppBalance = true; + StartUp.SaveBuyConfig(); + BaseMsgWindow.ShowError("ERP账户余额不足(剩余" + balance.ToString("0.00") + "元,拍单至少需保留10元),无法中转拍单,自动切换为快递余额拍单。"); + goto orderRetry; } } catch @@ -411,6 +385,32 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls return; } + // 检测是否加入代发 + if (orderItem.Shop?.LoginStatus == "登录成功") + { + var is29SupplierRst = WxOrderSupplierBLL.GetWxSupplierOrderList(orderItem.Shop, orderItem.order_id); + if (!is29SupplierRst.Contains("\"code\":0")) + is29SupplierRst = WxOrderSupplierBLL.GetWxSupplierOrderList(orderItem.Shop, orderItem.order_id); + if (is29SupplierRst.Contains("\"code\":0") && is29SupplierRst.Contains("\"supplierName\":\"29供货商\"")) // "supplierName":"29供货商" + { + orderItem.Shop.Is29Supplier = true; + } + else + { + ShopBLL.CheckShopLogin(orderItem.Shop); + if (orderItem.Shop?.LoginStatus == "登录成功") + { + Dispatcher.Invoke(new Action(() => + { + BaseMsgWindow.ShowError("店铺后台未查询到该代发单,请确认店铺在线且商品加入代发"); + btnBuyOrder.Cursor = Cursors.Hand; + })); + return; + } + } + } + + // 掉线提示重登 if (orderItem.Shop?.LoginStatus != "登录成功") { foreach (var ord in GlobalConfig.lstFilterOrder.Where(o => o.shop_id.ParseToString() == orderItem.Shop.ErpShopId).ToList()) @@ -426,43 +426,8 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls })); return; } - // 检测是否加入代发 - if (orderItem.Shop?.LoginStatus == "登录成功") - { - var is29SupplierRst = WxOrderSupplierBLL.GetWxSupplierOrderList(orderItem.Shop, orderItem.order_id); - if (!is29SupplierRst.Contains("\"code\":0")) - is29SupplierRst = WxOrderSupplierBLL.GetWxSupplierOrderList(orderItem.Shop, orderItem.order_id); - if (is29SupplierRst.Contains("\"code\":0") && is29SupplierRst.Contains("\"supplierName\":\"29供货商\"")) // "supplierName":"29供货商" - { - orderItem.Shop.Is29Supplier = true; - } - else - { - ShopBLL.CheckShopLogin(orderItem.Shop); - if (orderItem.Shop?.LoginStatus != "登录成功") - { - foreach (var ord in GlobalConfig.lstFilterOrder.Where(o => o.shop_id.ParseToString() == orderItem.Shop.ErpShopId).ToList()) - { - // 更新代发管理情况 - foreach (var oi in ord.orderItems) - Dispatcher.Invoke(new Action(() => { oi.UpdateOrderItemBuyButton(); })); - } - Dispatcher.Invoke(new Action(() => - { - BaseMsgWindow.ShowError("请登录店铺"); - btnBuyOrder.Cursor = Cursors.Hand; - })); - return; - } - Dispatcher.Invoke(new Action(() => - { - BaseMsgWindow.ShowError("店铺后台未查询到该代发单,请确认店铺在线且商品加入代发"); - btnBuyOrder.Cursor = Cursors.Hand; - })); - return; - } - } + // 打开拍单窗口 Dispatcher.Invoke(new Action(() => { btnBuyOrder.Cursor = Cursors.Hand; @@ -483,6 +448,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls // "&order_extra_type=1&refer_page_element=open_btn&source_channel=0&refer_page_name=goods_detail" + // "&refer_page_id=10014_" + BaseClass.DateTimeToTimestampSeconds(DateTime.Now) + Randomx.GetNumber(3) + "_tny5ifswls&refer_page_sn=10014"; + buyOrderForm.ShowBuyMask = true; buyOrderForm.InitUrl = "https://mobile.yangkeduo.com/order_checkout.html?sku_id=" + orderItem.BuyMap.map_sku_id + "&group_id=1" + Randomx.GetNumber(11) + "&goods_id=" + orderItem.BuyMap.map_goods_id + "&goods_number=" + orderItem.sku_cnt + "&page_from=101"; @@ -496,6 +462,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls buyOrderForm.pnlMap.Visible = false; } buyOrderForm.ShowDialog(); + // 窗口关闭后更新运费信息 MainWindow.Instance.Balance = BaseClass.Balance.ToString("0.00"); })); }); @@ -511,12 +478,6 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls //if (order_item.BuyMap == null && order_item.ItemOrder.out_amount == 0) // txtProfitForecast.Visibility = Visibility.Visible; - btnDeleteTransitOrder.Visibility = Visibility.Collapsed; - //if (BaseClass.SaLevel == 1 && order_item.ItemTransitOrder != null) - //{ - // btnDeleteTransitOrder.Visibility = Visibility.Visible; - //} - order_item.UpdateOrderItemBuyButton(); Task.Run(() => @@ -531,11 +492,16 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls })); }); + // 作废重拍 if (order_item.ItemOrder.status == 20 /*&& order_item.refund_status <= 1*/ && order_item.ItemTransitOrder != null) { btnDeleteTransitOrder.Visibility = Visibility.Visible; } - //待采购不显示所有采购信息状态(否则会显示作废订单状态) + else + { + btnDeleteTransitOrder.Visibility = Visibility.Collapsed; + } + // 待采购不显示所有采购信息状态(否则会显示作废订单状态) if (GlobalConfig.OrderTabHeaderStr.StartsWith("待采购")) { wpBuyAccount.Visibility = Visibility.Collapsed; @@ -545,10 +511,6 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls wpTransitBuyerRefundStatus.Visibility = Visibility.Collapsed; } } - else - { - //imgOrderItem.Source = null; - } } private void txtOutOrderNumStr_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) @@ -681,7 +643,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls if (orderItem.ItemTransitOrder == null) { - BaseMsgWindow.ShowError("订单状态已修改,请确认后重试"); + BaseMsgWindow.ShowError("要作废的中转订单不存在,请确认后重试"); return; } }); @@ -733,16 +695,28 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls //}' 成功返回code:0 失败返回code:1 string url2 = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/discardOrder"; - var data = new JObject(); - data["orderNo"] = orderItem.order_id; - data["outOrderNo"] = orderItem.ItemTransitOrder.out_order_no; - var dataStr2 = JsonHelper.SerializeObject(data); + var data2 = new JObject(); + data2["orderNo"] = orderItem.order_id; + data2["outOrderNo"] = orderItem.ItemTransitOrder.out_order_no; + var dataStr2 = JsonHelper.SerializeObject(data2); var discardRst = HttpResponseWXBLL.e57PostResponse(url2, dataStr2, ""); if (discardRst.Contains("0") || discardRst.Contains("200")) { MainWindow.Instance.orderListCtrl.GetOrder(orderId); MainWindow.Instance.orderListCtrl.FilterOrders(); BaseMsgWindow.ShowInfo("订单作废成功,请重新拍单"); + + var url3 = BaseClass.Build29WxObjString("user/get_all_user"); + var data3 = UserLogin.GetSignaturex(); + data3 += "&search_user_name=" + BaseClass.UserName; + var html = GetHtml.PostUtf8(url3, data3); + if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) + html = GetHtml.PostUtf8(url3, data3); + if (html.Contains("\"code\":200")) + { + BaseClass.Balance = BaseRegex.GetDecimalJson(ref html, "balance"); + MainWindow.Instance.Balance = BaseClass.Balance.ToString("0.00"); + } } else { @@ -763,5 +737,20 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls } } } + + private void btnAddEditTransitWarehouseAfterSale_Click(object sender, RoutedEventArgs e) + { + if (this.DataContext is oms_wei_order_item_info orderItem) + { + var transitAfterSale = orderItem.ItemTransitOrderAfterSale; + if (orderItem.ItemTransitOrder?.warehouse_status == 2 && orderItem.AddEditTransitWarehouseAfterSaleStr == "添加") + { + BaseMsgWindow.ShowError("商品已出库,请联系卖家直接退回总店!"); + return; + } + TransitAfterSaleWindow transitAfterSaleWindow = new TransitAfterSaleWindow(orderItem); + transitAfterSaleWindow.ShowDialog(); + } + } } } diff --git a/29WxOrderWpf/MainWindow.xaml.cs b/29WxOrderWpf/MainWindow.xaml.cs index f350bca..4945784 100644 --- a/29WxOrderWpf/MainWindow.xaml.cs +++ b/29WxOrderWpf/MainWindow.xaml.cs @@ -1,6 +1,7 @@ using _29WxOrderWpf.BaseWindows; using _29WxOrderWpf.Ctrls.BuyerCtrls; using _29WxOrderWpf.Ctrls.OrderCtrls; +using _29WxOrderWpf.Windows.LoginWindows; using AllBase; using AllBase.DouYinModel.Result; using AllBase.Extension; @@ -69,7 +70,7 @@ namespace _29WxOrderWpf new Thread(AutoAntiGrabbingMechanism).Start(); // 反抓包 #region 弹出登录窗口 - LoginWindows.LoginWindow loginWindow = new LoginWindows.LoginWindow(App.args); + LoginWindow loginWindow = new LoginWindow(App.args); loginWindow.Owner = this; loginWindow.ShowDialog(); #endregion diff --git a/29WxOrderWpf/LoginWindows/LoginWindow.xaml b/29WxOrderWpf/Windows/LoginWindows/LoginWindow.xaml similarity index 96% rename from 29WxOrderWpf/LoginWindows/LoginWindow.xaml rename to 29WxOrderWpf/Windows/LoginWindows/LoginWindow.xaml index dbab790..9bc3b0b 100644 --- a/29WxOrderWpf/LoginWindows/LoginWindow.xaml +++ b/29WxOrderWpf/Windows/LoginWindows/LoginWindow.xaml @@ -1,9 +1,9 @@ - diff --git a/29WxOrderWpf/LoginWindows/LoginWindow.xaml.cs b/29WxOrderWpf/Windows/LoginWindows/LoginWindow.xaml.cs similarity index 99% rename from 29WxOrderWpf/LoginWindows/LoginWindow.xaml.cs rename to 29WxOrderWpf/Windows/LoginWindows/LoginWindow.xaml.cs index 8d66fc7..9b57c8b 100644 --- a/29WxOrderWpf/LoginWindows/LoginWindow.xaml.cs +++ b/29WxOrderWpf/Windows/LoginWindows/LoginWindow.xaml.cs @@ -23,7 +23,7 @@ using System.Windows.Shapes; using Work; using Work.BaseForms; -namespace _29WxOrderWpf.LoginWindows +namespace _29WxOrderWpf.Windows.LoginWindows { /// /// LoginWindow.xaml 的交互逻辑 diff --git a/29WxOrderWpf/Windows/OrderWindows/TransitAfterSaleWindow.xaml b/29WxOrderWpf/Windows/OrderWindows/TransitAfterSaleWindow.xaml new file mode 100644 index 0000000..3c7526c --- /dev/null +++ b/29WxOrderWpf/Windows/OrderWindows/TransitAfterSaleWindow.xaml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + public static string OrderTabHeaderStr { get; set; } = ""; + public static ConcurrentList Divisions { get; set; } = new ConcurrentList(); + public static SystemSettings SystemSettings { get; set; } public static System.Dynamic.ExpandoObject dicLocalStorage { get; set; } diff --git a/AllBase/Model/DBModel/oms_wei_order_info.cs b/AllBase/Model/DBModel/oms_wei_order_info.cs index 13c3263..ffa5003 100644 --- a/AllBase/Model/DBModel/oms_wei_order_info.cs +++ b/AllBase/Model/DBModel/oms_wei_order_info.cs @@ -81,6 +81,11 @@ namespace AllBase.Model.DBModel get { return refundItems?.Count > 0 && refundItems.Any(r => r.status != "USER_CANCELD"); } set { } } + public bool IsRefundWithCancel + { + get { return refundItems?.Count > 0; } + set { } + } /// /// 紧急订单 /// @@ -88,6 +93,10 @@ namespace AllBase.Model.DBModel { get { + if (orderItems.Any(oi => oi.id == 3737775520624572928)) + { + + } if (orderItems.Any(oi => oi.refund_status > 0 && oi.ItemTransitOrders.Count > 0 && oi.ItemTransitOrders.Any(t => !string.IsNullOrEmpty(t.refund_status) && !t.refund_status.Contains("退款成功") && diff --git a/AllBase/Model/DBModel/oms_wei_order_item_info.cs b/AllBase/Model/DBModel/oms_wei_order_item_info.cs index 4ff6775..c25ed7c 100644 --- a/AllBase/Model/DBModel/oms_wei_order_item_info.cs +++ b/AllBase/Model/DBModel/oms_wei_order_item_info.cs @@ -22,22 +22,106 @@ namespace AllBase.Model.DBModel get { return this.GetValue(x => x.Shop); } set { this.SetValue(x => x.Shop, value); } } + public oms_wei_order_info ItemOrder { get { return this.GetValue(x => x.ItemOrder); } set { this.SetValue(x => x.ItemOrder, value); } } + public oms_wei_refund_info ItemRefund { get { return this.GetValue(x => x.ItemRefund); } set { this.SetValue(x => x.ItemRefund, value); } } - public void SetItemRefund(List itemRefunds) + public void SetItemRefund() { - if (itemRefunds?.Count == 1) + if (ItemOrder?.refundItems?.Count == 1) ItemRefund = ItemOrder?.refundItems?.FirstOrDefault(); else ItemRefund = ItemOrder?.refundItems?.FirstOrDefault(r => r.sku_id == this.sku_id); + + if (ItemRefund?.status != "MERCHANT_REFUND_SUCCESS" && ItemRefund?.status != "MERCHANT_RETURN_SUCCESS") + this.RefundResultStr = ""; + else + this.RefundResultStr = "商品退款数量:" + ItemRefund.count + ",订单状态:" + ItemOrder.orderStatusStr; + this.ReturnWaybillId = ItemRefund?.return_waybill_id; + this.RefundTimeStr = BaseClass.StampToDateTime((ItemRefund?.create_time).ParseToInt()).ToString("yyyy-MM-dd HH:mm:ss"); + this.RefundTimeVisibility = ItemRefund?.create_time > 0 ? Visibility.Visible : Visibility.Collapsed; + } + + public List ItemTransitOrders { get; set; } = new List(); + /// + /// 当前仓库订单(不可以是作废单) + /// + public oms_wei_external_procurement_log_info ItemTransitOrder + { + get { return this.GetValue(x => x.ItemTransitOrder); } + set { this.SetValue(x => x.ItemTransitOrder, value); } + } + /// + /// 当前仓库订单(可以是作废单) + /// + public oms_wei_external_procurement_log_info ItemTransitOrderWithVoid + { + get { return this.GetValue(x => x.ItemTransitOrderWithVoid); } + set { this.SetValue(x => x.ItemTransitOrderWithVoid, value); } + } + + public List ItemTransitOrderAfterSales { get; set; } = new List(); + public oms_wei_external_procurement_after_sale_info ItemTransitOrderAfterSale + { + get { return this.GetValue(x => x.ItemTransitOrderAfterSale); } + set { this.SetValue(x => x.ItemTransitOrderAfterSale, value); } + } + + public List PddBuyerOrders { get; set; } = new List(); + public order_pdd_buyer_order PddBuyerOrder + { + get { return this.GetValue(x => x.PddBuyerOrder); } + set { this.SetValue(x => x.PddBuyerOrder, value); } + } + public void SetTransitOrder() + { + this.ItemTransitOrder = ItemTransitOrders.FirstOrDefault(t => t.order_void_status != 1); + this.ItemTransitOrderWithVoid = ItemTransitOrders.FirstOrDefault(); + this.PddBuyerOrder = PddBuyerOrders?.FirstOrDefault(); + this.ItemTransitOrderAfterSale = ItemTransitOrderAfterSales.FirstOrDefault(); + + // 直接取号和更正取号显示的买手到仓库物流 + if (ItemTransitOrder?.pre_allocated_order_no != 1 && ItemTransitOrder?.pre_allocated_order_no != 3) + this.TransitOrderWaybillToWareHouseStr = null; + else + this.TransitOrderWaybillToWareHouseStr = "买手物流:" + ItemTransitOrder.express_1_company + "-" + ItemTransitOrder.express_1_waybill; + + // 提前取号物流 + if (ItemTransitOrder?.pre_allocated_order_no != 2) + this.TransitOrderWaybillFakeStr = null; + else + this.TransitOrderWaybillFakeStr = "取号物流:" + ItemTransitOrder.express_1_company + "-" + ItemTransitOrder.express_1_waybill; + + // 仓库下游物流 + if (ItemTransitOrder == null || ItemTransitOrder.express_2_company.IsNullOrEmpty() || ItemTransitOrder.express_2_waybill.IsNullOrEmpty()) + TransitOrderWaybillFromWareHouseStr = null; + else + TransitOrderWaybillFromWareHouseStr = "仓库物流:" + ItemTransitOrder.express_2_company + "-" + ItemTransitOrder.express_2_waybill; + + + if (this.order_id == "3737713100455836416") + { + + } + // 仓库物流售后按钮上的文字,仓库作废单不存在仓库物流,所以此处必须是有效的仓库单(含作废失败) + if (this.ItemTransitOrder == null || !this.ItemOrder.IsRefundWithCancel) + AddEditTransitWarehouseAfterSaleStr = ""; + else + AddEditTransitWarehouseAfterSaleStr = this.ItemTransitOrderAfterSale == null ? "添加" : "查看"; + } + + public string AddEditTransitWarehouseAfterSaleStr + { + get { return this.GetValue(x => x.AddEditTransitWarehouseAfterSaleStr); } + set { this.SetValue(x => x.AddEditTransitWarehouseAfterSaleStr, value); } } /// @@ -79,72 +163,29 @@ namespace AllBase.Model.DBModel set { this.SetValue(x => x.IsBuyGoodsBtnEnabled, value); } } - public List ItemTransitOrders { get; set; } = new List(); - /// - /// 当前仓库订单(不可以是作废单) - /// - public oms_wei_external_procurement_log_info ItemTransitOrder - { - get { return ItemTransitOrders.FirstOrDefault(t => t.order_void_status != 1); } - set { } - } - /// - /// 当前仓库订单(可以是作废单) - /// - public oms_wei_external_procurement_log_info ItemTransitOrderWithVoid - { - get { return ItemTransitOrders.FirstOrDefault(); } - set { } - } - - public List PddBuyerOrders { get; set; } = new List(); - public order_pdd_buyer_order PddBuyerOrder - { - get { return PddBuyerOrders.FirstOrDefault(); } - set { } - } - /// /// 拍单物流 /// public string TransitOrderWaybillToWareHouseStr { - get - { - // 直接取号和更正取号 - if (ItemTransitOrder?.pre_allocated_order_no != 1 && ItemTransitOrder?.pre_allocated_order_no != 3) - return null; - return "买手物流:" + ItemTransitOrder.express_1_company + "-" + ItemTransitOrder.express_1_waybill; - } - set { } + get { return this.GetValue(x => x.TransitOrderWaybillToWareHouseStr); } + set { this.SetValue(x => x.TransitOrderWaybillToWareHouseStr, value); } } /// /// 提前取号物流 /// public string TransitOrderWaybillFakeStr { - get - { - // 提前取号 - if (ItemTransitOrder?.pre_allocated_order_no != 2) - return null; - return "取号物流:" + ItemTransitOrder.express_1_company + "-" + ItemTransitOrder.express_1_waybill; - } - set { } + get { return this.GetValue(x => x.TransitOrderWaybillFakeStr); } + set { this.SetValue(x => x.TransitOrderWaybillFakeStr, value); } } /// /// 仓库物流 /// public string TransitOrderWaybillFromWareHouseStr { - get - { - // 仓库下游物流 - if (ItemTransitOrder == null || ItemTransitOrder.express_2_company.IsNullOrEmpty() || ItemTransitOrder.express_2_waybill.IsNullOrEmpty()) - return null; - return "仓库物流:" + ItemTransitOrder.express_2_company + "-" + ItemTransitOrder.express_2_waybill; - } - set { } + get { return this.GetValue(x => x.TransitOrderWaybillFromWareHouseStr); } + set { this.SetValue(x => x.TransitOrderWaybillFromWareHouseStr, value); } } public string BuyerTransitWaybillStatusStr { @@ -483,44 +524,33 @@ namespace AllBase.Model.DBModel /// /// 退款状态文本 /// - public string refundResultStr + public string RefundResultStr { - get - { - if (ItemRefund == null) - return ""; - if (ItemRefund.status != "MERCHANT_REFUND_SUCCESS" && ItemRefund.status != "MERCHANT_RETURN_SUCCESS") - return ""; - - return "商品退款数量:" + ItemRefund.count + ",订单状态:" + ItemOrder.orderStatusStr; - } - set { } + get { return this.GetValue(x => x.RefundResultStr); } + set { this.SetValue(x => x.RefundResultStr, value); } } public string ReturnWaybillId { - get { return ItemRefund?.return_waybill_id; } - set { } + get { return this.GetValue(x => x.ReturnWaybillId); } + set { this.SetValue(x => x.ReturnWaybillId, value); } } /// /// 订单退款时间 /// - public string refund_time_str + public string RefundTimeStr { - get { return BaseClass.StampToDateTime((ItemRefund?.create_time).ParseToInt()).ToString("yyyy-MM-dd HH:mm:ss"); } - set { } + get { return this.GetValue(x => x.RefundTimeStr); } + set { this.SetValue(x => x.RefundTimeStr, value); } } /// /// 订单退款时间可见 /// - public Visibility refund_time_visibility + public Visibility RefundTimeVisibility { - get - { - return (this.ItemRefund?.create_time) > 0 ? Visibility.Visible : Visibility.Collapsed; - } - set { } + get { return this.GetValue(x => x.RefundTimeVisibility); } + set { this.SetValue(x => x.RefundTimeVisibility, value); } } /// diff --git a/AllBase/Model/Division/Division.cs b/AllBase/Model/Division/Division.cs new file mode 100644 index 0000000..7b3fb9e --- /dev/null +++ b/AllBase/Model/Division/Division.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Division +{ + public class Division + { + public string code { get; set; } // "110000", + public string name { get; set; } // "北京市", + public string level { get; set; } // "province", + public List children { get; set; } + } +} diff --git a/Work/29WxOrderWork.csproj b/Work/29WxOrderWork.csproj index 434a251..9f12f51 100644 --- a/Work/29WxOrderWork.csproj +++ b/Work/29WxOrderWork.csproj @@ -117,6 +117,7 @@ + diff --git a/Work/Initialization.cs b/Work/Initialization.cs index fb64cb1..5ffc7db 100644 --- a/Work/Initialization.cs +++ b/Work/Initialization.cs @@ -1,4 +1,7 @@ using AllBase; +using AllBase.Helper; +using AllBase.Model.Division; +using NaiBa.Util; using NaiBa.Util.Extension; using System; using System.Collections.Generic; @@ -6,6 +9,7 @@ using System.Diagnostics; using System.Drawing; using System.Drawing.Text; using System.IO; +using System.IO.Compression; using System.Management; using System.Runtime.InteropServices; using System.Text; @@ -14,6 +18,7 @@ using System.Threading.Tasks; using System.Windows.Forms; using System.Xml; using Work.Api; +using Work.BaseForms; namespace Work { @@ -39,7 +44,7 @@ namespace Work //new Thread(Update).Start();//--------检查更新 //new Thread(GetAuthConfig).Start(); //new Thread(new JumpUpProductNew().Ini).Start(); - //new Thread(CheckFiles).Start(); + new Thread(CheckFiles).Start(); //new Thread(UpdateTime).Start(); //new Thread(GetMacCode).Start(); @@ -371,58 +376,87 @@ namespace Work /// private void CheckFiles() { - FileBase.DirectoryCreate("cefSharp"); - List files = new List(); - files.Add(new KeyValueBase("taobao_address.tjm", "taobao_address.js")); - files.Add(new KeyValueBase("1688_address.tjm", "1688address.js")); - files.Add(new KeyValueBase("CClib.dll", "CClib.ico")); - //files.Add(new KeyValueBase("pdd.dat", "pdd.ico")); - //files.Add(new KeyValueBase("WmCode.dll", "WmCode.ico")); - files.Add(new KeyValueBase("crawlerInfoInterface.js", "crawlerInfoInterface.js")); - files.Add(new KeyValueBase("crawlerInfo.js", "crawlerInfo.js")); - files.Add(new KeyValueBase("Interop.MSScriptControl.dll", "Interop.MSScriptControl.ico")); - //files.Add(new KeyValueBase("XGCode.dll", "XGCode.ico")); - files.Add(new KeyValueBase("Newtonsoft.Json.dll", "Newtonsoft.Json.dll")); - files.Add(new KeyValueBase("Newtonsoft.Json.xml", "Newtonsoft.Json.xml")); + //FileBase.DirectoryCreate("cefSharp"); + //List files = new List(); + //files.Add(new KeyValueBase("taobao_address.tjm", "taobao_address.js")); + //files.Add(new KeyValueBase("1688_address.tjm", "1688address.js")); + //files.Add(new KeyValueBase("CClib.dll", "CClib.ico")); + ////files.Add(new KeyValueBase("pdd.dat", "pdd.ico")); + ////files.Add(new KeyValueBase("WmCode.dll", "WmCode.ico")); + //files.Add(new KeyValueBase("crawlerInfoInterface.js", "crawlerInfoInterface.js")); + //files.Add(new KeyValueBase("crawlerInfo.js", "crawlerInfo.js")); + //files.Add(new KeyValueBase("Interop.MSScriptControl.dll", "Interop.MSScriptControl.ico")); + ////files.Add(new KeyValueBase("XGCode.dll", "XGCode.ico")); + //files.Add(new KeyValueBase("Newtonsoft.Json.dll", "Newtonsoft.Json.dll")); + //files.Add(new KeyValueBase("Newtonsoft.Json.xml", "Newtonsoft.Json.xml")); - files.Add(new KeyValueBase("zxing.dll", "zxing.dll")); - //files.Add(new KeyValueBase("NPOI.dll", "NPOI.dll")); - //files.Add(new KeyValueBase("NPOI.OOXML.dll", "NPOI.OOXML.dll")); - //files.Add(new KeyValueBase("NPOI.OpenXml4Net.dll", "NPOI.OpenXml4Net.dll")); - //files.Add(new KeyValueBase("NPOI.OpenXmlFormats.dll", "NPOI.OpenXmlFormats.dll")); - files.Add(new KeyValueBase("OrderComing.ico", "temp/OrderComing.wav")); - files.Add(new KeyValueBase("AfterSale.ico", "temp/AfterSale.wav")); - //files.Add(new KeyValueBase("9527.ico", "temp/9527.wav")); - //files.Add(new KeyValueBase("本墨绪圆.dll", "本墨绪圆.dll")); - //if(!File.Exists("cefSharp/CefSharp.dll")) - // files.Add(new KeyValueBase("cefSharp.zip", "cefSharp.zip")); - //files.Add(new KeyValueBase("icoz.ico", "icoz.ico")); - foreach (KeyValueBase k in files) - { - if (FileBase.Exists(k.Key)) - continue; - //if (k.Key.Contains("OrderComing.ico") || k.Key.Contains("AfterSale.ico")) - //{ - // if (GetHtml.DownloadFile("http://dl.qixiaoke.com/files/" + k.Key, k.Value)) - // FileBase.Move(k.Key + ".bak", k.Value); - //} - //else - //{ - // if (GetHtml.DownloadFile("http://dl.qixiaoke.com/files/" + k.Value, k.Key + ".bak")) - // FileBase.Move(k.Key + ".bak", k.Key); - //} - } - //if (FileBase.Exists("cefSharp.zip")) + //files.Add(new KeyValueBase("zxing.dll", "zxing.dll")); + ////files.Add(new KeyValueBase("NPOI.dll", "NPOI.dll")); + ////files.Add(new KeyValueBase("NPOI.OOXML.dll", "NPOI.OOXML.dll")); + ////files.Add(new KeyValueBase("NPOI.OpenXml4Net.dll", "NPOI.OpenXml4Net.dll")); + ////files.Add(new KeyValueBase("NPOI.OpenXmlFormats.dll", "NPOI.OpenXmlFormats.dll")); + //files.Add(new KeyValueBase("OrderComing.ico", "temp/OrderComing.wav")); + //files.Add(new KeyValueBase("AfterSale.ico", "temp/AfterSale.wav")); + ////files.Add(new KeyValueBase("9527.ico", "temp/9527.wav")); + ////files.Add(new KeyValueBase("本墨绪圆.dll", "本墨绪圆.dll")); + ////if(!File.Exists("cefSharp/CefSharp.dll")) + //// files.Add(new KeyValueBase("cefSharp.zip", "cefSharp.zip")); + ////files.Add(new KeyValueBase("icoz.ico", "icoz.ico")); + //foreach (KeyValueBase k in files) //{ - // ZipHelper.DecomparessFile(Application.StartupPath + @"\cefSharp.zip", - // Application.StartupPath + @"\cefSharp\"); - // FileBase.Delete("cefSharp.zip"); + // if (FileBase.Exists(k.Key)) + // continue; + // //if (k.Key.Contains("OrderComing.ico") || k.Key.Contains("AfterSale.ico")) + // //{ + // // if (GetHtml.DownloadFile("http://dl.qixiaoke.com/files/" + k.Key, k.Value)) + // // FileBase.Move(k.Key + ".bak", k.Value); + // //} + // //else + // //{ + // // if (GetHtml.DownloadFile("http://dl.qixiaoke.com/files/" + k.Value, k.Key + ".bak")) + // // FileBase.Move(k.Key + ".bak", k.Key); + // //} //} - //new Thread(new MulitServicerSet("拼多多商家").Login).Start(); + ////if (FileBase.Exists("cefSharp.zip")) + ////{ + //// ZipHelper.DecomparessFile(Application.StartupPath + @"\cefSharp.zip", + //// Application.StartupPath + @"\cefSharp\"); + //// FileBase.Delete("cefSharp.zip"); + ////} + ////new Thread(new MulitServicerSet("拼多多商家").Login).Start(); - // 取地址信息 - //new AddressSetIni().Ini(); - //new AddressSetIni().getAddress1688(); + //// 取地址信息 + ////new AddressSetIni().Ini(); + ////new AddressSetIni().getAddress1688(); + + // 区划 + if (!FileBase.Exists("temp\\Division60715")) + { + if (GetHtml.DownloadFile(BaseClass.ServerUrl + "/Download/" + "Division60715.zip", "temp\\Division60715.dll" + ".bak")) + { + FileBase.Move("temp\\Division60715.dll" + ".bak", "temp\\Division60715.zip"); + ZipFile.ExtractToDirectory(Path.Combine(Environment.CurrentDirectory, "temp\\Division60715.zip"), Path.Combine(Environment.CurrentDirectory, "temp")); + File.Delete(Path.Combine(Environment.CurrentDirectory, "temp\\Division60715.zip")); + } + } + if (1 == 1) + { + string filePath = Path.Combine(Environment.CurrentDirectory, "temp\\Division60715"); + using (StreamReader sr = new StreamReader(filePath, System.Text.Encoding.UTF8)) + { + try + { + string cateStr = sr.ReadToEnd().Trim(); + GlobalConfig.Divisions.AddRange(JsonHelper.DeserializeJsonToList(cateStr)); + } + catch (Exception ex) + { + BaseMsgForm.ShowError("区划获取失败:" + ex.Message); + if (GlobalConfig.Divisions == null) + GlobalConfig.Divisions = new ConcurrentList(); + } + } + } } /// /// 执行CMD命令 diff --git a/Work/UserLogin.cs b/Work/UserLogin.cs index d3eba73..a686d0f 100644 --- a/Work/UserLogin.cs +++ b/Work/UserLogin.cs @@ -132,8 +132,12 @@ namespace Work BaseClass.GroupId = BaseRegex.GetStringJson(ref html, "group_id").ParseToInt(); //BaseClass.AuthorizedAmount = BaseRegex.GetNullableDecimalJson(ref html, "authorized_amount"); BaseClass.Points = BaseRegex.GetStringJson(ref html, "points").ParseToInt(); - BaseClass.Balance = BaseRegex.GetDecimalJson(ref html, "balance"); BaseClass.ShopPointsPerMonth = BaseRegex.GetStringJson(ref html, "shop_points_per_month").ParseToInt(); + BaseClass.Balance = BaseRegex.GetDecimalJson(ref html, "balance"); + BaseClass.PostagePerOrder = Math.Max(2.2m, BaseRegex.GetDecimalJson(ref html, "postage_per_order")); + BaseClass.OemId = BaseRegex.GetStringJson(ref html, "oem_id"); + BaseClass.OemName = BaseRegex.GetStringJson(ref html, "oem_name"); + BaseClass.IsOemOwner = BaseRegex.GetBoolJson(ref html, "is_oem_owner"); if (BaseClass.GroupId != 3 && BaseClass.GroupId != 4 && BaseClass.GroupId != 9 && BaseClass.GroupId != 10 && BaseClass.GroupId != 11) { diff --git a/Work/_29Tools/Forms/PddMobileBuyOrderForm.cs b/Work/_29Tools/Forms/PddMobileBuyOrderForm.cs index 46d388c..f2e0582 100644 --- a/Work/_29Tools/Forms/PddMobileBuyOrderForm.cs +++ b/Work/_29Tools/Forms/PddMobileBuyOrderForm.cs @@ -23,6 +23,7 @@ using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices.ComTypes; +using System.Security.Policy; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -40,6 +41,7 @@ namespace TemuKJD.ToolForms { public bool IsAutoBuy { get; set; } = true; public bool IsFormLoad { get; set; } = false; + public bool ShowBuyMask { get; set; } = false; public int CloseAfterSecond { get; set; } public string InitUrl = ""; @@ -98,6 +100,27 @@ namespace TemuKJD.ToolForms }); } + if (this.ShowBuyMask == true) + { + Task.Run(() => + { + for (int i = 3; i > 0; i--) + { + Invoke(new Action(() => + { + this.pnlMask.Visible = true; + this.pnlMask.Text = "自动拍单倒计时\r\n" + i; + })); + Thread.Sleep(1000); + } + + Invoke(new Action(() => + { + this.pnlMask.Visible = false; + })); + }); + } + if (buyMap != null) { @@ -173,6 +196,7 @@ namespace TemuKJD.ToolForms cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged; cefWebBrowser.LoadError += CefWebBrowser_LoadError; cefWebBrowser.Dock = DockStyle.Fill; + cefWebBrowser.SendToBack(); //js绑定C#对象 //PDDShopBrowserObject shopObj = new PDDShopBrowserObject(); @@ -283,7 +307,11 @@ namespace TemuKJD.ToolForms //static int GetAntiContentsTimes = 40; private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData, IRequest request) { + Task.Run(() => { DoResourceLoadComplete(url, postData, responseData); }); + } + public void DoResourceLoadComplete(string url, string postData, string responseData) + { if (url.StartsWith("https://mobile.yangkeduo.com/order_checkout.html") && responseData.Contains("该商品已下架")) { IsSoldOut = true; @@ -348,12 +376,12 @@ namespace TemuKJD.ToolForms this.cmbTransitWarehouse.Text = ""; // 自动填写拍单信息界面 - this.txtBuyGoodsId.Text = goodsId.ParseToString(); - this.txtBuySkuId.Text = skuId.ParseToString(); - this.txtBuyGoodsName.Text = goodsName; - this.txtBuySkuName.Text = spec; - this.txtBuyCnt.Text = buyCnt.ParseToString(); - this.txtBuyPrice.Text = (buyPrice * 0.01m).ParseToString(); + if (!goodsId.IsNullOrZero()) this.txtBuyGoodsId.Text = goodsId.ParseToString(); + if (!skuId.IsNullOrZero()) this.txtBuySkuId.Text = skuId.ParseToString(); + if (!goodsName.IsNullOrEmpty()) this.txtBuyGoodsName.Text = goodsName; + if (!spec.IsNullOrEmpty()) this.txtBuySkuName.Text = spec; + if (!buyCnt.IsNullOrZero()) this.txtBuyCnt.Text = buyCnt.ParseToString(); + if (!buyPrice.IsNullOrZero()) this.txtBuyPrice.Text = (buyPrice * 0.01m).ParseToString(); })); }); } @@ -392,12 +420,12 @@ namespace TemuKJD.ToolForms var buyPrice = BaseRegex.GetIntJson(ref data, "pay_price"); Invoke(new Action(() => { - this.txtBuyGoodsId.Text = goodsId.ParseToString(); - this.txtBuySkuId.Text = skuId.ParseToString(); - this.txtBuyGoodsName.Text = goodsName; - this.txtBuySkuName.Text = spec; - this.txtBuyCnt.Text = buyCnt.ParseToString(); - this.txtBuyPrice.Text = (buyPrice * 0.01m).ParseToString(); + if (!goodsId.IsNullOrZero()) this.txtBuyGoodsId.Text = goodsId.ParseToString(); + if (!skuId.IsNullOrZero()) this.txtBuySkuId.Text = skuId.ParseToString(); + if (!goodsName.IsNullOrEmpty()) this.txtBuyGoodsName.Text = goodsName; + if (!spec.IsNullOrEmpty()) this.txtBuySkuName.Text = spec; + if (!buyCnt.IsNullOrZero()) this.txtBuyCnt.Text = buyCnt.ParseToString(); + if (!buyPrice.IsNullOrZero()) this.txtBuyPrice.Text = (buyPrice * 0.01m).ParseToString(); })); Invoke(new Action(() => @@ -406,12 +434,12 @@ namespace TemuKJD.ToolForms var transit = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransDetailAddress == txtBuyTransitWarehouse.Text.Trim()); if (transit != null && IsChangeAddress == false && HasChangeAddress == false) { - if(!IsSoldOut) + if (!IsSoldOut) { Task.Run(() => { IsChangeAddress = true; - Thread.Sleep(1000); + Thread.Sleep(100); var sourceCodeRst = GetSourceCode(transit); if (sourceCodeRst.Contains("失败")) { @@ -445,14 +473,16 @@ namespace TemuKJD.ToolForms } // 订单提交接口 + //https://mobile.yangkeduo.com/proxy/api/order/prepay?pdduid=8161628055192 if (url.StartsWith("https://mobile.yangkeduo.com/proxy/api/order/prepay?pdduid=")) { + var data = postData; Task.Run(() => { - var data = postData; - Invoke(new Action(() => + Invoke(new Action(() => { - txtBuyOrderId.Text = BaseRegex.GetStringJson(ref data, "order_sn"); + //txtBuyOrderId.Text = BaseRegex.GetStringJson(ref data, "order_sn"); + txtBuyOrderId.Text = BaseRegex.GetStringJsonByRegs(ref data, "", "order_sn", "orderSn"); })); }); } @@ -508,9 +538,19 @@ namespace TemuKJD.ToolForms /// public string ChangeAddress(TransitWarehouseParam transit) { - Thread.Sleep(1000); + Thread.Sleep(200); var host = cefWebBrowser.GetBrowser().GetHost(); var client = cefWebBrowser.GetDevToolsClient(); + for (int i = 0; i < 20; i++) + { + Thread.Sleep(50); + if (host == null || client == null) + { + host = cefWebBrowser.GetBrowser().GetHost(); + client = cefWebBrowser.GetDevToolsClient(); + continue; + } + } if (host == null || client == null) { return "页面未加载"; @@ -521,53 +561,99 @@ namespace TemuKJD.ToolForms //for (i=0; i< elements.length;i++){ // var element = elements[i]; // if (element.outerHTML.indexOf('当前收货地址为') >= 0) { - element.click(); + element.click(); + return 'success'; // break; // } //} })();"; var ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true); ts1.Wait(5000); - Thread.Sleep(Randomx.GetId(1500, 2500)); + for (int i = 0; i < 20; i++) + { + if (ts1.Result.Result.Value is string rstStr) + { + if (rstStr == "success") + break; + } + Thread.Sleep (100); + ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true); + ts1.Wait(5000); + } + //Thread.Sleep(Randomx.GetId(1500, 2500)); + Thread.Sleep(Randomx.GetId(300, 500)); jsStr1 = @"(function() { var elements = document.getElementsByTagName('span'); for (i=0; i< elements.length;i++){ var element = elements[i]; if (element.innerHTML.indexOf('修改') == 0) { element.click(); - break; + return 'success'; } } })();"; ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true); - ts1.Wait(5000); - Thread.Sleep(Randomx.GetId(1500, 2500)); + for (int i = 0; i < 20; i++) + { + if (ts1.Result.Result.Value is string rstStr) + { + if (rstStr == "success") + break; + } + Thread.Sleep(100); + ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true); + ts1.Wait(5000); + } + //Thread.Sleep(Randomx.GetId(1500, 2500)); + Thread.Sleep(Randomx.GetId(300, 500)); jsStr1 = @"(function() { var elements = document.getElementsByTagName('span'); for (i=0; i< elements.length;i++){ var element = elements[i]; if (element.innerHTML.indexOf('保存') == 0) { element.click(); - break; + return 'success'; } } })();"; ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true); - ts1.Wait(5000); - Thread.Sleep(Randomx.GetId(1500, 2500)); + for (int i = 0; i < 20; i++) + { + if (ts1.Result.Result.Value is string rstStr) + { + if (rstStr == "success") + break; + } + Thread.Sleep(100); + ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true); + ts1.Wait(5000); + } + //Thread.Sleep(Randomx.GetId(1500, 2500)); + Thread.Sleep(Randomx.GetId(300, 500)); jsStr1 = @"(function() { var elements = document.getElementsByTagName('div'); for (i = elements.length - 1; i >= 0; i--){ var element = elements[i]; if (element.innerHTML.indexOf('" + txtBuyTransitWarehouse.Text.Trim() + @"') >= 0) { element.click(); - break; + return 'success'; } } })();"; ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true); - ts1.Wait(5000); - Thread.Sleep(Randomx.GetId(1500, 2500)); + for (int i = 0; i < 20; i++) + { + if (ts1.Result.Result.Value is string rstStr) + { + if (rstStr == "success") + break; + } + Thread.Sleep(100); + ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true); + ts1.Wait(5000); + } + //Thread.Sleep(Randomx.GetId(1500, 2500)); + Thread.Sleep(Randomx.GetId(300, 500)); return ""; } @@ -808,6 +894,7 @@ namespace TemuKJD.ToolForms { body["userName"] = BaseClass.UserName; // 软件端用户名 body["purchaserNote"] = BaseClass.UserName + "-" + BaseClass.NickName; // 购买软件账户备注 + body["postage"] = (BaseClass.PostagePerOrder * 100).ParseToInt() + ""; } var url = "https://po.e57.cn/prod-api/api/oms-api/externalProcurement/saveOrUpdate"; var dataStr = JsonHelper.SerializeObject(body); @@ -855,6 +942,7 @@ namespace TemuKJD.ToolForms out_order_no = txtBuyOrderId.Text.Trim(), purchaser_note = body["purchaserNote"].ParseToString(), }); + orderItem.SetTransitOrder(); // 利润计算重置为最小值,控件Resource更新时将计算利润 orderItem.ProfitCount = decimal.MinValue; var order = orderItem.ItemOrder; diff --git a/Work/_29Tools/Forms/PddMobileBuyOrderForm.designer.cs b/Work/_29Tools/Forms/PddMobileBuyOrderForm.designer.cs index 877daaf..0e564ac 100644 --- a/Work/_29Tools/Forms/PddMobileBuyOrderForm.designer.cs +++ b/Work/_29Tools/Forms/PddMobileBuyOrderForm.designer.cs @@ -31,6 +31,7 @@ this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PddMobileBuyOrderForm)); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.pnlMask = new DevComponents.DotNetBar.PanelEx(); this.btnJumpOrderList = new DevComponents.DotNetBar.PanelEx(); this.txtBuySkuName = new System.Windows.Forms.TextBox(); this.label21 = new System.Windows.Forms.Label(); @@ -94,11 +95,13 @@ this.btnReMap = new DevComponents.DotNetBar.PanelEx(); this.label25 = new System.Windows.Forms.Label(); this.txtBuyTransitWarehouse = new System.Windows.Forms.TextBox(); + this.label29 = new System.Windows.Forms.Label(); this.pnlMap = new System.Windows.Forms.Panel(); this.chkAutoChangeWarehouseAddress = new Work.UserComponents.UcCheckBox(this.components); this.pictureBox1 = new System.Windows.Forms.PictureBox(); ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); this.splitContainer1.Panel2.SuspendLayout(); this.splitContainer1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); @@ -127,6 +130,10 @@ this.splitContainer1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.splitContainer1.Name = "splitContainer1"; this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.pnlMask); this.splitContainer1.Panel1MinSize = 0; // // splitContainer1.Panel2 @@ -139,6 +146,31 @@ this.splitContainer1.SplitterWidth = 3; this.splitContainer1.TabIndex = 4; // + // pnlMask + // + this.pnlMask.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlMask.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlMask.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlMask.Dock = System.Windows.Forms.DockStyle.Fill; + this.pnlMask.Font = new System.Drawing.Font("微软雅黑", 50F); + this.pnlMask.Location = new System.Drawing.Point(0, 0); + this.pnlMask.Name = "pnlMask"; + this.pnlMask.Size = new System.Drawing.Size(864, 700); + this.pnlMask.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlMask.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(245)))), ((int)(((byte)(235)))), ((int)(((byte)(255))))); + this.pnlMask.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(245)))), ((int)(((byte)(235)))), ((int)(((byte)(255))))); + this.pnlMask.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlMask.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(152)))), ((int)(((byte)(99)))), ((int)(((byte)(143))))); + this.pnlMask.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(152)))), ((int)(((byte)(99)))), ((int)(((byte)(143))))); + this.pnlMask.Style.GradientAngle = 90; + this.pnlMask.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlMask.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(107)))), ((int)(((byte)(83)))), ((int)(((byte)(147))))); + this.pnlMask.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(107)))), ((int)(((byte)(83)))), ((int)(((byte)(147))))); + this.pnlMask.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.pnlMask.TabIndex = 881; + this.pnlMask.Text = "自动拍单倒计时\r\n8"; + this.pnlMask.Visible = false; + // // btnJumpOrderList // this.btnJumpOrderList.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); @@ -367,9 +399,9 @@ this.btnManualUpdateTransitWarehouse.Cursor = System.Windows.Forms.Cursors.Hand; this.btnManualUpdateTransitWarehouse.DisabledBackColor = System.Drawing.Color.Empty; this.btnManualUpdateTransitWarehouse.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnManualUpdateTransitWarehouse.Location = new System.Drawing.Point(348, 175); + this.btnManualUpdateTransitWarehouse.Location = new System.Drawing.Point(368, 175); this.btnManualUpdateTransitWarehouse.Name = "btnManualUpdateTransitWarehouse"; - this.btnManualUpdateTransitWarehouse.Size = new System.Drawing.Size(114, 23); + this.btnManualUpdateTransitWarehouse.Size = new System.Drawing.Size(94, 23); this.btnManualUpdateTransitWarehouse.Style.Alignment = System.Drawing.StringAlignment.Center; this.btnManualUpdateTransitWarehouse.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(152)))), ((int)(((byte)(99)))), ((int)(((byte)(143))))); this.btnManualUpdateTransitWarehouse.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(152)))), ((int)(((byte)(99)))), ((int)(((byte)(143))))); @@ -523,9 +555,9 @@ this.btnManualUpdateBuyOrder.Cursor = System.Windows.Forms.Cursors.Hand; this.btnManualUpdateBuyOrder.DisabledBackColor = System.Drawing.Color.Empty; this.btnManualUpdateBuyOrder.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnManualUpdateBuyOrder.Location = new System.Drawing.Point(348, 198); + this.btnManualUpdateBuyOrder.Location = new System.Drawing.Point(368, 198); this.btnManualUpdateBuyOrder.Name = "btnManualUpdateBuyOrder"; - this.btnManualUpdateBuyOrder.Size = new System.Drawing.Size(114, 23); + this.btnManualUpdateBuyOrder.Size = new System.Drawing.Size(94, 23); this.btnManualUpdateBuyOrder.Style.Alignment = System.Drawing.StringAlignment.Center; this.btnManualUpdateBuyOrder.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(152)))), ((int)(((byte)(99)))), ((int)(((byte)(143))))); this.btnManualUpdateBuyOrder.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(152)))), ((int)(((byte)(99)))), ((int)(((byte)(143))))); @@ -568,9 +600,9 @@ this.btnManualUpdateSendProvince.Cursor = System.Windows.Forms.Cursors.Hand; this.btnManualUpdateSendProvince.DisabledBackColor = System.Drawing.Color.Empty; this.btnManualUpdateSendProvince.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnManualUpdateSendProvince.Location = new System.Drawing.Point(348, 115); + this.btnManualUpdateSendProvince.Location = new System.Drawing.Point(368, 115); this.btnManualUpdateSendProvince.Name = "btnManualUpdateSendProvince"; - this.btnManualUpdateSendProvince.Size = new System.Drawing.Size(114, 23); + this.btnManualUpdateSendProvince.Size = new System.Drawing.Size(94, 23); this.btnManualUpdateSendProvince.Style.Alignment = System.Drawing.StringAlignment.Center; this.btnManualUpdateSendProvince.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(152)))), ((int)(((byte)(99)))), ((int)(((byte)(143))))); this.btnManualUpdateSendProvince.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(152)))), ((int)(((byte)(99)))), ((int)(((byte)(143))))); @@ -662,7 +694,7 @@ this.txtSendProvince.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.txtSendProvince.Location = new System.Drawing.Point(74, 115); this.txtSendProvince.Name = "txtSendProvince"; - this.txtSendProvince.Size = new System.Drawing.Size(268, 23); + this.txtSendProvince.Size = new System.Drawing.Size(288, 23); this.txtSendProvince.TabIndex = 467; // // splitContainer2 @@ -811,6 +843,7 @@ this.pnlBuy.Controls.Add(this.txtBuyGoodsName); this.pnlBuy.Controls.Add(this.txtBuyPrice); this.pnlBuy.Controls.Add(this.label24); + this.pnlBuy.Controls.Add(this.label29); this.pnlBuy.Location = new System.Drawing.Point(12, 291); this.pnlBuy.Name = "pnlBuy"; this.pnlBuy.Size = new System.Drawing.Size(468, 226); @@ -844,7 +877,7 @@ this.btnReMap.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.btnReMap.Location = new System.Drawing.Point(9, 198); this.btnReMap.Name = "btnReMap"; - this.btnReMap.Size = new System.Drawing.Size(114, 23); + this.btnReMap.Size = new System.Drawing.Size(94, 23); this.btnReMap.Style.Alignment = System.Drawing.StringAlignment.Center; this.btnReMap.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(245)))), ((int)(((byte)(235)))), ((int)(((byte)(255))))); this.btnReMap.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(245)))), ((int)(((byte)(235)))), ((int)(((byte)(255))))); @@ -879,6 +912,16 @@ this.txtBuyTransitWarehouse.Size = new System.Drawing.Size(388, 23); this.txtBuyTransitWarehouse.TabIndex = 870; // + // label29 + // + this.label29.AutoSize = true; + this.label29.ForeColor = System.Drawing.Color.SandyBrown; + this.label29.Location = new System.Drawing.Point(121, 201); + this.label29.Name = "label29"; + this.label29.Size = new System.Drawing.Size(248, 17); + this.label29.TabIndex = 892; + this.label29.Text = "如自动识别失败,请填写后点击手动确认拍单"; + // // pnlMap // this.pnlMap.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) @@ -943,6 +986,7 @@ this.Load += new System.EventHandler(this.PddBuyOrderForm_Load); this.Controls.SetChildIndex(this.splitContainer2, 0); ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.splitContainer1.Panel1.ResumeLayout(false); this.splitContainer1.Panel2.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); this.splitContainer1.ResumeLayout(false); @@ -1031,5 +1075,7 @@ private Work.UserComponents.UcCheckBox chkUseAppBalance; private System.Windows.Forms.Label label28; private System.Windows.Forms.TextBox txtSourceCode; + private System.Windows.Forms.Label label29; + public DevComponents.DotNetBar.PanelEx pnlMask; } } \ No newline at end of file