diff --git a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml index 17f9466..9e3b583 100644 --- a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml +++ b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml @@ -13,14 +13,18 @@ - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs index 56c3722..0acd3a4 100644 --- a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs +++ b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs @@ -7,6 +7,7 @@ using AllBase.Model.Local; using AllBase.Model.Result; using CefSharp; using CefSharp.DevTools.LayerTree; +using CefSharp.DevTools.Network; using CefSharp.Handler; using CefSharp.Wpf; using NaiBa.Util; @@ -37,6 +38,7 @@ using TemuKJD.ToolForms; using Work; using Work._29Tools.BLL; using Work._29Tools.CefTools; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.Tab; namespace _29WxOrderWpf.Ctrls.BuyerCtrls { @@ -46,9 +48,11 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls public partial class PDDBuyerOrderReadCtrl : UserControl { ChromiumWebBrowser cefWebBrowser = null; + public string cefAddress = ""; public ObservableCollection lstPddBuyerOrderInfoLite { get; set; } = new ObservableCollection(); public ObservableCollection lstFilterPddBuyerOrderInfoLite { get; set; } = new ObservableCollection(); - ConcurrentList lstPddBuyerAfterSaleInfoLite { get; set; } = new ConcurrentList(); + public ObservableCollection lstPddBuyerAfterSaleInfoLite { get; set; } = new ObservableCollection(); + public ObservableCollection lstFilterPddBuyerAfterSaleInfoLite { get; set; } = new ObservableCollection(); public CancellationTokenSource cancellationTokenSource { get; set; } = new CancellationTokenSource(); //public ChromiumWebBrowser cefWebBrowser = null; public BuyerReadOrderConfig buyerReadOrderConfig = new BuyerReadOrderConfig(); @@ -112,6 +116,13 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls if (dgBuyerOrder != null) this.dgBuyerOrder.ItemsSource = lstFilterPddBuyerOrderInfoLite; + + + lstFilterPddBuyerAfterSaleInfoLite = new ObservableCollection(lstPddBuyerAfterSaleInfoLite + .Where(o => filterOneBuyerAfterSale(o) == true)); + + if (dgBuyerAfterSale != null) + this.dgBuyerAfterSale.ItemsSource = lstFilterPddBuyerAfterSaleInfoLite; } bool filterOneBuyerOrder(PddBuyerOrderLiteInfo order) @@ -132,6 +143,24 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls return true; } + + bool filterOneBuyerAfterSale(PddBuyerAfterSaleLiteInfo afterSale) + { + if (afterSale == null) + return false; + + if (!GlobalConfig.PDDBuyerLoginList.Any(u => u.buyer_name == afterSale.buyerName)) + return false; + if (isHideNoWxOrderNo && afterSale.ShopOrderIdStr.IsNullOrEmpty()) + return false; + if (!string.IsNullOrEmpty(filterTxt) && !afterSale.orderSn.Contains(filterTxt) && !afterSale.ShopOrderIdStr.ParseToString().Contains(filterTxt) && + //!afterSale.tracking_number.Contains(filterTxt) && + !afterSale.sendStatus.ParseToString().Contains(filterTxt)) + return false; + return true; + } + + private void UserControl_Loaded(object sender, RoutedEventArgs e) { buyerReadOrderConfig = NaiBa.Util.Helper.ConfigHelper.LoadConfig("pdd_buyer_read_order_config"); @@ -150,6 +179,16 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls lstPddBuyerOrderInfoLite.Remove(item); } + lstPddBuyerAfterSaleInfoLite = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("pdd_buyer_after_sale_list"); + if (lstPddBuyerAfterSaleInfoLite == null) + lstPddBuyerAfterSaleInfoLite = new ObservableCollection(); + + foreach (var item in lstPddBuyerAfterSaleInfoLite.ToList()) + { + if (item.orderDate < DateTime.Now.AddMonths(-1).ToString("yyMMdd").ParseToInt()) + lstPddBuyerAfterSaleInfoLite.Remove(item); + } + Task.Run(() => { while (dgBuyerOrder == null || !MainWindow.Instance.hasGetPddBuyer) @@ -216,99 +255,6 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls }); } - void ShowOrder(PddBuyerOrderLiteInfo order) - { - if (order == null) - return; - - //var row = dgvPddBuyerOrder.Rows.Cast().FirstOrDefault(p => p.Cells.GetCellValueFromColumnName("colOPddOrderSn").ParseToString() == order.order_sn); - //if (row == null) - //{ - // var rowIndex = this.dgvPddBuyerOrder.Rows.Add( - // false, - // order.buyerId, - // order.buyerName, - // order.order_sn, - // order.order_time == null ? "" : BaseClass.StampToDateTime(order.order_time.ParseToInt()).ToString("yy-MM-dd HH:mm"), - // "", // 图片路径, - // DataGridViewExtension.defaultBitmap, // 订单图片 - // order.order_Goods == null ? "" : string.Join("\r\n", order.order_Goods.Select(g => g.goods_name + " x" + g.goods_number)), // 商品信息 - // order.order_amount * 0.01, - // order.order_status_prompt, - // order.outExpressCompanyName, - // order.tracking_number, - // order.sendStatus, - // "发送", - // "退货" - // ); - // row = dgvPddBuyerOrder.Rows[rowIndex]; - // row.Height = 40; - - //} - //else - //{ - // //row.Cells["colOSelect"].Value = selectIds.Contains(buyer.buyer_id); - // row.Cells["colOBuyerId"].Value = order.buyerId; - // row.Cells["colOBuyerName"].Value = order.buyerName; - // row.Cells["colOPddOrderSn"].Value = order.order_sn; - // row.Cells["colOOrderTime"].Value = order.order_time == null ? "" : BaseClass.StampToDateTime(order.order_time.ParseToInt()).ToString("yy-MM-dd HH:ss"); - // //row.Cells["colOImgUrl"].Value = ""; - // // 商品信息 - // row.Cells["colOGoodsInfo"].Value = order.order_Goods == null ? "" : string.Join("\r\n", order.order_Goods.Select(g => g.goods_name + " x" + g.goods_number)); - // row.Cells["colOOrderAmount"].Value = order.order_amount * 0.01; - // row.Cells["colOStatus"].Value = order.order_status_prompt; - // row.Cells["colOExpressName"].Value = order.outExpressCompanyName; - // row.Cells["colOExpressId"].Value = order.tracking_number; - // row.Cells["colOMsg"].Value = order.sendStatus; - //} - //// - //if (order.outExpressCompanyName == "物流名称获取失败") - // row.Cells["colOExpressName"].Style.ForeColor = Color.Orange; - //else - // row.Cells["colOExpressName"].Style.ForeColor = Control.DefaultForeColor; - - //if (order.order_status_prompt.Contains("交易成功")) - //{ - // row.Cells["colOMsg"].Value = "[完]" + row.Cells["colOMsg"].Value.ParseToString(); - // row.Cells["colOMsg"].Style.ForeColor = Color.Green; - //} - //else if (order.order_status_prompt.Contains("退款成功") || order.order_status_prompt.Contains("交易已取消")) - //{ - // row.Cells["colOMsg"].Value = "[已退]" + row.Cells["colOMsg"].Value.ParseToString(); - // row.Cells["colOMsg"].Style.ForeColor = Color.Gray; - //} - //else if (order.after_sales != null) - //{ - // if (order.order_sn == "260417-009038743070257") - // { - // //after_sales_id 20093344800098 after_sales_status 12 after_sales_type 2 - // } - // if (order.order_sn == "260427-536315174430257") - // { - - // } - // if(order.after_sales.after_sales_status == 12 && order.after_sales.after_sales_type == 2) - // { - // row.Cells["colOMsg"].Value = "[退货失败]" + row.Cells["colOMsg"].Value.ParseToString(); - // row.Cells["colOMsg"].Style.ForeColor = Color.SlateBlue; - // } - // else - // { - // row.Cells["colOMsg"].Value = "[退货中]" + row.Cells["colOMsg"].Value.ParseToString(); - // row.Cells["colOMsg"].Style.ForeColor = Color.DeepSkyBlue; - // } - //} - //else if (!string.IsNullOrEmpty(order.wxRefundStatus)) - //{ - // row.Cells["colOMsg"].Value = "[" + order.wxRefundStatus + "]" + row.Cells["colOMsg"].Value.ParseToString(); - // row.Cells["colOMsg"].Style.ForeColor = Color.Red; - //} - //else - //{ - // row.Cells["colOMsg"].Style.ForeColor = Control.DefaultForeColor; - //} - } - public void InitCef() { //CefSharp.Wpf.ChromiumWebBrowser cefWebBrowser = new CefSharp.Wpf.ChromiumWebBrowser(); @@ -359,6 +305,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls } private void CefWebBrowser_AddressChanged(object sender, DependencyPropertyChangedEventArgs e) { + cefAddress = e.NewValue.ParseToString(); } @@ -429,20 +376,13 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls } }); } - if (url1.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/aristotle/order_list_v")) + // 读订单 + if (/*(cefAddress.Contains("orders.html")) &&*/ + url1.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/aristotle/order_list_v")) { Task.Run(() => { CefReadBuyerOrder(url1, data1); - - }); - } - // 读取售后 - if (url1.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/blade/after_sales_list")) - { - Task.Run(() => - { - CefReadBuyerAfterSale(url1, data1); }); } @@ -475,6 +415,14 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls } }); } + // 读取售后 + if (url1.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/blade/after_sales_list")) + { + Task.Run(() => + { + CefReadBuyerAfterSale(url1, data1); + }); + } }); } @@ -502,8 +450,8 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls try { transitOrderList = JsonHelper.DeserializeJsonToList(JObject.Parse(html3)["data"].ParseToString()); - // 直接过滤掉仓库售后单 - transitOrderList = transitOrderList.Where(t => t.transfer_refund_status.IsNullOrZero()).ToList(); + // 直接过滤掉仓库作废单 + transitOrderList = transitOrderList.Where(t => t.order_void_status != 1).ToList(); } catch { @@ -621,6 +569,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls pdd_order.ShopOrderRefundStr = "店铺售后"; pdd_order.wxRefundStatus = pdd_order.order_status_prompt.Contains("待发货") ? "待退款" : "待退货"; } + pdd_order.TransitBuyerOrderRefundStatus = wx_transit_order?.refund_status; pdd_order.TransitWarehouseIdStr = wx_transit_order?.platform; pdd_order.Express1WaybillStr = wx_transit_order?.express_1_waybill; pdd_order.Express1CompanyStr = wx_transit_order?.express_1_company; @@ -633,6 +582,34 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls pdd_order.TransitCreateTime = wx_transit_order?.created_time ?? DateTime.MinValue; } + + void UpdateAfterSaleStatus(PddBuyerAfterSaleLiteInfo pdd_afterSale, oms_wei_order_item_info wx_order_item, oms_wei_refund_info wx_refund_item, oms_wei_external_procurement_log wx_transit_order) + { + pdd_afterSale.ShopOrderIdStr = wx_order_item?.order_id ?? wx_transit_order?.order_no; + pdd_afterSale.ShopOrderSkuIdStr = wx_order_item?.sku_id ?? wx_transit_order?.order_sku_id; + pdd_afterSale.ShopOrderSkuNameStr = wx_order_item?.sku_attr_str; + pdd_afterSale.WxOrderCreateTime = wx_order_item?.ItemOrder?.create_time == null ? DateTime.MinValue : BaseClass.StampToDateTime((wx_order_item?.ItemOrder?.create_time).ParseToInt()); + pdd_afterSale.ShopOrderRefundStr = ""; // (/*refund_item?.count > 0 &&*/ wx_order_item.refund_status > 1) ? "店铺售后" : ""; + //pdd_afterSale.wxRefundStatus = ""; + if (wx_order_item.refund_status > 1) + { + pdd_afterSale.ShopOrderRefundStr = "店铺售后"; + //pdd_afterSale.wxRefundStatus = pdd_afterSale.order_status_prompt.Contains("待发货") ? "待退款" : "待退货"; + } + pdd_afterSale.TransitBuyerOrderRefundStatus = wx_transit_order?.refund_status; + pdd_afterSale.TransitWarehouseIdStr = wx_transit_order?.platform; + pdd_afterSale.Express1WaybillStr = wx_transit_order?.express_1_waybill; + pdd_afterSale.Express1CompanyStr = wx_transit_order?.express_1_company; + pdd_afterSale.Express2WaybillStr = wx_transit_order?.express_2_waybill; + pdd_afterSale.Express2CompanyStr = wx_transit_order?.express_2_company; + pdd_afterSale.TransferWareHouseStatus = wx_transit_order?.transfer_warehouse_status.ParseToString(); + pdd_afterSale.PreAllocatedOrderNoStr = wx_transit_order?.pre_allocated_order_no.ParseToString(); + // 更新订单中转取号状态 + pdd_afterSale.sendStatus = (pdd_afterSale.TransitOrderStatus + " " + pdd_afterSale.ShopOrderRefundStr).Trim(); + pdd_afterSale.TransitCreateTime = wx_transit_order?.created_time ?? DateTime.MinValue; + } + + void CefReadBuyerOrder(string url, string data) { if (data.Contains("轻奢壁挂式香皂盒置物架卫生间沥水家居可拆卸收纳盒翻盖肥皂盒")) @@ -757,6 +734,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls order.ShopOrderIdStr = o.ShopOrderIdStr; order.ShopOrderSkuIdStr = o.ShopOrderSkuIdStr; order.ShopOrderSkuNameStr = o.ShopOrderSkuNameStr; + order.TransitBuyerOrderRefundStatus = o.ShopOrderSkuNameStr; order.TransitWarehouseIdStr = o.TransitWarehouseIdStr; order.Express1WaybillStr = o.Express1WaybillStr; order.Express1CompanyStr = o.Express1CompanyStr; @@ -803,8 +781,9 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls //if (order.sendStatus.ParseToString().Contains("售后")) if (order.ShopOrderRefundStr.ParseToString().Contains("售后")) { - if (",2,3,4,5,7,8,10,31,".Contains((order.after_sales?.after_sales_status).ParseToString())) + //if (!",2,3,4,5,7,8,10,31,".Contains((order.after_sales?.after_sales_status).ParseToString())) { + // 待发货直接售后,并通知中转仓接口修改退货状态 var afterSaleRst = PddAutoAfterSale(order); } } @@ -850,6 +829,25 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls })); var list = JsonHelper.DeserializeJsonToList(JsonHelper.JObjectParse(data)["result"]["listItemVOList"].ParseToString()); + + var out_order_nos = string.Join(",", list.Select(bo => bo.orderSn)); + var transitOrderList = GetOrderTransitWarehouseInfo(out_order_nos); + + var order_ids = string.Join(",", transitOrderList.Select(ts => ts.order_no)); + var orders = GetOrderInfo(order_ids); + foreach (var order in orders) + { + foreach (var orderItem in order.orderItems) + { + // 中转仓订单 + if (orderItem.ItemOrder.orderItems.Count > 1) + orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id && t.order_sku_id == orderItem.sku_id)); + else + orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id)); + } + } + var refunds = GetOrderRefundInfo(order_ids); + foreach (var af in list) { if (af.orderSn == "260414-035525772830257") @@ -860,6 +858,17 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls af.buyerId = buyer.buyer_id; af.buyerName = buyer.buyer_name; + // 查找店铺订单并更新店铺订单状态 + var transit_item = transitOrderList.FirstOrDefault(t1 => t1.out_order_no == af.orderSn); + if (transit_item != null) + { + var shopOrder = orders.FirstOrDefault(o1 => o1.order_id == transit_item.order_no); + var order_item = shopOrder.orderItems.FirstOrDefault(oi => oi.ItemTransitOrders.Any(t1 => t1.out_order_no == af.orderSn)); + var refund_item = refunds.FirstOrDefault(ri => ri.order_id == order_item.order_id) ?? order_item?.ItemRefund; + + UpdateAfterSaleStatus(af, order_item, refund_item, transit_item); + } + bool isUpdate = false; PddBuyerAfterSaleLiteInfo afterSale = null; if (!this.lstPddBuyerAfterSaleInfoLite.Any(or => or.afterSalesId == af.afterSalesId)) @@ -888,6 +897,20 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls afterSale.listItemGoodsVO = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(af.listItemGoodsVO)); afterSale.listItemMallVO = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(af.listItemMallVO)); afterSale.listItemStatusVO = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(af.listItemStatusVO)); + + afterSale.ShopOrderIdStr = af.ShopOrderIdStr; + afterSale.ShopOrderSkuIdStr = af.ShopOrderSkuIdStr; + afterSale.ShopOrderSkuNameStr = af.ShopOrderSkuNameStr; + afterSale.TransitBuyerOrderRefundStatus = af.TransitBuyerOrderRefundStatus; + afterSale.TransitWarehouseIdStr = af.TransitWarehouseIdStr; + afterSale.Express1WaybillStr = af.Express1WaybillStr; + afterSale.Express1CompanyStr = af.Express1CompanyStr; + afterSale.Express2WaybillStr = af.Express2WaybillStr; + afterSale.Express2CompanyStr = af.Express2CompanyStr; + afterSale.TransferWareHouseStatus = af.TransferWareHouseStatus; + afterSale.PreAllocatedOrderNoStr = af.PreAllocatedOrderNoStr; + afterSale.ShopOrderRefundStr = af.ShopOrderRefundStr; + //afterSale.wxRefundStatus = af.wxRefundStatus; } } @@ -903,15 +926,38 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls if (isUpdate) { - Task.Run(() => + if (afterSale.AfterSaleStatusStr.Contains("退款成功") || afterSale.AfterSaleStatusStr.Contains("交易已取消")) { - //SendAfterSaleE57(lstPddBuyerAfterSaleInfoLite.FirstOrDefault(a => a.orderSn == afterSale.orderSn)); - }); - - Dispatcher.Invoke(new Action(() => - { - ShowAfterSale(lstPddBuyerAfterSaleInfoLite.FirstOrDefault(a => a.orderSn == afterSale.orderSn)); - })); + if (afterSale.TransitBuyerOrderRefundStatus != "买手退款成功") + { + var orderTmp = new PddBuyerOrderLiteInfo() { ShopOrderIdStr = afterSale.ShopOrderIdStr, order_sn = afterSale.orderSn }; + var refundRst = SendTransitAfterSaleE57(orderTmp, "买手退款成功"); + if (refundRst.Contains("0") || refundRst.Contains("200")) + { + afterSale.afterSaleSendStatus = "退款成功 买手退款信息更新成功"; + } + else + { + var msg = BaseRegex.GetStringXml(ref refundRst, "msg"); + afterSale.afterSaleSendStatus = "退款成功 买手退款信息更新失败,服务端返回 " + msg; + } + } + } + else if (afterSale.TransitBuyerOrderRefundStatus != afterSale.AfterSaleStatusStr) + { + //if (!afterSale.AfterSaleStatusStr.Contains("关闭") && !afterSale.AfterSaleStatusStr.Contains("撤销") && !afterSale.AfterSaleStatusStr.Contains("失败")) + var orderTmp = new PddBuyerOrderLiteInfo() { ShopOrderIdStr = afterSale.ShopOrderIdStr, order_sn = afterSale.orderSn }; + var refundRst = SendTransitAfterSaleE57(orderTmp, afterSale.AfterSaleStatusStr); + if (refundRst.Contains("0") || refundRst.Contains("200")) + { + afterSale.afterSaleSendStatus = "买手退款信息更新成功"; + } + else + { + var msg = BaseRegex.GetStringXml(ref refundRst, "msg"); + afterSale.afterSaleSendStatus = "买手退款信息更新失败,服务端返回 " + msg; + } + } } } NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_after_sale_list", lstPddBuyerAfterSaleInfoLite); @@ -946,9 +992,10 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls void GetOrderAndAfterSale() { - nextGetOrderTime = DateTime.Now.AddMinutes(25); GetPddOrder(); //MakeWxToPddAfterSales(); + + nextGetOrderTime = DateTime.Now.AddMinutes(25); } void GetPddOrder() @@ -1014,6 +1061,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls var cookieLst = JsonHelper.DeserializeJsonToList(buyer?.cookie); var t = WPFCEFBrowser.SetCookieAsync(JsonHelper.SerializeObject(cookieLst), buyer.wpf_browser.GetCookieManager(null)); + t.Wait(); buyer.wpf_browser.Load("https://mobile.yangkeduo.com/personal.html"); Thread.Sleep(Randomx.GetId(2000, 3000)); @@ -1023,7 +1071,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls int times = 0; #region 售后 - if (1 == 2) + if (1 == 1) { readBuyer = buyer.buyer_id; currentReadBuyer = buyer.buyer_id; @@ -1249,17 +1297,17 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls var order_ids = string.Join(",", transitOrderList.Select(ts => ts.order_no)); var orders = GetOrderInfo(order_ids); - //foreach (var order in orders) - //{ - // foreach (var orderItem in order.orderItems) - // { - // // 中转仓订单 - // if (orderItem.ItemOrder.orderItems.Count > 1) - // orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id && t.order_sku_id == orderItem.sku_id)); - // else - // orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id)); - // } - //} + foreach (var order in orders) + { + foreach (var orderItem in order.orderItems) + { + // 中转仓订单 + if (orderItem.ItemOrder.orderItems.Count > 1) + orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id && t.order_sku_id == orderItem.sku_id)); + else + orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id)); + } + } var refunds = GetOrderRefundInfo(order_ids); // 查找店铺订单并更新店铺订单状态 @@ -1467,170 +1515,6 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls } } } - - - ConcurrentList tempWaitOrderLst { get; set; } = new ConcurrentList(); - /// - /// 调用e57接口更新web端订单数据信息 - /// - /// - /// 手动强制重置状态,一定重新发送 - public void SendOrderE57(PddBuyerOrderLiteInfo order, bool resetSendStatus = false) - { - //if (resetSendStatus == true) - //{ - // // 防止重复点击发送按钮 - // if (isSendOrderE57) - // return; - // isSendOrderE57 = true; - // Task.Run(() => { Thread.Sleep(3000); isSendOrderE57 = false; }); - //} - - if (tempWaitOrderLst.Any(o => o.order_sn == order.order_sn)) - return; - tempWaitOrderLst.Add(order); - Task.Run(() => - { - var orderSn = order.order_sn; - Thread.Sleep(5000); - tempWaitOrderLst.RemoveAll(o => o.order_sn == orderSn); - }); - - if (order == null) - return; - if (resetSendStatus) - order.sendStatus = ""; - //var row = dgvPddBuyerOrder.Rows.Cast().FirstOrDefault(p => p.Cells.GetCellValueFromColumnName("colOPddOrderSn").ParseToString() == order.order_sn); - //Dispatcher.Invoke(new Action(() => - //{ - // if (row != null) - // row.Cells["colOMsg"].Value = ""; - //})); - Thread.Sleep(100); - - NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); - if (1==1) - { - Dispatcher.Invoke(new Action(() => - { - ShowOrder(order); - })); - return; - } - - #region 暂时作废 - // 已发货且没有运单号的属于已退货,不再发送 - //if (order.order_status_prompt != "拼单成功,待发货" && order.order_status_prompt != "免拼成功,待发货" && ( - // order.order_status_prompt.Contains("交易成功") || - // order.order_status_prompt.Contains("退款成功") || - // order.after_sales != null || - // order.order_status_prompt.Contains("交易已取消") || - // string.IsNullOrEmpty(order.tracking_number) || - // string.IsNullOrEmpty(order.outExpressCompanyCode))) - //{ - // Invoke(new Action(() => - // { - // ShowOrder(order); - // })); - // NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); - // return; - //} - // 外采订单已发货的订单不再尝试发货 - // 已存在 同运单号拦截 订单已绑定外采订单 -- 原提示词 - // 微信发货成功,外采订单已发货, orderNo:260429-064214802032823 | 外采订单已发货, orderNo:260429-438189442672823 -- 新提示词 - if (order.sendStatus.Contains("外采订单已发货") || order.sendStatus.Contains("微信发货成功") || - order.sendStatus.Contains("已发送待发货订单") || order.sendStatus.Contains("接收成功") || - order.sendStatus.Contains("已发送售后订单")) - { - Dispatcher.Invoke(new Action(() => - { - ShowOrder(order); - })); - return; - } - - JObject obj = new JObject(); - obj["platform"] = "WEISHOP"; - obj["outAmount"] = order.order_amount; - obj["outAccount"] = order.buyerName; - obj["outOrderNo"] = order.order_sn; - if (!order.outExpressCompanyCode.IsNullOrEmpty() && !order.tracking_number.IsNullOrEmpty()) - { - obj["outExpressCompany"] = order.outExpressCompanyCode; - obj["outExpressNo"] = order.tracking_number; - } - var dataStr = JsonHelper.SerializeObject(obj); - string url = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/bind"; - //成功 "0SUCCESS" - //失败 已存在 1505调用微信接口更新物流信息失败: 非法参数, 同运单号拦截 rid: 69d8ab9c-22baa3b1-67de0d95 - var exportRst = HttpResponseWXBLL.e57PostResponse(url, dataStr, ""); - if (exportRst == null) - { - - } - for (int i = 0; i < 3 && exportRst.Contains("操作超时") && resetSendStatus == false; i++) - { - Thread.Sleep(210000); - HttpResponseWXBLL.e57PostResponse(url, dataStr, ""); - } - if (exportRst.Contains("操作超时")) - { - order.sendStatus = "发送失败 操作超时"; - NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); - Dispatcher.Invoke(new Action(() => - { - ShowOrder(order); - })); - return; - } - System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); - string msg = ""; - string data = ""; - string code = ""; - try - { - xmlDoc.LoadXml(exportRst); //1505不支持的平台类型: WEISHOP - code = xmlDoc["AjaxResult"]["code"].InnerText; - msg = xmlDoc["AjaxResult"]["msg"].InnerText; - //data = xmlDoc["AjaxResult"]["data"].InnerText; - - // 更新微信外采订单信息成功, orderNo:260430-3065512320302571 - } - catch - { - msg = exportRst.ParseToString(); - } - if (code == "0" || code == "1") //if (msg == "SUCCESS") // || msg == "SUCCESS" - { - var sendStatusTmp = string.IsNullOrEmpty(data) ? msg : data; - order.sendStatus = sendStatusTmp; - - if (code == "0" && !order.sendStatus.Contains("微信发货成功")) - order.sendStatus = ("微信发货成功 " + sendStatusTmp).Trim(); - if (code == "1" && !order.sendStatus.Contains("接收成功")) - order.sendStatus = ("接收成功 " + sendStatusTmp).Trim(); - - // 处理特殊情况 如未发货或退货订单 - //if (order.sendStatus == "处理完成" || order.sendStatus == "快递公司和快递单号必须同时提供或同时为空") - // order.sendStatus = "已发送完成"; - if (order.order_status_prompt.Contains("待发货")) // 更新微信外采订单状态成功 - order.sendStatus = "已发送待发货订单"; - if (order.after_sales != null) - order.sendStatus = "已发送售后订单 " + sendStatusTmp; - NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); - } - else - { - order.sendStatus = "发送失败 " + (string.IsNullOrEmpty(msg) ? data : msg); - NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); - } - Dispatcher.Invoke(new Action(() => - { - ShowOrder(order); - })); - //Thread.Sleep(500); - #endregion - } /// /// 通过服务端批量读取微信售后并触发拼多多售后或显示提示供买手手动退货 @@ -1695,7 +1579,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls } /// - /// 处理一条售后 + /// 处理一条售后,未发货的直接售后 /// /// /// @@ -1711,12 +1595,44 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls //// 退货详情页 ////https://mobile.yangkeduo.com/complaint.html?order_sn=260417-357103060621688&after_sales_reason=0&after_sales_type=1&after_sales_code=1001 - if (!order.order_status_prompt.Contains("待发货")) + if (!order.order_status_prompt.Contains("待发货") && order.after_sales == null) { + var refundRst = SendTransitAfterSaleE57(order, "买手已发货,需手动申请售后"); return "{\"success\":false,\"msg\":\"仅未发货单可以自动退货\"}"; } var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == order.buyerId); + var afterSaleRst = SimPddAfterSale(buyer, order); + if (afterSaleRst.Contains("\"after_sales_status\":1") || afterSaleRst.Contains("该订单已全额退款")) + { + // 保存退款成功状态 + order.order_status_prompt = "退款成功"; + // 中转仓订单买手号售后信息 存到服务端 + var refundRst = SendTransitAfterSaleE57(order); + if (refundRst.Contains("0") || refundRst.Contains("200")) + { + order.sendStatus = "退款成功 买手退款信息更新成功"; + } + else + { + var msg = BaseRegex.GetStringXml(ref refundRst, "msg"); + order.sendStatus = "退款成功 买手退款信息更新失败,服务端返回 " + msg; + } + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); + return "{\"success\":true,\"msg\":\"操作成功\"}"; + } + else + { + var error_msg = BaseRegex.GetStringJsonByRegs(ref afterSaleRst, afterSaleRst, "msg", "error_msg"); + if (string.IsNullOrEmpty(error_msg)) + error_msg = afterSaleRst; + return "{\"success\":false,\"msg\":\"" + error_msg + "\"}"; + } + } + + + public static string SimPddAfterSale(BuyerLoginInfo buyer, PddBuyerOrderLiteInfo order) + { var rst = YkdBuyerOrder.GetInitAfterSale(buyer, order.order_sn); // var mobile = BaseRegex.GetStringJson(ref rst, "userReceivePhone"); @@ -1738,43 +1654,46 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls } Thread.Sleep(Randomx.GetId(1000, 2000)); var afterSaleRst = YkdBuyerOrder.SetOrderAfterSale(buyer, mobile, order.order_sn, applyAmount, refundAmount, newMaxApplyAmount); - if (afterSaleRst.Contains("\"after_sales_status\":1") || afterSaleRst.Contains("该订单已全额退款")) - { - // 保存退款成功状态 - //order.refundStatus = "已完成/退货"; - order.order_status_prompt = "退款成功"; - NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); - Dispatcher.Invoke(new Action(() => - { - ShowOrder(order); - })); - PddBuyerAfterSaleLiteInfo afterSale = new PddBuyerAfterSaleLiteInfo(); - afterSale.listItemStatusVO = new ListItemStatusVO(); - afterSale.listItemStatusVO.statusText = "退款成功"; - afterSale.listItemExtraVO = new ListItemExtraVO(); - //afterSale.listItemExtraVO.navToDetailPageUrl = "&order_sn=" + txtForceSendAfterSale.Text.Trim(); - afterSale.listItemExtraVO.navToDetailPageUrl = "&order_sn=" + order.order_sn; - SendAfterSaleE57(afterSale, true); - return "{\"success\":true,\"msg\":\"操作成功\"}"; - } - else - { - var error_msg = BaseRegex.GetStringJson(ref afterSaleRst, "error_msg"); - if (string.IsNullOrEmpty(error_msg)) - error_msg = afterSaleRst; - return "{\"success\":false,\"msg\":\"" + error_msg + "\"}"; - } + return afterSaleRst; } /// /// 将处理的或读取到更新的售后返回服务端接口 /// /// - /// - /// - public void SendAfterSaleE57(PddBuyerAfterSaleLiteInfo afterSale, bool resetSendStatus = false, bool isManualSendNoRecordCancelOrder = false) + public string SendTransitAfterSaleE57(PddBuyerOrderLiteInfo order, string refundStatus = "买手退款成功") { + //订单作废接口(作废重拍) + //postman request POST 'http://localhost:8088/oms-api/external_procurement/discardOrder' \ + // --header 'Content-Type: application/json' \ + // --body '{ + // "orderNo":"12334534534", + // "outOrderNo":"12312312" + //}' 成功返回code:0 失败返回code:1 + string url2 = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/purchase/refundStatus"; + var data = new JObject(); + data["orderId"] = order.ShopOrderIdStr; + data["outOrderId"] = order.order_sn; + data["refundStatus"] = refundStatus; + var dataStr2 = JsonHelper.SerializeObject(data); + var refundStatusRst = HttpResponseWXBLL.e57PostResponse(url2, dataStr2, ""); + return refundStatusRst; + + //Thread.Sleep(100); + //var url2 = BaseClass.Build29WxObjString("order/wx_update_erp_order_express"); + //var data2 = UserLogin.GetSignaturex(); + //data2 += "&out_order_no=" + order.order_sn; + //data2 += "&refund_status=" + "买手退款成功"; + //var html2 = GetHtml.PostUtf8(url2, data2); + //if (string.IsNullOrEmpty(html2) || !html2.Contains("\"code\":200")) + // html2 = GetHtml.PostUtf8(url2, data2); + //if (string.IsNullOrEmpty(html2) || !html2.Contains("\"code\":200")) + //{ + // order.sendStatus = "退款成功 买手退款信息更新失败"; + //} + //else + // order.sendStatus = "退款成功 买手退款信息更新成功"; } private void chkHideNoWxIdOrder_CheckedChanged(object sender, RoutedEventArgs e) @@ -1798,16 +1717,6 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls filterTxt = txtFilter.Text.Trim(); } - private void btnClose_Click(object sender, RoutedEventArgs e) - { - if (MainWindow.Instance.gridPddBuyerOrderReadCtrl.Visibility != Visibility.Visible) - MainWindow.Instance.gridPddBuyerOrderReadCtrl.Visibility = Visibility.Visible; - if (Panel.GetZIndex(MainWindow.Instance.gridPddBuyerOrderReadCtrl) < 1) - Panel.SetZIndex(MainWindow.Instance.gridPddBuyerOrderReadCtrl, 1); - else - Panel.SetZIndex(MainWindow.Instance.gridPddBuyerOrderReadCtrl, -1); - } - private void btnHide_Click(object sender, RoutedEventArgs e) { if (btnHide.Content.ParseToString() == "▲") @@ -1830,6 +1739,16 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_config", buyerReadOrderConfig); } } + + private void btnHideAll_Click(object sender, RoutedEventArgs e) + { + if (MainWindow.Instance.gridPddBuyerOrderReadCtrl.Visibility != Visibility.Visible) + MainWindow.Instance.gridPddBuyerOrderReadCtrl.Visibility = Visibility.Visible; + if (Panel.GetZIndex(MainWindow.Instance.gridPddBuyerOrderReadCtrl) < 1) + Panel.SetZIndex(MainWindow.Instance.gridPddBuyerOrderReadCtrl, 1); + else + Panel.SetZIndex(MainWindow.Instance.gridPddBuyerOrderReadCtrl, -1); + } } public class YkdBuyerOrder diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml index b30a197..0b964de 100644 --- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml @@ -143,7 +143,7 @@ - + @@ -160,7 +160,8 @@ - + + + - + - + - + --> - + - + + - + - + @@ -289,7 +302,7 @@ - + diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs index 57bbc81..dca5b71 100644 --- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs @@ -199,6 +199,11 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls BaseMsgWindow.ShowError("请选择买手号"); return; } + if (orderItem.sku_cnt > 1 || orderItem.ItemOrder.orderItems.Count > 1) + { + BaseMsgWindow.ShowError("多单或多件商品订单中转仓暂不支持"); + return; + } btnBuyOrder.Cursor = Cursors.Wait; btnBuyOrder.IsEnabled = false; diff --git a/29WxOrderWpf/MainWindow.xaml b/29WxOrderWpf/MainWindow.xaml index 6325fd5..ac91ed6 100644 --- a/29WxOrderWpf/MainWindow.xaml +++ b/29WxOrderWpf/MainWindow.xaml @@ -37,8 +37,11 @@ - - + + + + diff --git a/29WxOrderWpf/MainWindow.xaml.cs b/29WxOrderWpf/MainWindow.xaml.cs index 6efde40..ec1c1b5 100644 --- a/29WxOrderWpf/MainWindow.xaml.cs +++ b/29WxOrderWpf/MainWindow.xaml.cs @@ -29,7 +29,6 @@ using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; -using System.Windows.Forms; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; @@ -431,5 +430,13 @@ namespace _29WxOrderWpf WXGetBalanceQrCodeForm balanceQrCodeForm = new WXGetBalanceQrCodeForm(); balanceQrCodeForm.ShowDialog(); } + + private void gridPddBuyerOrderReadCtrl_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) + { + //if (Panel.GetZIndex(MainWindow.Instance.gridPddBuyerOrderReadCtrl) < 1) + // Panel.SetZIndex(MainWindow.Instance.gridPddBuyerOrderReadCtrl, 1); + //else + // Panel.SetZIndex(MainWindow.Instance.gridPddBuyerOrderReadCtrl, -1); + } } } diff --git a/29WxOrderWpf/Styles/StaticColorBrushDictionary.xaml b/29WxOrderWpf/Styles/StaticColorBrushDictionary.xaml index 8b3c10b..f7c59f0 100644 --- a/29WxOrderWpf/Styles/StaticColorBrushDictionary.xaml +++ b/29WxOrderWpf/Styles/StaticColorBrushDictionary.xaml @@ -25,5 +25,9 @@ + + + + \ No newline at end of file diff --git a/29WxOrderWpf/UserControls/UcWindowBoxes.xaml b/29WxOrderWpf/UserControls/UcWindowBoxes.xaml index ac5c62c..7076337 100644 --- a/29WxOrderWpf/UserControls/UcWindowBoxes.xaml +++ b/29WxOrderWpf/UserControls/UcWindowBoxes.xaml @@ -5,7 +5,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:_29WxOrderWpf.UserControls" mc:Ignorable="d" Width="Auto" Height="Auto" - d:DesignHeight="50" d:DesignWidth="300" Background="Transparent" Loaded="WindowBoxes_Loaded"> + d:DesignHeight="30" d:DesignWidth="60" Background="Transparent" Loaded="WindowBoxes_Loaded">