拒收自动退款功能

This commit is contained in:
wule committed 2026-08-22 16:04:56 +08:00
1 parent 5aaab77de3
commit 9ddc4c3640
7 files changed
+169 -69

No files matched your search

@@ -375,6 +375,13 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
if (string.IsNullOrEmpty(orderIds))
GetShopWaybillExceptionOrder();
// 处理拒收单
if (string.IsNullOrEmpty(orderIds))
Task.Run(async () =>
{
await AutoUpdateTransitRejectedToPddShop();
});
// 处理中转仓退货包裹
if (string.IsNullOrEmpty(orderIds))
AutoUpdateTransitPackageToPddShop();
@@ -793,6 +800,42 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
}
}
/// <summary>
/// 中转仓拒收去总店填写退货拒收信息
/// </summary>
public async Task AutoUpdateTransitRejectedToPddShop()
{
foreach (var order in GlobalConfig.lstOrder)
{
foreach (var orderItem in order.orderItems)
{
if (orderItem.order_id == "3738552208766960384")
{
}
if (orderItem.TransitRefundStatusStr.ParseToString().Contains("需手动申请售后") &&
orderItem.ItemTransitOrderWithVoid?.has_reject == 3 && orderItem.ItemTransitOrderWithVoid?.platform != "XDYYWC") // 义乌仓不支持拒收,等于3也是失败
{
// 拒收后24小时才去总店填拒收退货
if (orderItem.ItemTransitOrderWithVoid?.rejected_time > DateTime.Now.AddHours(-24))
break;
await OrderListRowItemCtrl.PddRefundTransitRejectOrder(orderItem);
// 赋值显示订单元素
Dispatcher.Invoke(new Action(() =>
{
InitOrderItemObservableProp(orderItem);
MainWindow.Instance.orderListCtrl.FilterOneOrder(order);
}));
// 第一个订单多个商品暂不支持,只操作一条记录
break;
}
}
}
}
/// <summary>
/// 中转仓拦截去总店填写退货物流信息
/// </summary>
@@ -919,7 +962,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
// if (!result.Contains("\"result\":\"ok\""))
// {
// type = type == 4 ? 2 : 4;
// chkRst = AddReturnPddShopPackageInfo(buyer, orderSn, afterSalesId, waybillId, "韵达快递", "121", type.ToString());
// result = AddReturnPddShopPackageInfo(buyer, orderSn, afterSalesId, waybillId, "韵达快递", "121", type.ToString());
// }
// if (result.Contains("\"result\":\"ok\""))
@@ -980,7 +1023,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
if (!result.Contains("\"result\":\"ok\""))
{
type = type == 4 ? 2 : 4;
chkRst = AddReturnPddShopPackageInfo(buyer, orderSn, afterSalesId, waybillId, "韵达快递", "121", type.ToString());
result = AddReturnPddShopPackageInfo(buyer, orderSn, afterSalesId, waybillId, "韵达快递", "121", type.ToString());
}
if (result.Contains("\"result\":\"ok\""))
@@ -1497,7 +1497,7 @@
IsReadOnly="True"
Text="中转仓拒收:" />
<uc:UcWaterMarkTextBox1
x:Name="txtTransitWarehouseReject"
x:Name="txtTransitWarehouseRejectSuccessTime"
Grid.Row="2"
Grid.Column="1"
Margin="0,1,0,1"
@@ -1505,7 +1505,7 @@
Background="Transparent"
BorderThickness="1"
IsReadOnly="True"
Text=""
Text="{Binding TransitWarehouseRejectSuccessTimeStr}"
TextWrapping="Wrap"
WaterMark="中转仓拒收" />
<Button
@@ -1444,58 +1444,85 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
});
}
private void btnPddRefundTransitWarehouseRejectOrder_Click(object sender, RoutedEventArgs e)
private async void btnPddRefundTransitWarehouseRejectOrder_Click(object sender, RoutedEventArgs e)
{
if (this.DataContext is oms_wei_order_item_info orderItem && orderItem.ItemTransitOrderWithVoid != null)
if (this.DataContext is oms_wei_order_item_info orderItem && orderItem.ItemTransitOrderWithVoid != null && orderItem.ItemOrder != null)
{
var pddOrderSn = orderItem.ItemTransitOrderWithVoid.out_order_no;
await PddRefundTransitRejectOrder(orderItem);
BuyerLoginInfo buyer = null;
buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_nick == orderItem.ItemTransitOrderWithVoid.buyer_account);
// 检测一下买手号
if (buyer.status == "在线")
// 赋值显示订单元素
Dispatcher.Invoke(new Action(() =>
{
PddMobileLoginForm.CheckBuyerLogin(buyer);
}
if (buyer.status != "在线")
{
BaseMsgWindow.ShowAnimateMessage("买手单:" + pddOrderSn + " 买手号掉线,跳过", "Error", 3);
return;
}
OrderListCtrl.InitOrderItemObservableProp(orderItem);
MainWindow.Instance.orderListCtrl.FilterOneOrder(orderItem.ItemOrder);
}));
}
}
// 拒收一定是云仓
string refundStatusStr = (orderItem.TransitRefundStatusStr).ParseToString();
public static async Task PddRefundTransitRejectOrder(oms_wei_order_item_info orderItem)
{
var pddOrderSn = orderItem.ItemTransitOrderWithVoid?.out_order_no;
if (string.IsNullOrEmpty(pddOrderSn))
return;
PddBuyerOrderLiteInfo pddBuyerOrderLiteInfo = new PddBuyerOrderLiteInfo();
pddBuyerOrderLiteInfo.ShopOrderIdStr = orderItem.order_id;
pddBuyerOrderLiteInfo.order_sn = pddOrderSn;
pddBuyerOrderLiteInfo.order_amount = orderItem.ItemTransitOrderWithVoid?.out_amount;
BuyerLoginInfo buyer = null;
buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_nick == orderItem.ItemTransitOrderWithVoid.buyer_account);
if (buyer == null)
{
return;
}
// 检测一下买手号
if (buyer.status == "在线")
{
PddMobileLoginForm.CheckBuyerLogin(buyer);
}
if (buyer.status != "在线")
{
BaseMsgWindow.ShowAnimateMessage("买手单:" + pddOrderSn + " 买手号掉线,跳过", "Error", 5);
return;
}
order_pdd_buyer_after_sale pddBuyerAfterSale = new order_pdd_buyer_after_sale()
{
wx_order_id = orderItem.order_id,
wx_sku_id = orderItem.sku_id,
TransitCreateTime = orderItem.ItemTransitOrderWithVoid?.created_time == null ? DateTime.MinValue : orderItem.ItemTransitOrderWithVoid.created_time,
pre_allocated_order_no = orderItem.ItemTransitOrderWithVoid?.pre_allocated_order_no,
buyerId = buyer.buyer_id,
buyerName = buyer.buyer_name,
orderSn = pddOrderSn,
orderAmount = pddBuyerOrderLiteInfo.order_amount,
refundAmount = pddBuyerOrderLiteInfo.order_amount,
orderDate = pddOrderSn.ParseToString().Split('-').FirstOrDefault().ParseToInt(),
};
if (orderItem.PddBuyerAfterSale != null)
pddBuyerAfterSale = orderItem.PddBuyerAfterSale;
// 拒收一定是云仓
string refundStatusStr = (orderItem.TransitRefundStatusStr).ParseToString();
if (refundStatusStr.Contains("需手动申请售后")) // 退款失败 // 申请已撤销
PddBuyerOrderLiteInfo pddBuyerOrderLiteInfo = new PddBuyerOrderLiteInfo();
pddBuyerOrderLiteInfo.ShopOrderIdStr = orderItem.order_id;
pddBuyerOrderLiteInfo.order_sn = pddOrderSn;
pddBuyerOrderLiteInfo.order_amount = orderItem.ItemTransitOrderWithVoid?.out_amount;
order_pdd_buyer_after_sale pddBuyerAfterSale = new order_pdd_buyer_after_sale()
{
wx_order_id = orderItem.order_id,
wx_sku_id = orderItem.sku_id,
TransitCreateTime = orderItem.ItemTransitOrderWithVoid?.created_time == null ? DateTime.MinValue : orderItem.ItemTransitOrderWithVoid.created_time,
pre_allocated_order_no = orderItem.ItemTransitOrderWithVoid?.pre_allocated_order_no,
buyerId = buyer.buyer_id,
buyerName = buyer.buyer_name,
orderSn = pddOrderSn,
orderAmount = pddBuyerOrderLiteInfo.order_amount,
refundAmount = pddBuyerOrderLiteInfo.order_amount,
orderDate = pddOrderSn.ParseToString().Split('-').FirstOrDefault().ParseToInt(),
};
if (orderItem.PddBuyerAfterSale != null)
pddBuyerAfterSale = orderItem.PddBuyerAfterSale;
if (refundStatusStr.Contains("需手动申请售后")) // 退款失败 // 申请已撤销
{
await Task.Run(() =>
{
// {\"after_sales_id\":22312641041100,\"after_sales_status\":11,\"after_sales_type\":2,\"not_really_created\":true}
var rst = PDDBuyerOrderReadCtrl.SimPddAfterSaleWithRejected(buyer, pddBuyerOrderLiteInfo, pddBuyerAfterSale);
string rst = "";
rst = PDDBuyerOrderReadCtrl.SimPddAfterSaleWithRejected(buyer, pddBuyerOrderLiteInfo, pddBuyerAfterSale);
var afterSalesStatus = BaseRegex.GetIntJson(ref rst, "after_sales_status");
var afterSalesId = BaseRegex.GetLongJson(ref rst, "after_sales_id");
if (afterSalesId.IsNullOrZero())
return;
pddBuyerAfterSale.afterSalesId = afterSalesId.ToString();
// 更新内存数据 ----------------------------------------------------------------
pddBuyerAfterSale.statusText = "商家处理中";
orderItem.ItemTransitOrderWithVoid.refund_status = "商家处理中";
// --------------------------------------------------------------------------//
if (afterSalesStatus == 0)
{
@@ -1523,7 +1550,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
if (e57Rst.Contains("<code>0</code>") || e57Rst.Contains("<code>200</code>"))
{
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新成功" + orderItem.order_id, "Msg", 3);
Thread.Sleep(Randomx.GetId(10000, 12001));
Thread.Sleep(Randomx.GetId(2000, 5001));
}
else
{
@@ -1531,7 +1558,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新失败,服务端返回 " + msg, "Error", 3);
}
}
}
});
}
}
}
+1 -1
View File
@@ -36,7 +36,7 @@ namespace AllBase
/// 版本ID
/// </summary>
public static int VersionCount = 255;
public static int VersionCount = 256;
public static string ServerUrl { get; set; } = "http://1.13.195.131:9000";
public static string DebugUrl { get; set; } = "http://localhost:9000";
+21 -10
View File
@@ -1158,16 +1158,27 @@ 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";
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""");
request.Headers.Add("Upgrade-Insecure-Requests", @"1");
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36";
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7";
request.Headers.Add("Sec-Fetch-Site", @"none");
request.Headers.Add("Sec-Fetch-Mode", @"navigate");
request.Headers.Add("Sec-Fetch-User", @"?1");
request.Headers.Add("Sec-Fetch-Dest", @"document");
//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""");
//request.Headers.Add("Upgrade-Insecure-Requests", @"1");
//request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36";
//request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7";
request.Accept = "*/*";
if (timeOut == -1)
{
request.Timeout = BaseClass.TimeOut * 1000;
request.ReadWriteTimeout = BaseClass.TimeOut * 1000;
}
else
{
request.Timeout = timeOut * 1000;
request.ReadWriteTimeout = timeOut * 1000;
}
//request.Headers.Add("Sec-Fetch-Site", @"none");
//request.Headers.Add("Sec-Fetch-Mode", @"navigate");
//request.Headers.Add("Sec-Fetch-User", @"?1");
//request.Headers.Add("Sec-Fetch-Dest", @"document");
request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9");
request.AllowAutoRedirect = false;
@@ -94,7 +94,17 @@ namespace AllBase.Model.DBModel
/// 超重费用,单位:分
/// </summary>
public int? over_weight_fee { get; set; }
/// <summary>
/// 0未申请拒收 1已申请拒收 2申请拒收失败 3已拒收成功 5取消拒收
/// </summary>
public int has_reject { get; set; }
}
/// <summary>
/// 拦截到仓时间
/// </summary>
public DateTime? blocked_arrival_time { get; set; }
/// <summary>
/// 拒收时间
/// </summary>
public DateTime? rejected_time { get; set; }
}
}
@@ -261,8 +261,11 @@ namespace AllBase.Model.DBModel
else
TransitOrderWaybillFromWareHouseStr = "仓库物流:" + ItemTransitOrder.express_2_company + "-" + ItemTransitOrder.express_2_waybill;
if (order_id == "3738552208766960384")
{
}
TransitWarehouseRejectSuccessTimeStr = this.ItemTransitOrderWithVoid?.rejected_time == null ? "" : this.ItemTransitOrderWithVoid.rejected_time.Value.ToString("yy-MM-dd HH:mm");
AddEditTransitWarehouseRejectStr = "申请";
if (this.ItemTransitOrderWithVoid?.has_reject == 1)
AddEditTransitWarehouseRejectStr = "已申请拒收";
@@ -337,18 +340,24 @@ namespace AllBase.Model.DBModel
// 直发买手退货地址
this.DirectPddBuyerAfterSaleAddressStr = this.DirectPddBuyerAfterSale?.afterSaleAddress;
}
/// <summary>
/// 仓库拒收按钮文本参数
/// </summary>
public string AddEditTransitWarehouseRejectStr
{
get { return this.GetValue(x => x.AddEditTransitWarehouseRejectStr); }
set { this.SetValue(x => x.AddEditTransitWarehouseRejectStr, value); }
}
/// <summary>
/// 仓库退货编辑按钮文本参数
/// </summary>
public string AddEditTransitWarehouseAfterSaleStr
/// <summary>
/// 仓库拒收按钮文本参数
/// </summary>
public string AddEditTransitWarehouseRejectStr
{
get { return this.GetValue(x => x.AddEditTransitWarehouseRejectStr); }
set { this.SetValue(x => x.AddEditTransitWarehouseRejectStr, value); }
}
public string TransitWarehouseRejectSuccessTimeStr
{
get { return this.GetValue(x => x.TransitWarehouseRejectSuccessTimeStr); }
set { this.SetValue(x => x.TransitWarehouseRejectSuccessTimeStr, value); }
}
/// <summary>
/// 仓库退货编辑按钮文本参数
/// </summary>
public string AddEditTransitWarehouseAfterSaleStr
{
get { return this.GetValue(x => x.AddEditTransitWarehouseAfterSaleStr); }
set { this.SetValue(x => x.AddEditTransitWarehouseAfterSaleStr, value); }