352 lines
13 KiB
C#
352 lines
13 KiB
C#
using _29WxOrderWpf.BaseWindows;
|
||
using _29WxOrderWpf.Ctrls.BuyerCtrls;
|
||
using _29WxOrderWpf.ViewModels;
|
||
using _29WxOrderWpf.Views;
|
||
using AllBase;
|
||
using AllBase.Helper;
|
||
using AllBase.Model.DBModel;
|
||
using AllBase.Model.Result;
|
||
using NaiBa.Util.Extension;
|
||
using Newtonsoft.Json.Linq;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using Work;
|
||
using Work._29Tools.BLL;
|
||
using WxOrder.Framework.Commons;
|
||
|
||
namespace _29WxOrderWpf.Ctrls.OrderCtrls;
|
||
|
||
internal class OrderTransitService
|
||
{
|
||
/// <summary>
|
||
/// 作废中转仓发货包裹
|
||
/// </summary>
|
||
/// <param name="orderItem"></param>
|
||
/// <param name="isSilent"></param>
|
||
/// <param name="UpdateOrderBeforeVoid">作废前是否更新服务端订单状态</param>
|
||
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)
|
||
{
|
||
if (!isSilent)
|
||
{
|
||
if (BaseMsgWindow.ShowConfirm("确定作废当前包裹吗?").DialogResult == false)
|
||
return;
|
||
}
|
||
|
||
// 作废前查询订单状态
|
||
var orderId = orderItem.order_id;
|
||
var skuId = orderItem.sku_id;
|
||
if (UpdateOrderBeforeVoid)
|
||
await Task.Run(async() => { 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();
|
||
else
|
||
orderItem = newOrder?.orderItems?.FirstOrDefault(oi => oi.sku_id == skuId);
|
||
|
||
if (orderItem == null)
|
||
{
|
||
if (!isSilent)
|
||
BaseMsgWindow.ShowError("订单查询失败,请重试");
|
||
return;
|
||
}
|
||
if (transitOrder == null)
|
||
transitOrder = orderItem.ItemTransitOrder ?? orderItem.ItemTransitOrderWithVoid;
|
||
|
||
if (transitOrder == null)
|
||
{
|
||
if (!isSilent)
|
||
BaseMsgWindow.ShowError("要作废的中转订单不存在,请确认后重试");
|
||
return;
|
||
}
|
||
|
||
// 先作废后申请买手退款
|
||
// 订单作废接口(作废重拍)
|
||
//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/discardOrder";
|
||
var data2 = new JObject();
|
||
data2["orderNo"] = orderItem.order_id;
|
||
//data2["outOrderNo"] = transitOrder.out_order_no;
|
||
data2["outOrderNo"] = transitOrder.order_code;
|
||
var dataStr2 = JsonHelper.SerializeObject(data2);
|
||
var discardRst = await HttpResponseWXBLL.e57PostResponseAsync(url2, dataStr2);
|
||
if (discardRst.Contains("\"code\":0") || discardRst.Contains("\"code\":200"))
|
||
{
|
||
//MainWindow.Instance.orderListCtrl.GetOrder(orderId);
|
||
// 修改为在买手退款流程后提示作废信息
|
||
}
|
||
else
|
||
{
|
||
var msg = BaseRegex.GetStringJsonByRegs(ref discardRst, discardRst, "msg");
|
||
if (!isSilent)
|
||
BaseMsgWindow.ShowInfo("订单作废失败,服务端返回 " + msg);
|
||
|
||
return;
|
||
}
|
||
|
||
#region 处理买手售后
|
||
if (transitOrder.out_order_no.ParseToString().StartsWith("tb_")) // 淘宝买手售后
|
||
{
|
||
if (!isSilent)
|
||
BaseMsgWindow.ShowError("淘宝买手暂不支持自动售后,作废后请手动申请售后");
|
||
else
|
||
transitOrder.refund_status = "淘宝买手暂不支持自动售后,作废后需手动申请售后";
|
||
}
|
||
else // 拼多多买手售后
|
||
{
|
||
bool noBuyer = false;
|
||
var buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == transitOrder.buyer_account || b.buyer_name == transitOrder.buyer_account);
|
||
if (buyer == null)
|
||
{
|
||
if (!isSilent)
|
||
if (BaseMsgWindow.ShowConfirm("拍单买手不存在,点击确定直接作废中转单并手动取消买手单,点击取消登录买手后重试").DialogResult != true)
|
||
return;
|
||
noBuyer = true;
|
||
}
|
||
|
||
// 检测一下买手号
|
||
if (GlobalConfig.CurrentPddBuyer.status == "在线")
|
||
{
|
||
await Task.Run(() =>
|
||
{
|
||
PddMobileLoginViewModel.CheckBuyerLogin(GlobalConfig.CurrentPddBuyer);
|
||
});
|
||
}
|
||
if (GlobalConfig.CurrentPddBuyer.status != "在线")
|
||
{
|
||
if (!isSilent)
|
||
if (BaseMsgWindow.ShowConfirm("买手号掉线,点击确定直接作废中转单并手动取消买手单,点击取消登录买手后重试").DialogResult != true)
|
||
return;
|
||
noBuyer = true;
|
||
}
|
||
|
||
if (!noBuyer)
|
||
{
|
||
PddBuyerOrderLiteInfo order = null;
|
||
order = PDDBuyerOrderReadCtrl.lstPddBuyerOrderInfoLite.FirstOrDefault(o => o.order_sn == transitOrder.out_order_no);
|
||
if (order == null)
|
||
order = new PddBuyerOrderLiteInfo()
|
||
{
|
||
order_status_prompt = "待发货",
|
||
order_amount = transitOrder.out_amount,
|
||
order_sn = transitOrder.out_order_no
|
||
};
|
||
PDDBuyerOrderReadCtrl.lstPddBuyerOrderInfoLite.Add(order);
|
||
|
||
var pddAfterRst = "";
|
||
await Task.Run(() =>
|
||
{
|
||
pddAfterRst = PDDBuyerOrderReadCtrl.SimPddAfterSale(buyer, order);
|
||
});
|
||
|
||
if (pddAfterRst.Contains("\"after_sales_status\":1") || pddAfterRst.Contains("该订单已全额退款") || pddAfterRst.Contains("订单未付款"))
|
||
{
|
||
// 保存退款成功状态
|
||
order.order_status_prompt = pddAfterRst.Contains("订单未付款") ? "订单未付款" : "退款成功";
|
||
// 中转仓订单买手号售后信息 存到服务端
|
||
var refundRst = PDDBuyerOrderReadCtrl.SendTransitAfterSaleE57(order);
|
||
if (refundRst.Contains("<code>0</code>") || refundRst.Contains("<code>200</code>"))
|
||
{
|
||
order.sendStatus = "退款成功 买手退款信息更新成功";
|
||
}
|
||
else
|
||
{
|
||
var msg = BaseRegex.GetStringXml(ref refundRst, "msg");
|
||
order.sendStatus = "退款成功 买手退款信息更新失败,服务端返回 " + msg;
|
||
}
|
||
NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", PDDBuyerOrderReadCtrl.lstPddBuyerOrderInfoLite);
|
||
}
|
||
else
|
||
{
|
||
if (!isSilent)
|
||
if (BaseMsgWindow.ShowConfirm("买手退款失败,点击确定直接作废中转单并手动取消买手单,点击取消稍候重试").DialogResult != true)
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 更新拍单余额
|
||
StartUp.UpdateBalance();
|
||
#endregion
|
||
|
||
#region 立即更新订单
|
||
transitOrder = orderItem.ItemTransitOrders.FirstOrDefault(o => o.order_code == transitOrder.order_code) ?? transitOrder;
|
||
transitOrder.order_void_status = 1;
|
||
orderItem.SetOrderItemTextProperty();
|
||
#endregion
|
||
|
||
#region 重新过滤订单
|
||
OrderListCtrl.InitOrderItemObservableProp(orderItem);
|
||
MainWindow.Instance.orderListCtrl.FilterOrders();
|
||
if (!isSilent)
|
||
BaseMsgWindow.ShowInfo("订单作废成功,请重新拍单");
|
||
#endregion
|
||
}
|
||
|
||
/// <summary>
|
||
/// 作废售后包裹
|
||
/// </summary>
|
||
/// <param name="returnOrder"></param>
|
||
/// <returns></returns>
|
||
public static async Task<string> VoidAfterSalePackage(oms_wei_order_item_info orderItem, oms_wei_external_procurement_after_sale_info returnOrder)
|
||
{
|
||
string typeStr = returnOrder?.pack_type == 1 ? "作废分销发货退货包裹" : "作废额外包裹退货包裹";
|
||
string msg = $@"确定{typeStr}吗?";
|
||
|
||
if (BaseMsgWindow.ShowConfirm(msg, typeStr, null, MsgWindowLevel.MEDIUM, 300).DialogResult != true)
|
||
return "";
|
||
|
||
string url2 = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/orders/interceptReturn";
|
||
var data = new JObject();
|
||
data["externalOrderNo"] = returnOrder.external_order_no;
|
||
data["orderNo"] = returnOrder.order_no; // 订单编号
|
||
data["orderCode"] = returnOrder.order_code;
|
||
data["packType"] = returnOrder.pack_type; /* 1作废分销发货退货包裹 2作废额外包裹退货包裹 */
|
||
var dataStr2 = JsonHelper.SerializeObject(data);
|
||
var voidRst = await HttpResponseWXBLL.e57PostResponseAsync(url2, dataStr2);
|
||
|
||
if (voidRst.Contains("\"code\":0") || voidRst.Contains("\"code\":200"))
|
||
{
|
||
StartUp.UpdateBalance();
|
||
returnOrder.order_void_status = 1;
|
||
orderItem.SetOrderItemTextProperty();
|
||
return typeStr + "成功!";
|
||
}
|
||
else
|
||
{
|
||
throw new Exception(typeStr + "失败,服务端返回:" + BaseRegex.GetStringJsonByRegs(ref voidRst, voidRst, "msg"));
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 作废额外包裹
|
||
/// </summary>
|
||
/// <param name="orderItem"></param>
|
||
/// <param name="extraOrder"></param>
|
||
/// <returns></returns>
|
||
/// <exception cref="Exception"></exception>
|
||
public static async Task<string> VoidExtraPackage(oms_wei_order_item_info orderItem, oms_wei_transfer_extra_package extraOrder)
|
||
{
|
||
string typeStr = "作废额外包裹";
|
||
string msg = $@"确定{typeStr}吗?";
|
||
|
||
if (BaseMsgWindow.ShowConfirm(msg, typeStr, null, MsgWindowLevel.MEDIUM, 300).DialogResult != true)
|
||
return "";
|
||
|
||
var data = new JObject();
|
||
data["batchId"] = extraOrder.batchId;
|
||
data["orderCode"] = extraOrder.order_code;
|
||
var dataStr = JsonHelper.SerializeObject(data);
|
||
var url = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/extraOrders/void";
|
||
var voidRst = await HttpResponseWXBLL.e57PostResponseAsync(url, dataStr);
|
||
if (BaseRegex.GetStringJson(ref voidRst, "code") != "0" && BaseRegex.GetStringJson(ref voidRst, "code") != "200")
|
||
{
|
||
throw new Exception("作废额外包裹失败,服务端返回:" + BaseRegex.GetStringJsonByRegs(ref voidRst, voidRst, "msg"));
|
||
}
|
||
StartUp.UpdateBalance();
|
||
extraOrder.order_void_status = 1;
|
||
orderItem.SetOrderItemTextProperty();
|
||
//MainWindow.Instance.orderListCtrl.FilterOneOrder(orderItem.order_id);
|
||
return "作废额外包裹成功!";
|
||
}
|
||
|
||
/// <summary>
|
||
/// 云仓申请拒收退回总店
|
||
/// </summary>
|
||
/// <param name="orderItem"></param>
|
||
public static async Task<string> RejectTransitOrder(oms_wei_order_item_info orderItem, oms_wei_external_procurement_log_info _itemTransitOrder)
|
||
{
|
||
string msg = $@"
|
||
云仓拒收退回总店
|
||
|
||
说 明:店铺产生售后,拒收成功,货物会原物流退回总店。
|
||
拒收条件:(总店物流没到云仓/未签收前)。顺丰/京东无法
|
||
拒收,直接总店申请仅退款让总店拦截。
|
||
收 费:免费";
|
||
|
||
if (BaseMsgWindow.ShowConfirm(msg, "云仓拒收退回总店", null, MsgWindowLevel.LARGE, 300).DialogResult != true)
|
||
return "";
|
||
|
||
orderItem.ItemTransitOrders = await OrderListCtrl.GetTransitWarehouseList(orderItem.order_id);
|
||
orderItem.PddBuyerOrders = (await OrderListCtrl.GetPddBuyerOrders(orderItem.order_id)).Where(o => o.wx_send_type == 0).ToList();
|
||
orderItem.PddBuyerOrders.AddRange((await OrderListCtrl.GetTbBuyerOrders(orderItem.order_id)).Where(o => o.wx_send_type == 0).ToList());
|
||
OrderListCtrl.InitOrderItemObservableProp(orderItem);
|
||
|
||
var itemTransitOrder = orderItem.ItemTransitOrders.FirstOrDefault(o => o.order_code == _itemTransitOrder?.order_code && o.out_order_no == _itemTransitOrder?.out_order_no);
|
||
if (itemTransitOrder == null)
|
||
itemTransitOrder = _itemTransitOrder;
|
||
|
||
//if (itemTransitOrder?.warehouse_status == 3) { BaseMsgWindow.ShowError("商品已拒收或拦截!"); return; }
|
||
//if (itemTransitOrder?.warehouse_status == 2) { BaseMsgWindow.ShowError("商品已出库,请选择退回中转仓!"); return; }
|
||
//if (string.IsNullOrEmpty(orderItem.PddBuyerOrder?.order_sn)) { BaseMsgWindow.ShowError("商品未出单,请直接去拼多多买手申请退款"); return; }
|
||
if (itemTransitOrder?.has_reject == 1 || itemTransitOrder?.has_reject == 3)
|
||
{
|
||
//BaseMsgWindow.ShowAnimateMessage("已申请拒收", "Msg", 3);
|
||
return "已申请过拒收";
|
||
}
|
||
|
||
// 中转仓拒收(已产生物流)
|
||
string url = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/orders/rejectApply";
|
||
var dataObj = new JObject();
|
||
dataObj["orderCode"] = itemTransitOrder?.order_code;
|
||
dataObj["orderId"] = orderItem.order_id;
|
||
dataObj["logisticsExpressCode"] = orderItem.PddBuyerOrder?.order_sn;
|
||
var data = JsonHelper.SerializeObject(dataObj);
|
||
var html = HttpResponseWXBLL.e57PostResponse(url, data, "");
|
||
int rejectStatus = 0;
|
||
if (html.Contains("<code>0</code>") || html.Contains("<code>200</code>"))
|
||
{
|
||
rejectStatus = 1;
|
||
//BaseMsgWindow.ShowAnimateMessage("申请成功", "Msg", 3);
|
||
}
|
||
else
|
||
{
|
||
rejectStatus = 2;
|
||
var err = BaseRegex.GetStringXmlByRegs(ref html, html, "msg");
|
||
//BaseMsgWindow.ShowAnimateMessage("申请失败", "Error", 3);
|
||
throw new Exception("申请失败" + err);
|
||
}
|
||
url = BaseClass.Build29WxObjString("order/wx_update_transit_order_reject_status");
|
||
data = UserLogin.GetSignaturex();
|
||
data += "&order_no=" + orderItem.order_id;
|
||
data += "&order_sku_id=" + orderItem.sku_id;
|
||
data += "&has_reject=" + rejectStatus;
|
||
html = await GetHtml.PostUtf8Async(url, data);
|
||
|
||
itemTransitOrder.has_reject = rejectStatus;
|
||
OrderListCtrl.InitOrderItemObservableProp(orderItem);
|
||
|
||
return "申请成功";
|
||
}
|
||
|
||
/// <summary>
|
||
/// 申请拒收后查询拒收状态
|
||
/// </summary>
|
||
/// <param name="orderItem"></param>
|
||
/// <param name="upperWaybill"></param>
|
||
public static void ShowRejectTransitOrder(oms_wei_order_item_info orderItem, string upperWaybill)
|
||
{
|
||
BaiduGetWaybillInfoView buyerLoginForm = new BaiduGetWaybillInfoView(orderItem);
|
||
buyerLoginForm.ViewModel.InitUrl = "https://www.baidu.com/s?ie=UTF-8&wd=" + upperWaybill;
|
||
|
||
new DialogWindow()
|
||
{
|
||
Width = 1280,
|
||
Height = 800,
|
||
Title = "物流拒收查询",
|
||
Content = buyerLoginForm,
|
||
}.Show();
|
||
return;
|
||
}
|
||
}
|