diff --git a/29WxOrderWpf/BaseWindows/BaseMsgWindow.xaml.cs b/29WxOrderWpf/BaseWindows/BaseMsgWindow.xaml.cs index 528b65a..dc53f0f 100644 --- a/29WxOrderWpf/BaseWindows/BaseMsgWindow.xaml.cs +++ b/29WxOrderWpf/BaseWindows/BaseMsgWindow.xaml.cs @@ -1,4 +1,5 @@ using AllBase.Helper; +using NaiBa.Util.Extension; using System; using System.Collections.Generic; using System.Linq; @@ -76,7 +77,7 @@ namespace _29WxOrderWpf.BaseWindows return msgBox; } - public static BaseMsgWindow ShowConfirm(string msg, string caption = "", Window window = null, MsgWindowLevel fl = MsgWindowLevel.MEDIUM) + public static BaseMsgWindow ShowConfirm(string msg, string caption = "", Window window = null, MsgWindowLevel fl = MsgWindowLevel.MEDIUM, int? boxHeight = null) { string title = string.IsNullOrEmpty(caption) ? "确认系统提示" : caption; @@ -94,7 +95,9 @@ namespace _29WxOrderWpf.BaseWindows if (fl.Equals(MsgWindowLevel.LARGE)) { msgBox.Width = (int)MsgWindowLevel.LARGE; - msgBox.Height = 500; + if (boxHeight == null) + boxHeight = 500; + msgBox.Height = boxHeight.ParseToInt(); } //msgBox.Owner = owner; msgBox.ShowDialog(); diff --git a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml index e48bb76..1699021 100644 --- a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml +++ b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml @@ -166,7 +166,7 @@ + ColumnHeaderHeight="30" LoadingRow="dgBuyerOrder_LoadingRow" SelectionChanged="dgBuyerOrder_SelectionChanged"> diff --git a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs index 3b2186f..a98add5 100644 --- a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs +++ b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs @@ -44,6 +44,7 @@ using Work._29Tools.CefTools; using Work.BaseForms; using Work.BuyUsers; using static System.Windows.Forms.VisualStyles.VisualStyleElement.Tab; +using WxOrder.Framework.Commons; namespace _29WxOrderWpf.Ctrls.BuyerCtrls { @@ -51,8 +52,11 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls /// PDDBuyerOrderReadCtrl.xaml 的交互逻辑 /// public partial class PDDBuyerOrderReadCtrl : UserControl - { - ChromiumWebBrowser cefWebBrowser = null; + { + Dictionary dicPddPickInfo = new Dictionary(); + ConcurrentList lstSyncLogistics = new ConcurrentList(); + + ChromiumWebBrowser cefWebBrowser = null; public string cefAddress = ""; public static ConcurrentList lstPddBuyerOrderInfoLite { get; set; } = new ConcurrentList(); public static ObservableCollection lstFilterPddBuyerOrderInfoLite { get; set; } = new ObservableCollection(); @@ -297,6 +301,31 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls { var url1 = url; var data1 = responseData; + var send1 = sender; + //https://mobile.yangkeduo.com/psnl_goods_help.html?_t_module_name=assistant_search&refer_scene=no_pickup_package_express&refer_page_name=goods_express&refer_page_id=10007_1790161262817_kcbn4ajosu&refer_page_sn=10007 + //https://mobile.yangkeduo.com/psnl_goods_help.html?_t_module_name=assistant_search&refer_scene=no_pickup_package_express&refer_page_name=goods_express&refer_page_id=10007_1790161262817_kcbn4ajosu&refer_page_sn=10007&show_no_pickup_package=0&tab_id=400&tab_type=1&list_index=80 + if (url1.StartsWith ("https://mobile.yangkeduo.com/psnl_goods_help.html?_t_module_name=assistant_search&refer_scene=no_pickup_package_express&refer_page_name=goods_express") || + data1.Contains("\"pick_code\":\"取件码") /*|| data.Contains("21-2110")*/) + { + try + { + var combine_track_list = BaseRegex.GetJsonArrStrJson(ref data1, "combine_track_list"); + var noPickupPackageData = BaseRegex.GetJsonObjStrJson(ref data1, "noPickupPackageData").FirstOrDefault(); + if (!noPickupPackageData.IsNullOrEmpty() && send1 is ChromiumWebBrowser cef) + { + var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(buy => buy.wpf_browser == cef); + if (buyer != null) + { + dicPddPickInfo[buyer] = JsonHelper.DeserializeJsonToObject(noPickupPackageData); + } + } + } + catch + { + } + } + + if (data1.Contains("214874201671006")) { @@ -660,8 +689,20 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls } - // 根据拼多多外采订单列表查询中转仓订单信息 - var transitOrderList = GetOrderTransitWarehouseInfo(out_order_nos); + // 装载同步单 + var syncOrderList = OrderListCtrl.GetSyncLogistics(out_order_nos); + foreach (var syncOrder in syncOrderList) + { + if (!lstSyncLogistics.Contains(syncOrder)) + lstSyncLogistics.Add(syncOrder); + else + { + lstSyncLogistics.RemoveAll(o => o.order_id == syncOrder.order_id); + lstSyncLogistics.Add(syncOrder); + } + } + // 根据拼多多外采订单列表查询中转仓订单信息 + var transitOrderList = GetOrderTransitWarehouseInfo(out_order_nos); // 根据拼多多外采订单列表查询订单扩展信息 var orderExtList = GetOrderItemExtInfo(out_order_nos); @@ -692,7 +733,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls o.buyerId = buyer.buyer_id; o.buyerName = buyer.buyer_name; - if (o.order_sn == "260817-535832839751006") + if (o.order_sn == "260923-573109716621688") { } @@ -752,18 +793,20 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls } else { - - string orderStr = JsonHelper.SerializeObject(order); + string orderStr = JsonHelper.SerializeObject(order); string oStr = JsonHelper.SerializeObject(o); if (JsonHelper.SerializeObject(order) != JsonHelper.SerializeObject(o)) { - if (order.order_sn == "260730-501334709841478") - { - - } - order.WxSendTypeStr = o.WxSendTypeStr; - if (order.WxSendTypeStr == "直发") + if (!o.tracking_number.IsNullOrEmpty() && o.tracking_number != order.tracking_number) + isUpdate = true; + if (!o.outExpressCompanyCode.IsNullOrEmpty() && o.outExpressCompanyCode != order.outExpressCompanyCode) + isUpdate = true; + if (o.order_status_prompt != order.order_status_prompt) + isUpdate = true; + + + if (order.WxSendTypeStr == "直发") { if (order.order_status_prompt.Contains("待发货") && !o.order_status_prompt.Contains("待发货")) order.sendStatus = ""; @@ -848,10 +891,6 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls // 根据订单状态 取号/修改取号 if (order.WxSendTypeStr == "直发") { - if (order.order_sn == "260802-185262415501688") - { - - } // 微信售后,客户端取消直发买手订单 if (order.ShopOrderRefundStr.ParseToString().Contains("售后")) { @@ -862,7 +901,8 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls isUpdate = true; } } - SendOrderE57(order); + if (GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill != true) + SendOrderE57(order); } else { @@ -888,8 +928,13 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls SendTransitOrderE57(order); } - if (isUpdate && !string.IsNullOrEmpty(order.ShopOrderIdStr)/* && order.WxSendTypeStr != "直发"*/) + if (order.order_sn == "260923-399088033421688") + { + + } + if (isUpdate && !string.IsNullOrEmpty(order.ShopOrderIdStr)/* && order.WxSendTypeStr != "直发"*/) { + // 买手订单状态记录到数据库 order_pdd_buyer_order pddBuyerOrder = new order_pdd_buyer_order() { @@ -929,8 +974,26 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls var html3 = GetHtml.PostUtf8(url3, data3); if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200")) html3 = GetHtml.PostUtf8(url3, data3); - } - }); + + //勾选了调用同步单接口,必须直发且库里已有物流单号 + if (order.WxSendTypeStr == "直发") + { + if (GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill && !string.IsNullOrEmpty(order.tracking_number) && html3.Contains("\"code\":200")) + if (!lstSyncLogistics.Any(o => o.order_id == order.order_sn) || lstSyncLogistics.Any(o => o.order_id == order.order_sn && o.tracking_number.IsNullOrEmpty())) + SendAsyncWaybillOrder(order); + } + } + + if (order.WxSendTypeStr == "直发") + { + if (GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill && !string.IsNullOrEmpty(order.tracking_number)) + { + if (lstSyncLogistics.Any(o => o.order_id == order.order_sn)) + if (lstSyncLogistics.Any(o => o.order_id == order.order_sn && o.upload_pickup_status == 0)) + SetPickUpNo(order); + } + } + }); } NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); } @@ -1406,7 +1469,10 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls var t = WPFCEFBrowser.SetCookieAsync(JsonHelper.SerializeObject(cookieLst), buyer.wpf_browser.GetCookieManager(null)); t.Wait(); - buyer.wpf_browser.Load("https://mobile.yangkeduo.com/personal.html"); + buyer.wpf_browser.Load("https://mobile.yangkeduo.com/psnl_goods_help.html?_t_module_name=assistant_search&refer_scene=no_pickup_package_express&refer_page_name=goods_express"); + Thread.Sleep(Randomx.GetId(2000, 3000)); + + buyer.wpf_browser.Load("https://mobile.yangkeduo.com/personal.html"); Thread.Sleep(Randomx.GetId(2000, 3000)); string readBuyer = ""; @@ -1704,7 +1770,12 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls } if (buyerOrder.WxSendTypeStr == "直发") - SendOrderE57(buyerOrder); + { + if (GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill) + SendAsyncWaybillOrder(buyerOrder); + else + SendOrderE57(buyerOrder); + } else SendTransitOrderE57(buyerOrder, true); @@ -1912,10 +1983,15 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls order.sendStatus = ""; Thread.Sleep(100); - if (order.order_sn == "260730-501334709841478") - { + if (GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill) + { + return; + } - } + if (order.sendStatus.ParseToString().Contains("同步单已发货")) + { + return; + } if (order.sendStatus.ParseToString().Contains("外采订单已发货") || order.sendStatus.ParseToString().Contains("微信发货成功") || order.sendStatus.ParseToString().Contains("已发送待发货订单") || order.sendStatus.ParseToString().Contains("接收成功") || @@ -1998,6 +2074,123 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls } } + public void SetPickUpNo(PddBuyerOrderLiteInfo order) + { + try + { + if (lstSyncLogistics.Any(o => o.order_id == order.order_sn && o.upload_pickup_status > 0)) + return; + + var pickupCode = ""; // "21-22-2110"; + //var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == order.buyerId); + //if (dicPddPickInfo.Keys.Contains(buyer)) + foreach(var buyer in dicPddPickInfo.Keys) + { + try + { + var pddPickInfo = dicPddPickInfo[buyer]; + foreach (var combine in pddPickInfo.combine_list) + { + foreach (var combine_track in combine.combine_track_list) + { + if (combine_track.order_sn == order.order_sn) + { + pickupCode = combine_track.pick_code.Replace("取件码", "").Trim(); + } + } + } + } + catch + { + } + } + + if (!string.IsNullOrEmpty(pickupCode)) + { + // 填写取件码 + var url4 = BaseClass.Build29WxObjString("vlc/UploadPickup"); + var data4 = UserLogin.GetSignPostData(new + { + orderId = order.order_sn, + pickupCode = pickupCode, + }); + var html4 = GetHtml.PostJson(url4, data4); + //{"data":true,"code":200,"msg":"操作成功","isSuccess":true} + } + } + catch + { + + } + } + + public void SendAsyncWaybillOrder(PddBuyerOrderLiteInfo order) + { + try + { + var wxOrder = GetOrderInfo(order.ShopOrderIdStr).FirstOrDefault(); + if (wxOrder == null) + throw new Exception("买手单对应微信订单不存在!"); + var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ErpShopId == wxOrder.shop_id.ToString()); + if (shop == null) + throw new Exception("买手单对应店铺不存在!"); + + var apiSearchDropship = new WxApiBLL().WxApiDropshipSearch(shop, order.ShopOrderIdStr, 100); + if (!apiSearchDropship.Contains("\"errcode\":0")) + throw new Exception("同步单代发查询失败!" + BaseRegex.GetStringJson(ref apiSearchDropship, "msg")); + var dsOrderId = JsonHelper.JObjectParse(apiSearchDropship)["ds_order_id_list"].FirstOrDefault().ParseToString(); + if (string.IsNullOrEmpty(dsOrderId)) + throw new Exception("同步单代发单号获取失败!"); + + var url3 = BaseClass.Build29WxObjString("vlc/Buy"); + var data3 = UserLogin.GetSignPostData(new { + orderId = order.order_sn, + agentOrderId = dsOrderId, + }); + var html3 = GetHtml.PostJson(url3, data3); + var test = "{\"data\":[{\"orderId\":\"260923-399088033421688\",\"trackingNumber\":\"37300000114322\",\"sourceTrackingNumber\":\"JT5528345110252\"}],\"code\":200,\"msg\":\"操作成功\",\"isSuccess\":true}"; + //{"data":[{"orderId":"260923-399088033421688","trackingNumber":"37300000114322","sourceTrackingNumber":"JT5528345110252"}],"code":200,"msg":"操作成功","isSuccess":true} + //Result + + if (html3.Contains("\"code\":200")) + { + var mainOrder = GlobalConfig.lstOrder.FirstOrDefault(o => o.order_id == order.ShopOrderIdStr); + if (mainOrder != null) + mainOrder.SyncWaybillId = BaseRegex.GetStringJson(ref html3, "trackingNumber"); + + var url = BaseClass.Build29WxObjString("order/wx_update_erp_out_waybill_status"); + var data = UserLogin.GetSignaturex(); + data += "&order_id=" + order.ShopOrderIdStr; + data += "&out_express_company=" + order.outExpressCompanyCode; + data += "&out_express_no=" + order.tracking_number; + var html = GetHtml.PostUtf8(url, data); + if (!html.Contains("\"code\":200")) + html = GetHtml.PostUtf8(url, data); + } + else + { + var err = BaseRegex.GetStringJson(ref html3, "msg"); + throw new Exception(err); + } + } + catch (Exception ex) + { + var mainOrder = GlobalConfig.lstOrder.FirstOrDefault(o => o.order_id == order.ShopOrderIdStr); + if (mainOrder != null) + mainOrder.SyncLogisticsMsg = ex.Message; + + var url3 = BaseClass.Build29WxObjString("order/wx_add_mdy_buyer_order"); + var data3 = UserLogin.GetSignaturex(); + data3 += "&sync_logistics_msg=" + ex.Message; + data3 += "&pdd_order_sn=" + order.order_sn; + 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")) + html3 = GetHtml.PostUtf8(url3, data3); + } + } + // 向服务端更新售后退货信息更新状态 直发外采信息 public void SendAfterSaleE57(PddBuyerAfterSaleLiteInfo afterSale, bool resetSendStatus = false, bool isManualSendNoRecordCancelOrder = false) { @@ -2510,9 +2703,14 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls if (sender is TextBox txtBuyerNick) txtBuyerNick.AddHandler(TextBox.MouseUpEvent, new MouseButtonEventHandler(txtBuyerNick_MouseLeftButtonDown), true); } - } - public class YkdBuyerOrder + private void dgBuyerOrder_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + + } + } + + public class YkdBuyerOrder { public static string GetInitAfterSale(BuyerLoginInfo buyer, string orderSn) { diff --git a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerSelectCtrl.xaml b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerSelectCtrl.xaml index 5f47513..c6c78f2 100644 --- a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerSelectCtrl.xaml +++ b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerSelectCtrl.xaml @@ -186,11 +186,14 @@ Width="24" Height="24" Margin="4,0,0,0" + c:DebugVisibility.Enable="True" + d:Visibility="Visible" Click="btnSwitch_Click" Style="{StaticResource BasePageButtonStyle}"> + Click="chkSyncDirectOrderWaybill_Click" + IsChecked="False" /> @@ -303,6 +301,26 @@ Grid.Row="1" Margin="8,0,0,2"> + + - + (); orderFilterConfig.txtFilterShopNameText = ""; + chkSyncDirectOrderWaybill.IsChecked = GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill; + dateStart.SelectedDate = DateTime.Now.Date.AddDays(-7); dateEnd.SelectedDate = DateTime.Now.Date.AddDays(1).AddSeconds(-1); @@ -304,6 +306,10 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls // 读取暂时记录的买手售后单,后面想办法放到中转订单库里去 var pddBuyerAfterSales = GetPddBuyerAfterSales(order_ids); + // 同步单 + var buyerIds = string.Join(",", pddBuyerOrders.Select(o => o.order_sn)); + var syncLogistics = GetSyncLogistics(buyerIds); + // 读取关联拍单商品 var buyMapList = GetBuyProdMap(orderItems); @@ -371,6 +377,13 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls // 装载订单售后详情 order.refundItems = new ObservableCollection(refunds.Where(of => of.order_id == order.order_id)); + // 装载同步单 + order.SyncLogisticsList = [.. syncLogistics.Where(os => order.orderItems.Any(oi => oi.DirectPddBuyerOrders.Any(od => od.order_sn == os.order_id))),]; + if (order.SyncLogisticsList.Count > 0) + { + + } + if (order.order_id.Contains("3738794693820307200")) { @@ -698,6 +711,34 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls return new List(); } + public static List GetSyncLogistics(string buyer_order_ids) + { + var url6 = BaseClass.Build29WxObjString("order/wx_get_sync_waybill"); + var data6 = UserLogin.GetSignaturex(); + data6 += "&order_id=" + buyer_order_ids; + List pddBuyerAfterSales = new List(); + if (!string.IsNullOrEmpty(buyer_order_ids)) + { + var html6 = GetHtml.PostUtf8(url6, data6); + if (string.IsNullOrEmpty(html6) || !html6.Contains("\"code\":200")) + html6 = GetHtml.PostUtf8(url6, data6); + if (string.IsNullOrEmpty(html6) || !html6.Contains("\"code\":200")) + { + BaseMsgWindow.ShowAnimateMessage("订单读取失败(买手售后) " + BaseRegex.GetStringJson(ref html6, "msg"), "Error", 6); + return new List(); + } + try + { + pddBuyerAfterSales = JsonHelper.DeserializeJsonToList(JObject.Parse(html6)["data"].ParseToString()).OrderByDescending(p => p.id).ToList(); + return pddBuyerAfterSales; + } + catch + { + } + } + return new List(); + } + public static List GetEWaybillPath(string order_ids) { List oms_wei_ewaybill_path_list = null; @@ -965,7 +1006,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls } if (orderItem.TransitRefundStatusStr.ParseToString().Contains("需手动申请售后") && - orderItem.ItemTransitOrderWithVoid?.has_reject == 3 && orderItem.ItemTransitOrderWithVoid?.platform != "XDYYWC") // 义乌仓不支持拒收,等于3也是失败 + orderItem.ItemTransitOrderWithVoid?.has_reject == 3 /*&& orderItem.ItemTransitOrderWithVoid?.platform != "XDYYWC"*/) // 义乌仓不支持拒收,等于3也是失败 { // 拒收后24小时才去总店填拒收退货 if (orderItem.ItemTransitOrderWithVoid?.rejected_time > DateTime.Now.AddHours(-24)) @@ -988,7 +1029,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls } /// - /// 中转仓拦截去总店填写退货物流信息 + /// 中转仓拦截去总店填写退货物流信息(申请拦截退回总店以后回填退货物流) /// public void AutoUpdateTransitPackageToPddShop() { @@ -1004,21 +1045,12 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls // orderItem.ItemTransitOrderAfterSale = new oms_wei_external_procurement_after_sale_info() // { // downstream_waybill = "315090716621027", - // }; //} - if (orderItem.order_id == "3738534855500515072") - { - - } - // 260801-439070256640980260801-439070256640980 + // 260801-439070256640980 260801-439070256640980 // string url = "https://mobile.yangkeduo.com/complaint.html?mode=128&after_sales_id=22059412840967&order_sn=260801-439070256640980" if (orderItem.TransitRefundStatusStr.Contains("待用户发货") && !(orderItem.ItemTransitOrderAfterSale?.downstream_waybill).IsNullOrEmpty()) { - if (orderItem.order_id == "3738382691615546112") - { - - } string orderSn = orderItem.ItemTransitOrderWithVoid.out_order_no; if (orderSn.IsNullOrEmpty()) continue; @@ -2178,7 +2210,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls } /// - /// 中转仓拦截退货包裹申请买手退货退款并获取总店地址,暂时不使用此功能防止需交涉或者可拦截的订单被自动申请退货退款 + /// 中转仓拦截退货包裹申请买手退货退款并获取总店地址,暂时不使用此功能防止需交涉或者可拒收的订单被自动申请退货退款 /// /// public async Task DoReturnPackageBuyerRefendSlient() @@ -2921,6 +2953,21 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls { FilterOrders(); } + + private void chkSyncDirectOrderWaybill_Click(object sender, RoutedEventArgs e) + { + if (chkSyncDirectOrderWaybill.IsChecked == true) + { + if (BaseMsgWindow.ShowConfirm("外部单号无法直填,电子面单同步上家物流信息发货。").DialogResult != true) + { + chkSyncDirectOrderWaybill.IsChecked = false; + return; + } + } + + GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill = chkSyncDirectOrderWaybill.IsChecked.ParseToBool(); + StartUp.SaveBuyConfig(); + } } public class OrderFilterConfig : PropertyNotifyObject diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml index 706bdeb..ab09a63 100644 --- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml @@ -973,6 +973,62 @@ Style="{StaticResource LinkButton}" /> + + + + + + + + + + + @@ -1111,7 +1167,7 @@ x:Name="btnPddRefundTransitWarehouseRejectOrder" d:Visibility="Visible" Click="btnPddRefundTransitWarehouseRejectOrder_Click" - Content="测试退货" + Content="测试拒收" Style="{StaticResource LinkButton}" Visibility="Collapsed" /> @@ -1141,6 +1197,8 @@ x:Name="txtInterceptReturnInfoStr" Margin="0,1,0,1" VerticalAlignment="Top" + d:Text="拦截失败原因" + d:Visibility="Visible" Background="Transparent" BorderThickness="1" IsReadOnly="True" @@ -1242,34 +1300,45 @@ + + - - + + + diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs index 40bd839..d0ba71f 100644 --- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs @@ -361,7 +361,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls return; } - await Task.Run(() => + await Task.Run(async () => { // 拍单前查询订单是否退款 var orderId = orderItem.order_id; @@ -502,53 +502,50 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls // Api检测是否加入代发 if (orderItem.BuyGoodsBtnTxt == "云仓拍单" && !isAbnormalOrder) { - var apiSearchDropship = new WxApiBLL().WxApiDropshipSearch(orderItem.Shop, orderItem.order_id, 100); - if (!apiSearchDropship.Contains("\"errcode\":0")) + string supplierId = "", supplierName=""; + try { - BaseMsgWindow.ShowError("查询代发失败!" + BaseRegex.GetStringJson(ref apiSearchDropship, "msg")); - return; - } - if (apiSearchDropship.Contains("\"ds_order_id_list\":[]")) - { - var apiAddDropship = new WxApiBLL().WxApiDropshipAssign(orderItem.Shop, orderItem.order_id, orderItem.product_id, orderItem.sku_id, orderItem.sku_cnt.ParseToInt()); - if (!apiAddDropship.Contains("\"errcode\":0")) + var apiSearchDropship = new WxApiBLL().WxApiDropshipSearch(orderItem.Shop, orderItem.order_id, 100); + if (!apiSearchDropship.Contains("\"errcode\":0")) + throw new Exception("查询代发失败!" + BaseRegex.GetStringJson(ref apiSearchDropship, "msg")); + + var dsOrderId = JsonHelper.JObjectParse(apiSearchDropship)["ds_order_id_list"].FirstOrDefault().ParseToString(); + if (!string.IsNullOrEmpty(dsOrderId)) { - BaseMsgWindow.ShowError("设置代发失败!请确商品已加入29供货商代发!" + BaseRegex.GetStringJson(ref apiAddDropship, "msg")); - return; + var apiSearchDropshipDetail = new WxApiBLL().WxApiDropshipSearchDetail(orderItem.Shop, dsOrderId); + if (!apiSearchDropshipDetail.Contains("\"errcode\":0")) + throw new Exception("查询代发失败!" + BaseRegex.GetStringJson(ref apiSearchDropshipDetail, "msg")); + + supplierId = BaseRegex.GetStringJson(ref apiSearchDropshipDetail, "supplier_appid"); + supplierName = BaseRegex.GetStringJson(ref apiSearchDropshipDetail, "supplier_name"); + if (!string.IsNullOrEmpty(supplierId) && !supplierId.Contains("wxfc630d60a1af6c6f") && !supplierName.Contains("29供货商")) + { + var apiCancelDropship = await new WxApiBLL().WxApiDropshipCancel(orderItem.Shop, orderItem.ItemOrder, dsOrderId); + if (!apiCancelDropship.Contains("\"errcode\":0")) + throw new Exception("取消其他代发失败!请确认商品未加入其他代发!" + BaseRegex.GetStringJsonByRegs(ref apiCancelDropship, apiCancelDropship, "errmsg")); + dsOrderId = ""; + supplierId = ""; + supplierName = ""; + } + } + + if (!supplierId.Contains("wxfc630d60a1af6c6f") && !supplierName.Contains("29供货商")) + { + // 设置29供货商代发 + var apiAddDropship = new WxApiBLL().WxApiDropshipAssign(orderItem.Shop, orderItem.order_id, orderItem.product_id, orderItem.sku_id, orderItem.sku_cnt.ParseToInt()); + if (!apiAddDropship.Contains("\"errcode\":0")) + { + throw new Exception("设置代发失败!请确商品已加入29供货商代发!" + BaseRegex.GetStringJson(ref apiAddDropship, "msg")); + } } } - } + catch(Exception ex) + { + BaseMsgWindow.ShowError(ex.Message); + return; + } - // 模拟检测是否加入代发 - //if (orderItem.Shop?.LoginStatus == "登录成功" && orderItem.BuyGoodsBtnTxt == "云仓拍单" && !isAbnormalOrder) - //{ - // 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")) - // { - // ShopBLL.CheckShopLogin(orderItem.Shop); - // if (orderItem.Shop?.LoginStatus != "登录成功") - // { - // Dispatcher.Invoke(new Action(() => - // { - // BaseMsgWindow.ShowAnimateMessage("店铺掉线", "Error", 5); - // btnBuyOrder.Cursor = Cursors.Hand; - // })); - // return; - // } - // } - // if (!is29SupplierRst.Contains("\"supplierName\":\"29供货商\"")) // "supplierName":"29供货商" - // { - // Dispatcher.Invoke(new Action(() => - // { - // BaseMsgWindow.ShowError("店铺后台未查询到该代发单,请确认店铺在线且商品加入代发"); - // btnBuyOrder.Cursor = Cursors.Hand; - // })); - // return; - // } - // orderItem.Shop.Is29Supplier = true; - //} + } // 掉线提示重登 if (orderItem.Shop?.LoginStatus != "登录成功") @@ -1032,28 +1029,42 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls private void btnAddEditTransitWarehouseReject_Click(object sender, RoutedEventArgs e) { + if (sender == btnAddEditTransitWarehouseReject) + return; + + + string msg = $@" +        云仓拒收退回总店 + +说  明:店铺产生售后,拒收成功,货物会原物流退回总店。 +拒收条件:(总店物流没到云仓/未签收前)。顺丰/京东无法 +     拒收,直接总店申请仅退款让总店拦截。 +收  费:免费"; + + if (BaseMsgWindow.ShowConfirm(msg, "云仓拒收退回总店", null, MsgWindowLevel.LARGE, 300).DialogResult != true) + return; + if (this.DataContext is oms_wei_order_item_info orderItem) { orderItem.ItemTransitOrders = OrderListCtrl.GetTransitWarehouseList(orderItem.order_id); orderItem.PddBuyerOrders = OrderListCtrl.GetPddBuyerOrders(orderItem.order_id).Where(o => o.wx_send_type == 0).ToList(); OrderListCtrl.InitOrderItemObservableProp(orderItem); - - if (orderItem.ItemTransitOrder?.warehouse_status == 3) - { - BaseMsgWindow.ShowError("商品已拒收或拦截!"); - return; - } - if (orderItem.ItemTransitOrder?.warehouse_status == 2) - { - BaseMsgWindow.ShowError("商品已出库,请选择退回中转仓!"); - return; - } - if (string.IsNullOrEmpty(orderItem.PddBuyerOrder?.order_sn)) - { - BaseMsgWindow.ShowError("商品未出单,请直接去拼多多买手申请退款"); - return; - } + //if (orderItem.ItemTransitOrder?.warehouse_status == 3) + //{ + // BaseMsgWindow.ShowError("商品已拒收或拦截!"); + // return; + //} + //if (orderItem.ItemTransitOrder?.warehouse_status == 2) + //{ + // BaseMsgWindow.ShowError("商品已出库,请选择退回中转仓!"); + // return; + //} + //if (string.IsNullOrEmpty(orderItem.PddBuyerOrder?.order_sn)) + //{ + // BaseMsgWindow.ShowError("商品未出单,请直接去拼多多买手申请退款"); + // return; + //} if (orderItem.ItemTransitOrder?.has_reject == 1 || orderItem.ItemTransitOrder?.has_reject == 3) { BaseMsgWindow.ShowAnimateMessage("已申请拒收", "Msg", 3); @@ -1093,13 +1104,61 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls } private void btnAddEditTransitWarehouseAfterSale_Click(object sender, RoutedEventArgs e) { + //if (this.DataContext is oms_wei_order_item_info orderItem) + //{ + // if (BaseMsgWindow.ShowConfirm("拦截退回总店将产生费用,是否继续?").DialogResult != true) + // { + // return; + // } + // if (orderItem.ItemTransitOrder?.warehouse_status != 3 && orderItem.ItemTransitOrder?.warehouse_status != 2 && orderItem.ItemTransitOrder?.warehouse_status != 1 && orderItem.AddEditTransitWarehouseAfterSaleStr == "添加") + // { + // if (BaseMsgWindow.ShowConfirm("商品未到仓,建议选择中转仓拒收!是否仍然尝试拦截退回总店?").DialogResult != true) + // return; + // } + // TransitAfterSaleWindow transitAfterSaleWindow = new TransitAfterSaleWindow(orderItem); + // transitAfterSaleWindow.ShowDialog(); + //} + if (this.DataContext is oms_wei_order_item_info orderItem) { - if (orderItem.ItemTransitOrder?.warehouse_status != 3 && orderItem.ItemTransitOrder?.warehouse_status != 2 && orderItem.ItemTransitOrder?.warehouse_status != 1 && orderItem.AddEditTransitWarehouseAfterSaleStr == "添加") - { - BaseMsgWindow.ShowError("商品未出库,请选择中转仓拒收!"); + // 不是中转仓,直接返回 + if (sender == btnAddEditTransitWarehouseAfterSale) return; + + string warehouse_status = ""; + if (orderItem.ItemTransitOrder?.warehouse_status == 3 || orderItem.ItemTransitOrder?.warehouse_status == 1) + warehouse_status = "已到仓"; + if (orderItem.ItemTransitOrder?.warehouse_status == 2) + warehouse_status = "已出仓"; + else + warehouse_status = "未到仓"; + + if (sender == btnAddEditTransitWarehouseAfterSale_n1) + { + string msg = $@" +      拒收失败转寄总店({warehouse_status}) + +说  明:店铺产生售后,拒收失败(物流信息签收3天 +     内无退回记录),货物需转寄退回总店。 +收  费:(与退货仓退货价格一样)"; + + if (BaseMsgWindow.ShowConfirm(msg, "拒收失败转寄总店", null, MsgWindowLevel.LARGE, 300).DialogResult != true) + return; } + else + { + string msg = $@" +      出库拦截退回仓库({warehouse_status}) + +说  明:拦截成功后货物返回云仓,云仓转寄到总店。 +拦截条件:(云仓出库物流在运输过程)派送/入柜/拦截 +     几率很低,签收需联系用户拒收。 +收  费:(与退货仓退货价格一样)"; + + if (BaseMsgWindow.ShowConfirm(msg, "出库拦截退回仓库", null, MsgWindowLevel.LARGE, 300).DialogResult != true) + return; + } + TransitAfterSaleWindow transitAfterSaleWindow = new TransitAfterSaleWindow(orderItem); transitAfterSaleWindow.ShowDialog(); } @@ -1222,24 +1281,83 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls if (CheckIsRefund(orderItem)) return; - // 查询订单是否在代发货中,如果代发需要取消代发 - var apiSearchDropship = new WxApiBLL().WxApiDropshipSearch(orderItem.Shop, orderItem.order_id, 100); - if (!apiSearchDropship.Contains("\"errcode\":0")) + if (GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill == true) { - BaseMsgWindow.ShowError("代发查询失败," + BaseRegex.GetStringJsonByRegs(ref apiSearchDropship, apiSearchDropship, "errmsg")); - return; - } - if (apiSearchDropship.Contains("ds_order_id_list") && !apiSearchDropship.Contains("\"ds_order_id_list\":[]")) - { - var dsOrderId = JsonHelper.JObjectParse(apiSearchDropship)["ds_order_id_list"].FirstOrDefault().ParseToString(); - var apiCancelDropship = await new WxApiBLL().WxApiDropshipCancel(orderItem.Shop, orderItem.ItemOrder, dsOrderId); + // 设置同步物流单代发 + //var rst = new WxApiBLL().GetShopSupplier(orderItem.Shop); + //if (!rst.Contains("wx7809625286c28f2f") && !rst.Contains("百川日用")) + //{ + // rst = new WxApiBLL().SetShopSupplier(orderItem.Shop, "wx7809625286c28f2f", "4431685489938137094"); + // if (!rst.Contains("\"errcode\":0")) + // { + // BaseMsgWindow.ShowAnimateMessage("绑定同步单发货失败", "Error", 5); + // return; + // } + //} - if (!apiCancelDropship.Contains("\"errcode\":0")) + string supplierId = "", supplierName = ""; + try { - BaseMsgWindow.ShowError("取消代发失败!请确商品未加入代发!" + BaseRegex.GetStringJsonByRegs(ref apiSearchDropship, apiSearchDropship, "errmsg")); + // 查询直拍单是否绑定了同步单代发(放到同步单发货前处理) + var apiSearchDropship = new WxApiBLL().WxApiDropshipSearch(orderItem.Shop, orderItem.order_id, 100); + if (!apiSearchDropship.Contains("\"errcode\":0")) + throw new Exception("查询代发失败!" + BaseRegex.GetStringJson(ref apiSearchDropship, "msg")); + + var dsOrderId = JsonHelper.JObjectParse(apiSearchDropship)["ds_order_id_list"].FirstOrDefault().ParseToString(); + if (!string.IsNullOrEmpty(dsOrderId)) + { + var apiSearchDropshipDetail = new WxApiBLL().WxApiDropshipSearchDetail(orderItem.Shop, dsOrderId); + if (!apiSearchDropshipDetail.Contains("\"errcode\":0")) + throw new Exception("查询代发失详情败!" + BaseRegex.GetStringJson(ref apiSearchDropshipDetail, "msg")); + + supplierId = BaseRegex.GetStringJson(ref apiSearchDropshipDetail, "supplier_appid"); + supplierName = BaseRegex.GetStringJson(ref apiSearchDropshipDetail, "supplier_name"); + if (!string.IsNullOrEmpty(supplierId) && !supplierId.Contains("wx7809625286c28f2f") && !supplierName.Contains("百川日用")) + { + var apiCancelDropship = await new WxApiBLL().WxApiDropshipCancel(orderItem.Shop, orderItem.ItemOrder, dsOrderId); + if (!apiCancelDropship.Contains("\"errcode\":0")) + throw new Exception("取消其他代发失败!请确认商品未加入其他代发!" + BaseRegex.GetStringJsonByRegs(ref apiCancelDropship, apiCancelDropship, "errmsg")); + dsOrderId = ""; + supplierId = ""; + supplierName = ""; + } + } + + if (!supplierId.Contains("wx7809625286c28f2f") && !supplierName.Contains("百川日用")) + { + // 设置同步单供货商代发 + var apiAddDropship = new WxApiBLL().WxApiDropshipAssign(orderItem.Shop, orderItem.order_id, orderItem.product_id, orderItem.sku_id, orderItem.sku_cnt.ParseToInt(), "wx7809625286c28f2f"); + if (!apiAddDropship.Contains("\"errcode\":0")) + throw new Exception("设置同步单代发失败!请确商品已加入同步单代发!" + BaseRegex.GetStringJson(ref apiAddDropship, "msg")); + } + } + catch (Exception ex) + { + BaseMsgWindow.ShowError(ex.Message); return; } } + else + { + // 查询订单是否在代发货中,如果代发需要取消代发 + var apiSearchDropship = new WxApiBLL().WxApiDropshipSearch(orderItem.Shop, orderItem.order_id, 100); + if (!apiSearchDropship.Contains("\"errcode\":0")) + { + BaseMsgWindow.ShowError("代发查询失败," + BaseRegex.GetStringJsonByRegs(ref apiSearchDropship, apiSearchDropship, "errmsg")); + return; + } + if (apiSearchDropship.Contains("ds_order_id_list") && !apiSearchDropship.Contains("\"ds_order_id_list\":[]")) + { + var dsOrderId = JsonHelper.JObjectParse(apiSearchDropship)["ds_order_id_list"].FirstOrDefault().ParseToString(); + var apiCancelDropship = await new WxApiBLL().WxApiDropshipCancel(orderItem.Shop, orderItem.ItemOrder, dsOrderId); + + if (!apiCancelDropship.Contains("\"errcode\":0")) + { + BaseMsgWindow.ShowError("取消代发失败!请确认商品未加入代发!" + BaseRegex.GetStringJsonByRegs(ref apiSearchDropship, apiSearchDropship, "errmsg")); + return; + } + } + } // 检测买手号是否掉线 @@ -1625,6 +1743,11 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls { } + + private void btnGetSyncWaybillDetail_Click(object sender, RoutedEventArgs e) + { + + } } } diff --git a/29WxOrderWpf/MainWindow.xaml.cs b/29WxOrderWpf/MainWindow.xaml.cs index 73c2065..5b8f0db 100644 --- a/29WxOrderWpf/MainWindow.xaml.cs +++ b/29WxOrderWpf/MainWindow.xaml.cs @@ -40,6 +40,7 @@ using System.Xml.Linq; using Work; using Work._29Tools.BLL; using Work._29Tools.Forms.UserForms; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; namespace _29WxOrderWpf { @@ -89,7 +90,8 @@ namespace _29WxOrderWpf Task.Run(() => { GetServerShop(); - }); + GetShopSupplier(GlobalConfig.ShopLoginList.ToList()); + }); Task.Run(() => { GetPddBuyer(); @@ -349,6 +351,27 @@ namespace _29WxOrderWpf tList.RemoveAll(ta => ta.IsFaulted || ta.IsCompleted || ta.IsCanceled); Thread.Sleep(100); } } + + public void GetShopSupplier(List shops) + { + // 同步单代发申请,放在拍单时候做 + while (GlobalConfig.BuyConfig.IsSyncDirectBuyOrderWaybill == false) + { + Thread.Sleep(500); + } + foreach (var shop in shops) + { + var rst = new WxApiBLL().GetShopSupplier(shop); + if (rst.Contains("wx7809625286c28f2f") || rst.Contains("百川日用")) + continue; + + rst = new WxApiBLL().SetShopSupplier(shop, "wx7809625286c28f2f", "4431685489938137094"); + if (!rst.Contains("\"errcode\":0")) + { + //return; + } + } + } #endregion #region 读取拼多多买手号 diff --git a/29WxOrderWpf/ViewModels/PddMobileLoginViewModel.cs b/29WxOrderWpf/ViewModels/PddMobileLoginViewModel.cs index c1eeac2..8a6742d 100644 --- a/29WxOrderWpf/ViewModels/PddMobileLoginViewModel.cs +++ b/29WxOrderWpf/ViewModels/PddMobileLoginViewModel.cs @@ -4,10 +4,12 @@ using AllBase; using AllBase.Helper; using AllBase.Model.DBModel; using AllBase.Model.MvvmBaseClasses; +using AllBase.Model.Result; using CefSharp; using CefSharp.Handler; using CefSharp.Wpf; using NaiBa.Util.Extension; +using NPOI.SS.Formula.Functions; using System; using System.Collections.Generic; using System.Linq; @@ -32,7 +34,7 @@ namespace _29WxOrderWpf.ViewModels { // 拼多多买手退货退款售后地址 // https://mobile.yangkeduo.com/complaint.html?order_sn=260718-101481213440980&after_sales_reason=0&after_sales_type=2&after_sales_code=1002 - + Dictionary dicPddPickInfo = new Dictionary(); public static PddMobileLoginViewModel PddMobileLoginInstance { get; set; } = null; /// 浏览器创建完成后触发(视图在此把浏览器加入可视树) @@ -202,7 +204,7 @@ namespace _29WxOrderWpf.ViewModels 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; @@ -317,6 +319,28 @@ namespace _29WxOrderWpf.ViewModels private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData, IRequest request) { + var data = responseData; + var send = sender; + if (data.Contains("\"pick_code\":\"取件码") /*|| data.Contains("21-2110")*/) + { + try + { + var combine_track_list = BaseRegex.GetJsonArrStrJson(ref data, "combine_track_list"); + var noPickupPackageData = BaseRegex.GetJsonObjStrJson(ref data, "noPickupPackageData").FirstOrDefault(); + if (!noPickupPackageData.IsNullOrEmpty() && send is ChromiumWebBrowser cef) + { + var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(buy => buy.wpf_browser == cef); + if (buyer != null) + { + dicPddPickInfo[buyer] = JsonHelper.DeserializeJsonToObject(noPickupPackageData); + } + } + } + catch + { + } + } + if (url.Contains("https://mobile.yangkeduo.com/index.html") && OpenType == EnumOpenType.login) { Task.Run(() => { CefWebBrowser.Load("https://mobile.yangkeduo.com/personal.html"); }); diff --git a/29WxOrderWpf/Windows/OrderWindows/TransitAfterSaleWindow.xaml.cs b/29WxOrderWpf/Windows/OrderWindows/TransitAfterSaleWindow.xaml.cs index 47928b3..18e6399 100644 --- a/29WxOrderWpf/Windows/OrderWindows/TransitAfterSaleWindow.xaml.cs +++ b/29WxOrderWpf/Windows/OrderWindows/TransitAfterSaleWindow.xaml.cs @@ -72,6 +72,7 @@ namespace _29WxOrderWpf.Windows.OrderWindows } else { + // 需要手动申请售后的,先去申请售后再提交拦截退回总店 if (!string.IsNullOrEmpty(OrderItem.ItemTransitOrderWithVoid?.out_order_no) && OrderItem.PddBuyerAfterSaleAddressStr.IsNullOrEmpty() && OrderItem.TransitRefundStatusStr.Contains("需手动申请售后") || OrderItem.TransitRefundStatusStr.Contains("待用户发货")) { @@ -96,6 +97,7 @@ namespace _29WxOrderWpf.Windows.OrderWindows } imgLoading.Visibility = Visibility.Collapsed; + // 如果提交过工单,则显示已提交工单及提交时间。 var workOrderInfo = await GetWorkOrder(); var issueType = BaseRegex.GetStringJson(ref workOrderInfo, "issueType"); var createTime = BaseRegex.GetStringJson(ref workOrderInfo, "createdAt").ParseToString().ParseToDateTime(); @@ -116,18 +118,13 @@ namespace _29WxOrderWpf.Windows.OrderWindows if ((OrderItem?.ItemTransitOrder?.warehouse_status).ParseToInt() < 1) { - lblMsg.Content = "当前订单仓库状态不支持售后!"; + //btnAdd.IsEnabled = false; + lblMsg.Content = "当前订单仓库状态不支持拦截退回总店,建议联系买家直接退回总店!"; } } private void btnAdd_Click(object sender, RoutedEventArgs e) { - if ((OrderItem?.ItemTransitOrder?.warehouse_status).ParseToInt() < 1) - { - BaseMsgWindow.ShowError("当前订单仓库状态不支持售后,请联系买家直接退回总店!"); - return; - } - if (string.IsNullOrEmpty(lblWorkOrderMsg.Content.ParseToString())) { var workOrder = AddWorkOrder(); diff --git a/AllBase/GetHtml.cs b/AllBase/GetHtml.cs index 80bc254..7cb965c 100644 --- a/AllBase/GetHtml.cs +++ b/AllBase/GetHtml.cs @@ -1155,6 +1155,14 @@ Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrom { return await PostUtf8Async(url, postData, contentType: "application/json", timeOut: timeOut); } + public static string PostJson(string url, object postData, int timeOut = -1) + { + return PostUtf8(url, JsonHelper.SerializeObject(postData), contentType: "application/json", timeOut: timeOut); + } + public static string PostJson(string url, string postData, int timeOut = -1) + { + return PostUtf8(url, postData, contentType: "application/json", timeOut: timeOut); + } /// /// post 数据 /// @@ -1172,6 +1180,8 @@ Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrom request.KeepAlive = true; request.ContentType = "application/x-www-form-urlencoded; charset=utf-8"; + if (!string.IsNullOrEmpty(contentType)) + request.ContentType = contentType; //request.Headers.Add("sec-ch-ua", @"""Not(A:Brand"";v=""8"", ""Chromium"";v=""144"", ""Google Chrome"";v=""144"""); //request.Headers.Add("sec-ch-ua-mobile", @"?0"); //request.Headers.Add("sec-ch-ua-platform", @"""Windows"""); diff --git a/AllBase/Model/Config/BuyConfig.cs b/AllBase/Model/Config/BuyConfig.cs index 1c5b964..702235c 100644 --- a/AllBase/Model/Config/BuyConfig.cs +++ b/AllBase/Model/Config/BuyConfig.cs @@ -16,5 +16,10 @@ namespace AllBase.Model.Config /// 自动修改下单地址到仓库 /// public bool IsAutoChangeWarehouseAddress { get; set; } = true; + + /// + /// 是否使用同步单 + /// + public bool IsSyncDirectBuyOrderWaybill { get; set; } = false; } } diff --git a/AllBase/Model/DBModel/TransitWarehouseParam.cs b/AllBase/Model/DBModel/TransitWarehouseParam.cs index 901adfc..a3a0b5a 100644 --- a/AllBase/Model/DBModel/TransitWarehouseParam.cs +++ b/AllBase/Model/DBModel/TransitWarehouseParam.cs @@ -42,7 +42,7 @@ namespace AllBase.Model.DBModel public static string TransitWarehouseDataStr = @" XDYBJC ;北京仓 ;胡萍 ;18565773752 ;北京市顺义区光明街道滨河小区七区1号楼 ;2 ;52 ;511 ;北京市 ;北京市 XDYGZC ;广州仓 ;何外华 ;13826339849 ;广州市增城区朱村街道育山一路68号国际物流园 ;6 ;76 ;702 ;广东省 ;广州市 -XDYWHC ;武汉2仓 ;杨先生 ;13044121071 ;湖北省武汉市江汉区沿江大道轮渡龙王庙码头 ;13 ;180 ;1546 ;湖北省 ;武汉市 +XDYWHC ;武汉2仓 ;杨先生 ;13044121071 ;湖北省武汉市江汉区民族街道沿江大道轮渡龙王庙码头 ;13 ;180 ;1546 ;湖北省 ;武汉市 XDYSHANDC ;山东2仓 ;鸿鹄小申 ;13044121239 ;山东省临沂市费县南外环东转盘往东200米顺通快递有限公司(仓库二楼) ;22 ;292 ;2415 ;山东省 ;临沂市 XDYSHC ;上海新仓 ;纪先生 ;13044121150 ;上海市上海市普陀区真如镇街道真北路2653弄T区 ;25 ;321 ;2709 ;上海市 ;上海市 XDYSZC ;深圳仓 ;峰峰 ;15343351331 ;广东省东莞市凤岗镇浸校塘东良巷逸乐轩E栋5号楼 ;6 ;79 ;732 ;广东省 ;东莞市 diff --git a/AllBase/Model/DBModel/oms_wei_external_procurement_log_info.cs b/AllBase/Model/DBModel/oms_wei_external_procurement_log_info.cs index 8da7560..1aadad6 100644 --- a/AllBase/Model/DBModel/oms_wei_external_procurement_log_info.cs +++ b/AllBase/Model/DBModel/oms_wei_external_procurement_log_info.cs @@ -96,7 +96,7 @@ namespace AllBase.Model.DBModel /// public int? over_weight_fee { get; set; } /// - /// 0未申请拒收 1已申请拒收 2申请拒收失败 3已拒收成功 5取消拒收 + /// 0未申请拒收 1已申请拒收 2申请拒收失败 3申请拒收成功 5取消拒收 /// public int has_reject { get; set; } /// diff --git a/AllBase/Model/DBModel/oms_wei_order_info.cs b/AllBase/Model/DBModel/oms_wei_order_info.cs index 3b6a37a..b9691cf 100644 --- a/AllBase/Model/DBModel/oms_wei_order_info.cs +++ b/AllBase/Model/DBModel/oms_wei_order_info.cs @@ -365,6 +365,32 @@ namespace AllBase.Model.DBModel set { this.SetValue(x => x.GiftErrorMsg, value); } } + public string SyncLogisticsMsg + { + get { return this.GetValue(x => x.SyncLogisticsMsg); } + set { this.SetValue(x => x.SyncLogisticsMsg, value); } + } + public ConcurrentList SyncLogisticsList + { + get { return this.GetValue(x => x.SyncLogisticsList); } + set + { + this.SetValue(x => x.SyncLogisticsList, value); + SyncWaybillId = SyncLogisticsList.FirstOrDefault()?.tracking_number; + SyncWaybillPickNo = SyncLogisticsList.FirstOrDefault()?.pickup_code; + } + } + public string SyncWaybillId + { + get { return this.GetValue(x => x.SyncWaybillId); } + set { this.SetValue(x => x.SyncWaybillId, value); } + } + public string SyncWaybillPickNo + { + get { return this.GetValue(x => x.SyncWaybillPickNo); } + set { this.SetValue(x => x.SyncWaybillPickNo, value); } + } + /// /// 是否被选中 /// diff --git a/AllBase/Model/DBModel/oms_wei_order_item_info.cs b/AllBase/Model/DBModel/oms_wei_order_item_info.cs index 52b435c..f938bcf 100644 --- a/AllBase/Model/DBModel/oms_wei_order_item_info.cs +++ b/AllBase/Model/DBModel/oms_wei_order_item_info.cs @@ -241,6 +241,14 @@ namespace AllBase.Model.DBModel get { return this.GetValue(x => x.PddBuyerAfterSaleAddressStr); } set { this.SetValue(x => x.PddBuyerAfterSaleAddressStr, value); } } + + + public Visibility RejectOrReturnPackageBtnVisibility + { + get { return this.GetValue(x => x.RejectOrReturnPackageBtnVisibility); } + set { this.SetValue(x => x.RejectOrReturnPackageBtnVisibility, value); } + } + public void SetTransitOrder() { @@ -309,6 +317,9 @@ namespace AllBase.Model.DBModel } + + RejectOrReturnPackageBtnVisibility = ItemTransitOrderWithVoid != null ? Visibility.Visible : Visibility.Collapsed; + // 拦截退回操作信息 InterceptReturnInfoStr = ""; if (this.ItemTransitOrderWithVoid != null) @@ -320,7 +331,7 @@ namespace AllBase.Model.DBModel AddEditTransitWarehouseAfterSaleStr = "已添加"; if (this.ItemTransitOrderAfterSale != null && (ItemTransitOrderWithVoid.intercept_return_status == 1 || !string.IsNullOrEmpty(ItemTransitOrderAfterSale.downstream_waybill))) AddEditTransitWarehouseAfterSaleStr = "拦截成功"; - if (this.ItemTransitOrderAfterSale != null && ItemTransitOrderWithVoid.intercept_return_status == 2) + else if (this.ItemTransitOrderAfterSale != null && ItemTransitOrderWithVoid.intercept_return_status == 2) AddEditTransitWarehouseAfterSaleStr = "拦截失败"; if (this.ItemTransitOrderWithVoid == null || (this.ItemRefund?.type != "REFUND" && !this.ItemOrder.IsAbnormal) || TransitRefundStatusStr.Contains("退款成功") || @@ -342,6 +353,12 @@ namespace AllBase.Model.DBModel TransitWarehouseAfterSaleWayBillStr = (this.ItemTransitOrderAfterSale?.downstream_express_code + "-" + this.ItemTransitOrderAfterSale?.downstream_waybill).Trim('-'); + // 拦截退回操作信息 + InterceptReturnInfoStr = ""; + if (this.ItemTransitOrderWithVoid != null && AddEditTransitWarehouseAfterSaleStr != "拦截成功") + InterceptReturnInfoStr = this.ItemTransitOrderWithVoid.intercept_return_info; + + AddEditTransitWarehouseReturnOrderStr = ""; if (ItemRefund?.return_detail.StartsWith(GlobalConfig.TransitReturnOrderReturnAddress) == true) { diff --git a/AllBase/Model/DBModel/user_payment_record.cs b/AllBase/Model/DBModel/user_payment_record.cs index 435ed6c..3049281 100644 --- a/AllBase/Model/DBModel/user_payment_record.cs +++ b/AllBase/Model/DBModel/user_payment_record.cs @@ -86,6 +86,7 @@ namespace AllBase.Model.DBModel 礼物单退费 = 34, 额外订单创建 = 35, 额外订单作废 = 36, + 同步物流 = 55, } /* diff --git a/AllBase/Model/DBModel/yh_sync_logistics.cs b/AllBase/Model/DBModel/yh_sync_logistics.cs new file mode 100644 index 0000000..cbb530b --- /dev/null +++ b/AllBase/Model/DBModel/yh_sync_logistics.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.DBModel +{ + public class yh_sync_logistics + { + public long id { get; set; } + public string order_id { get; set; } + public string tracking_number { get; set; } + public string source_tracking_number { get; set; } + public string pickup_code { get; set; } + public int? upload_pickup_status { get; set; } + public DateTime? create_time { get; set; } + public DateTime? upload_pickup_Time { get; set; } + public string remark { get; set; } + } +} \ No newline at end of file diff --git a/AllBase/Model/Result/PddPickInfo.cs b/AllBase/Model/Result/PddPickInfo.cs new file mode 100644 index 0000000..191f7ce --- /dev/null +++ b/AllBase/Model/Result/PddPickInfo.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Result +{ + public class PddPickInfo + { + public string station_name {get;set;} // "" + public int count { get; set; } // 73 + public List combine_list { get; set; } + } + + public class combine_info + { + public string address { get; set; } // "兔喜快递超市(浸校塘东良巷店)", + public string company_name { get; set; } // "喵站代收点", + public string station_code { get; set; } // "8004974987501568", + public string contact_phone { get; set; } // "13556614729", + public string contact_phone_type { get; set; } // "OTHER", + public List combine_track_list { get; set; } + public string latest_operate_time { get; set; } // "2026-09-23 19:06:03", + public string company_code { get; set; } // "MIGSTATION", + public bool? display_nav_entry { get; set; } // false, + public bool? all_selected { get; set; } // true + } + + public class combine_track_info + { + public string order_sn { get; set; } // "260922-106514399573137", + public int? shipping_id { get; set; } // 115, + public string shipping_name { get; set; } // 中通快递, + public string tracking_number { get; set; } // 79143307021657, + public string pic_url { get; set; } // "https:\u002F\u002Fimg.pddpic.com\u002Fmms-goods-image\u002F2026-08-24\u002F8acb431a-2489-4611-ba84-c85b5bb61401.jpeg", + public string pick_code { get; set; } // "取件码 23-2234", + public string jump_url { get; set; } // "\u002Fgoods_express.html?thumb_url=https%3A%2F%2Fimg.pddpic.com%2Fmms-goods-image%2F2026-08-24%2F8acb431a-2489-4611-ba84-c85b5bb61401.jpeg&order_sn=260922-106514399573137", + public string operation_time { get; set; } // "2026-09-23 19:06:03", + public int? order_count { get; set; } // 1, + public object order_list { get; set; } // [ { "order_sn": "260922-106514399573137", "pic_url": "https:\u002F\u002Fimg.pddpic.com\u002Fmms-goods-image\u002F2026-08-24\u002F8acb431a-2489-4611-ba84-c85b5bb61401.jpeg","jump_url": "\u002Fgoods_express.html?thumb_url=https%3A%2F%2Fimg.pddpic.com%2Fmms-goods-image%2F2026-08-24%2F8acb431a-2489-4611-ba84-c85b5bb61401.jpeg&order_sn=260922-106514399573137"}], + public int? source_type { get; set; } // 6, + public bool? selectd { get; set; } // true, + public int? pickup_status { get; set; } // 0 + } +} \ No newline at end of file diff --git a/Work/_29Tools/BLL/WxApiBLL.cs b/Work/_29Tools/BLL/WxApiBLL.cs index 771cb97..c8917c0 100644 --- a/Work/_29Tools/BLL/WxApiBLL.cs +++ b/Work/_29Tools/BLL/WxApiBLL.cs @@ -9,6 +9,7 @@ using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; namespace Work._29Tools.BLL { @@ -56,6 +57,52 @@ namespace Work._29Tools.BLL return token; } + public string GetShopSupplier(ShopLoginInfo shop) + { + bool IsRetry = false; + + Retry: + var token = GetWxToken(shop); + StringBuilder sb = new StringBuilder(); + sb.Append(UserLogin.GetSignaturex()); + sb.Append("&token=").Append(token.accessToken); + + var url = BaseClass.Build29WxObjString("product/wx_api_get_supplier_list"); + var data = sb.ToString(); + var html = GetHtml.PostUtf8(url, data); + if (html.Contains("access_token expired") && !IsRetry) + { + token.mdyTime = DateTime.MinValue; + IsRetry = true; + goto Retry; + } + return html; + } + + public string SetShopSupplier(ShopLoginInfo shop, string supplierAppid, string serviceId) + { + bool IsRetry = false; + + Retry: + var token = GetWxToken(shop); + StringBuilder sb = new StringBuilder(); + sb.Append(UserLogin.GetSignaturex()); + sb.Append("&token=").Append(token.accessToken); + sb.Append("&supplier_appid=").Append(supplierAppid); + sb.Append("&service_id=").Append(serviceId); + + var url = BaseClass.Build29WxObjString("product/wx_api_invite_supplier"); + var data = sb.ToString(); + var html = GetHtml.PostUtf8(url, data); + if (html.Contains("access_token expired") && !IsRetry) + { + token.mdyTime = DateTime.MinValue; + IsRetry = true; + goto Retry; + } + return html; + } + /// /// 代发订单查询 /// @@ -87,8 +134,37 @@ namespace Work._29Tools.BLL return html; } + /// + /// 代发订单详情查询 + /// + /// + /// + /// + public string WxApiDropshipSearchDetail(ShopLoginInfo shop, string ds_order_id) + { + bool IsRetry = false; - public string WxApiDropshipAssign(ShopLoginInfo shop, string orderId, string spuId, string skuId, int cnt) + Retry: + var token = GetWxToken(shop); + StringBuilder sb = new StringBuilder(); + sb.Append(UserLogin.GetSignaturex()); + sb.Append("&token=").Append(token.accessToken); + sb.Append("&ds_order_id=").Append(ds_order_id); + + var url = BaseClass.Build29WxObjString("product/wx_api_dropship_search_detail"); + var data = sb.ToString(); + var html = GetHtml.PostUtf8(url, data); + if (html.Contains("access_token expired") && !IsRetry) + { + token.mdyTime = DateTime.MinValue; + IsRetry = true; + goto Retry; + } + return html; + } + + + public string WxApiDropshipAssign(ShopLoginInfo shop, string orderId, string spuId, string skuId, int cnt, string supplier_appid = null) { bool IsRetry = false; @@ -98,6 +174,8 @@ namespace Work._29Tools.BLL sb.Append(UserLogin.GetSignaturex()); sb.Append("&token=").Append(token.accessToken); sb.Append("&order_id=").Append(orderId); + if (!string.IsNullOrWhiteSpace(supplier_appid)) + sb.Append("&supplier_appid=").Append(supplier_appid); sb.Append("&dropship_product_list=").Append("[{\"spu_id\":\"").Append(spuId + "\",\"sku_id\":\"").Append(skuId + "\",\"product_cnt\":").Append(cnt).Append("}]"); var url = BaseClass.Build29WxObjString("product/wx_api_dropship_assign");