中转仓详情作废发货包裹功能

This commit is contained in:
wule committed 2026-10-30 20:43:13 +08:00
1 parent f167c2585d
commit 6d3f9e4118
10 files changed
+114 -76

No files matched your search

@@ -124,8 +124,8 @@ namespace _29WxOrderWpf.BaseWindows
MainWindow.Instance.borderMessage.BorderBrush = Application.Current.Resources["pageColorBrush"] as SolidColorBrush;
MainWindow.Instance.tbMessage.Foreground = Application.Current.Resources["pageColorBrush"] as SolidColorBrush;
}
if (type.ToLower() == "error")
{
if (type.ToLower() == "err" || type.ToLower() == "error")
{
MainWindow.Instance.borderMessage.BorderBrush = Application.Current.Resources["PageWarningBrush"] as SolidColorBrush;
MainWindow.Instance.tbMessage.Foreground = Application.Current.Resources["PageWarningBrush"] as SolidColorBrush;
}
@@ -1399,7 +1399,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
if (!lstPddBuyerOrderVoidAfterSaleOrderSn.Contains(orderItem.order_id + orderItem.sku_id))
{
lstPddBuyerOrderVoidAfterSaleOrderSn.Add(orderItem.order_id + orderItem.sku_id);
OrderListRowItemCtrl.VoidOrder(orderItem, true);
await OrderListRowItemCtrl.VoidOrder(orderItem, null, true);
}
}
}
@@ -405,7 +405,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
// 售后 第一页
if (url1.StartsWith("https://mobile.yangkeduo.com/complaint_list.html"))
{
await Task.Run(() =>
await Task.Run(async () =>
{
if (data1.Contains("listItemStatusVo") && data1.Contains("afterSalesId") && data1.Contains("statusText"))
{
@@ -421,7 +421,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
var jObj = JsonHelper.JObjectParse(jsonData);
jObj["result"] = jObj["all"];
jObj["result"]["listItemVOList"] = jObj["result"]["list"];
CefReadBuyerAfterSale(buyerId, JsonHelper.SerializeObject(jObj));
await CefReadBuyerAfterSale(buyerId, JsonHelper.SerializeObject(jObj));
}
catch
{
@@ -431,14 +431,11 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}
});
}
// 读取售后
if (url1.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/blade/after_sales_list"))
{
await Task.Run(() =>
{
CefReadBuyerAfterSale(url1, data1);
});
}
// 读取售后
if (url1.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/blade/after_sales_list"))
{
await CefReadBuyerAfterSale(url1, data1);
}
});
}
@@ -1021,7 +1018,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite);
}
void CefReadBuyerAfterSale(string url, string data)
async Task CefReadBuyerAfterSale(string url, string data)
{
var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => url.Contains(b.buyer_id));
if (buyer == null)
@@ -1343,7 +1340,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
if (!lstPddBuyerOrderVoidAfterSaleOrderSn.Contains(orderItem.order_id + orderItem.sku_id))
{
lstPddBuyerOrderVoidAfterSaleOrderSn.Add(orderItem.order_id + orderItem.sku_id);
OrderListRowItemCtrl.VoidOrder(orderItem, true);
await OrderListRowItemCtrl.VoidOrder(orderItem, null, true);
}
}
}
@@ -1356,7 +1356,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
if (!lstTbBuyerOrderVoidAfterSaleOrderSn.Contains(orderItem.order_id + orderItem.sku_id))
{
lstTbBuyerOrderVoidAfterSaleOrderSn.Add(orderItem.order_id + orderItem.sku_id);
OrderListRowItemCtrl.VoidOrder(orderItem, true);
await OrderListRowItemCtrl.VoidOrder(orderItem, null, true);
}
}
}
@@ -158,7 +158,7 @@ public partial class OrderListCtrl
if (ret)
{
sucessCount++;
this.GetOrder(item.order_id);
await this.GetOrder(item.order_id);
SetProgress(index, count);
item.IsSelect = false;
}
@@ -2931,7 +2931,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
html3 = await GetHtml.PostUtf8Async(url3, data3);
}
MainWindow.Instance.orderListCtrl.GetOrder(tmpOrderItem.order_id);
await Task.Run(() => { MainWindow.Instance.orderListCtrl.GetOrder(tmpOrderItem.order_id); });
Dispatcher.Invoke(new Action(() => { BottomMsg = "正在处理买手退货,总计:" + tmpOrderItems.Count + ",已处理:" + index; }));
#endregion
}
@@ -3301,13 +3301,21 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
}
IsAutoBuy = true;
btnAutoBuy.IsEnabled = false;
foreach (var order in buyOrders)
{
var orderItem = order.orderItems.FirstOrDefault();
await OrderListRowItemCtrl.BuyOrder(orderItem, true);
if (IsAutoBuy == false)
break;
try
{
var orderItem = order.orderItems.FirstOrDefault();
await OrderListRowItemCtrl.BuyOrder(orderItem, true);
if (IsAutoBuy == false)
break;
}
catch
{
}
}
btnAutoBuy.IsEnabled = true;
IsAutoBuy = false;
BaseMsgWindow.ShowInfo("自动拍单结束!");
}
@@ -371,7 +371,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
// 拍单前查询订单是否退款
var orderId = orderItem.order_id;
var skuId = orderItem.sku_id;
MainWindow.Instance.orderListCtrl.GetOrder(orderId);
await MainWindow.Instance.orderListCtrl.GetOrder(orderId);
var newOrder = GlobalConfig.lstOrder.FirstOrDefault(or => or.order_id == orderId);
if (newOrder.orderItems.Count == 1)
orderItem = newOrder?.orderItems?.FirstOrDefault();
@@ -385,18 +385,18 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
if (!isAbnormalOrder && orderItem.ItemTransitOrder != null)
{
// 正常单有未作废订单的,不可再拍单
BaseMsgWindow.ShowAnimateMessage("该订单已有采购记录", "Error", 5);
BaseMsgWindow.ShowAnimateMessage("该订单已有采购记录", "Error", 6);
return;
}
if (isAbnormalOrder && (orderItem.ItemOrder.status <= 21 || orderItem.ItemTransitOrder == null || orderItem.ItemTransitOrder.refund_status != "买手退款成功"))
{
// 异常单不是被拼多多买家秒退的且已取号的,不可异常重拍
BaseMsgWindow.ShowAnimateMessage("该异常单不符合重拍条件", "Error", 5);
BaseMsgWindow.ShowAnimateMessage("该异常单不符合重拍条件", "Error", 6);
return;
}
// 如果是退款单,弹出退款窗口
if (CheckIsRefund(orderItem))
if (CheckIsRefund(orderItem, isAutoBuy))
return;
// 拍单前检测买手号是否在线
@@ -408,6 +408,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
}
if (GlobalConfig.CurrentPddBuyer.status != "在线")
{
OrderListCtrl.IsAutoBuy = false;
BaseMsgWindow.ShowError("买手号掉线");
return;
}
@@ -422,6 +423,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
{
if (BaseClass.Balance < 10)
{
OrderListCtrl.IsAutoBuy = false;
BaseMsgWindow.ShowError("软件快递余额不足(剩余" + BaseClass.Balance.ToString("0.00") + "元,拍单至少需保留10元),无法中转拍单,请先充值!");
return;
}
@@ -498,7 +500,10 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
// }
// catch(Exception ex)
// {
// BaseMsgWindow.ShowError(ex.Message);
// if (isAutoBuy)
// BaseMsgWindow.ShowAnimateMessage(ex.Message, "Error", 6);
// else
// BaseMsgWindow.ShowError(ex.Message);
// return;
// }
//}
@@ -575,7 +580,10 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
}
catch (Exception ex)
{
BaseMsgWindow.ShowError(ex.Message);
if (isAutoBuy)
BaseMsgWindow.ShowAnimateMessage(ex.Message, "Error", 6);
else
BaseMsgWindow.ShowError(ex.Message);
}
}
});
@@ -630,7 +638,10 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
}
catch (Exception ex)
{
BaseMsgWindow.ShowError(ex.Message);
if (isAutoBuy)
BaseMsgWindow.ShowAnimateMessage(ex.Message, "Error", 6);
else
BaseMsgWindow.ShowError(ex.Message);
}
}
});
@@ -686,7 +697,10 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
}
catch (Exception ex)
{
BaseMsgWindow.ShowError(ex.Message);
if (isAutoBuy)
BaseMsgWindow.ShowAnimateMessage(ex.Message, "Error", 6);
else
BaseMsgWindow.ShowError(ex.Message);
}
}
});
@@ -1072,7 +1086,9 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
{
if (this.DataContext is oms_wei_order_item_info orderItem)
{
VoidOrder(orderItem);
btnVoidTransitOrder.IsEnabled = false;
await VoidOrder(orderItem);
btnVoidTransitOrder.IsEnabled = true;
}
}
@@ -1082,46 +1098,47 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
/// <param name="orderItem"></param>
/// <param name="isSilent"></param>
/// <param name="UpdateOrderBeforeVoid">作废前是否更新服务端订单状态</param>
public static async void VoidOrder(oms_wei_order_item_info orderItem, bool isSilent = false, bool UpdateOrderBeforeVoid = true)
public static async Task VoidOrder(oms_wei_order_item_info orderItem, oms_wei_external_procurement_log_info transitOrder = null, bool isSilent = false, bool UpdateOrderBeforeVoid = true)
{
// 作废前查询订单状态
var orderId = orderItem.order_id;
var skuId = orderItem.sku_id;
await Task.Run(() =>
{
if (UpdateOrderBeforeVoid)
MainWindow.Instance.orderListCtrl.GetOrder(orderId);
if (UpdateOrderBeforeVoid)
await Task.Run(() => { MainWindow.Instance.orderListCtrl.GetOrder(orderId); });
var newOrder = GlobalConfig.lstOrder.FirstOrDefault(or => or.order_id == orderId);
if (newOrder?.orderItems.Count == 1)
orderItem = newOrder?.orderItems?.FirstOrDefault();
else
orderItem = newOrder?.orderItems?.FirstOrDefault(oi => oi.sku_id == skuId);
});
var newOrder = GlobalConfig.lstOrder.FirstOrDefault(or => or.order_id == orderId);
if (newOrder?.orderItems.Count == 1)
orderItem = newOrder?.orderItems?.FirstOrDefault();
else
orderItem = newOrder?.orderItems?.FirstOrDefault(oi => oi.sku_id == skuId);
if (orderItem == null)
{
if (!isSilent)
BaseMsgWindow.ShowError("订单查询失败,请重试");
return;
}
if (orderItem.ItemTransitOrder == null)
if (transitOrder == null)
transitOrder = orderItem.ItemTransitOrder ?? orderItem.ItemTransitOrderWithVoid;
if (transitOrder == null)
{
if (!isSilent)
BaseMsgWindow.ShowError("要作废的中转订单不存在,请确认后重试");
return;
}
if (orderItem.ItemTransitOrder.out_order_no.ParseToString().StartsWith("tb_")) // 淘宝买手售后
if (transitOrder.out_order_no.ParseToString().StartsWith("tb_")) // 淘宝买手售后
{
if (!isSilent)
BaseMsgWindow.ShowError("淘宝买手暂不支持自动售后,请手动申请售后");
else
orderItem.ItemTransitOrder.refund_status = "淘宝买手暂不支持自动售后,需手动申请售后";
transitOrder.refund_status = "淘宝买手暂不支持自动售后,需手动申请售后";
}
else // 拼多多买手售后
{
bool noBuyer = false;
var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == orderItem?.ItemTransitOrder?.buyer_account || b.buyer_name == orderItem?.ItemTransitOrder?.buyer_account);
var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == transitOrder.buyer_account || b.buyer_name == transitOrder.buyer_account);
if (buyer == null)
{
if (!isSilent)
@@ -1149,17 +1166,22 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
if (!noBuyer)
{
PddBuyerOrderLiteInfo order = null;
MainWindow.Instance.Dispatcher.Invoke(new Action(() => { }));
order = PDDBuyerOrderReadCtrl.lstPddBuyerOrderInfoLite.FirstOrDefault(o => o.order_sn == orderItem.ItemTransitOrder.out_order_no);
order = PDDBuyerOrderReadCtrl.lstPddBuyerOrderInfoLite.FirstOrDefault(o => o.order_sn == transitOrder.out_order_no);
if (order == null)
order = new PddBuyerOrderLiteInfo()
{
order_status_prompt = "待发货",
order_amount = orderItem.ItemTransitOrder.out_amount,
order_sn = orderItem.ItemTransitOrder.out_order_no
order_amount = transitOrder.out_amount,
order_sn = transitOrder.out_order_no
};
PDDBuyerOrderReadCtrl.lstPddBuyerOrderInfoLite.Add(order);
var pddAfterRst = PDDBuyerOrderReadCtrl.SimPddAfterSale(buyer, order);
var pddAfterRst = "";
await Task.Run(() =>
{
pddAfterRst = PDDBuyerOrderReadCtrl.SimPddAfterSale(buyer, order);
});
if (pddAfterRst.Contains("\"after_sales_status\":1") || pddAfterRst.Contains("该订单已全额退款") || pddAfterRst.Contains("订单未付款"))
{
// 保存退款成功状态
@@ -1197,15 +1219,16 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
string url2 = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/discardOrder";
var data2 = new JObject();
data2["orderNo"] = orderItem.order_id;
//data2["outOrderNo"] = orderItem.ItemTransitOrder.out_order_no;
data2["outOrderNo"] = orderItem.ItemTransitOrder.order_code;
//data2["outOrderNo"] = transitOrder.out_order_no;
data2["outOrderNo"] = transitOrder.order_code;
var dataStr2 = JsonHelper.SerializeObject(data2);
var discardRst = HttpResponseWXBLL.e57PostResponse(url2, dataStr2, "");
if (discardRst.Contains("<code>0</code>") || discardRst.Contains("<code>200</code>"))
var discardRst = await HttpResponseWXBLL.e57PostResponseAsync(url2, dataStr2);
if (discardRst.Contains("\"code\":0") || discardRst.Contains("\"code\":200"))
{
//MainWindow.Instance.orderListCtrl.GetOrder(orderId);
#region 立即更新订单
orderItem.ItemTransitOrder.order_void_status = 1;
transitOrder = orderItem.ItemTransitOrders.FirstOrDefault(o => o.order_code == transitOrder.order_code) ?? transitOrder;
transitOrder.order_void_status = 1;
orderItem.SetOrderItemTextProperty();
#endregion
@@ -1222,7 +1245,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
}
else
{
var msg = BaseRegex.GetStringXml(ref discardRst, "msg");
var msg = BaseRegex.GetStringJson(ref discardRst, "msg");
if (!isSilent)
BaseMsgWindow.ShowInfo("订单作废失败,服务端返回 " + msg);
}
@@ -1705,26 +1728,33 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
});
}
static bool CheckIsRefund(oms_wei_order_item_info orderItem)
static bool CheckIsRefund(oms_wei_order_item_info orderItem, bool isAutoBuy = false)
{
if (/*orderItem?.ItemRefund?.count > 0 &&*/ orderItem.refund_status > 1)
{
MainWindow.Instance.Dispatcher.Invoke(new Action(() =>
if (isAutoBuy)
{
var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ErpShopId == orderItem.shop_id.ParseToString());
if (shop != null)
BaseMsgWindow.ShowAnimateMessage("订单有售后,请去店铺后台退款", "Error", 6);
}
else
{
MainWindow.Instance.Dispatcher.Invoke(new Action(() =>
{
WXShopLoginForm shopLoginForm = new WXShopLoginForm(shop);
shopLoginForm.openType = Work._29Tools.Forms.ShopForms.EnumOpenType.manage;
shopLoginForm.WindowState = System.Windows.Forms.FormWindowState.Maximized;
shopLoginForm.InitUrl = "https://store.weixin.qq.com/shop/aftersale/detail?orderid=" + orderItem.ItemRefund.after_sale_order_id;
shopLoginForm.Show();
}
else
{
BaseMsgWindow.ShowError("订单有售后,请去店铺后台退款");
}
}));
var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ErpShopId == orderItem.shop_id.ParseToString());
if (shop != null)
{
WXShopLoginForm shopLoginForm = new WXShopLoginForm(shop);
shopLoginForm.openType = Work._29Tools.Forms.ShopForms.EnumOpenType.manage;
shopLoginForm.WindowState = System.Windows.Forms.FormWindowState.Maximized;
shopLoginForm.InitUrl = "https://store.weixin.qq.com/shop/aftersale/detail?orderid=" + orderItem.ItemRefund.after_sale_order_id;
shopLoginForm.Show();
}
else
{
BaseMsgWindow.ShowError("订单有售后,请去店铺后台退款");
}
}));
}
return true;
}
return false;
@@ -37,6 +37,7 @@ public partial class OrderTransitListDetailCtrl : UserControl
{
if (this.DataContext is oms_wei_order_item_transit_detail_info transitDetailInfo)
{
btnVoidPackage.IsEnabled = false;
var orderItem = transitDetailInfo.oms_wei_order_item_info;
var transitOrder = transitDetailInfo.oms_wei_external_procurement_log_info;
var returnOrder = transitDetailInfo.oms_wei_external_procurement_after_sale_info;
@@ -45,7 +46,8 @@ public partial class OrderTransitListDetailCtrl : UserControl
// 作废发货包裹
if (transitOrder != null)
{
transitOrder = orderItem.ItemTransitOrders.FirstOrDefault(t => t.order_code == transitOrder.order_code) ?? transitOrder;
await OrderListRowItemCtrl.VoidOrder(orderItem, transitOrder);
}
// 作废退货包裹
else if (returnOrder != null)
@@ -77,6 +79,7 @@ public partial class OrderTransitListDetailCtrl : UserControl
}
RefreshListCtrl(orderItem);
btnVoidPackage.IsEnabled = true;
}
}
@@ -217,8 +217,8 @@ namespace _29WxOrderWpf.Windows.OrderWindows
}
else
{
//<AjaxResult><msg>创建退货包裹成功</msg><code>0</code></AjaxResult>
await MainWindow.Instance.orderListCtrl.GetOrder(OrderItem.order_id);
//<AjaxResult><msg>创建退货包裹成功</msg><code>0</code></AjaxResult>
await Task.Run(() => { MainWindow.Instance.orderListCtrl.GetOrder(OrderItem.order_id); });
//MainWindow.Instance.orderListCtrl.FilterOrders();
StartUp.UpdateBalance();
BaseMsgWindow.ShowInfo("添加退货包裹成功", "", this);
@@ -61,7 +61,7 @@ public class oms_wei_order_item_transit_info : PropertyNotifyObject
{
var transitDetail = new oms_wei_order_item_transit_detail_info()
{
//VoidPackageBtnVisibility = Visibility.Visible, /* 作废发货包裹 */
VoidPackageBtnVisibility = Visibility.Visible, /* 作废发货包裹 */
RejectPackageBtnVisibility = Visibility.Visible, /* 拒收发货包裹 */
//ReturnPackageBtnVisibility = Visibility.Visible,
//ExtraPackagesBtnVisibility = Visibility.Visible,