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
{
///
/// 作废中转仓发货包裹
///
///
///
/// 作废前是否更新服务端订单状态
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("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", 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
}
///
/// 作废售后包裹
///
///
///
public static async Task 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"));
}
}
///
/// 作废额外包裹
///
///
///
///
///
public static async Task 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 "作废额外包裹成功!";
}
///
/// 云仓申请拒收退回总店
///
///
public static async Task 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 OrderGetOrderListHelper.GetTransitWarehouseList(orderItem.order_id);
orderItem.PddBuyerOrders = (await OrderGetOrderListHelper.GetPddBuyerOrders(orderItem.order_id)).Where(o => o.wx_send_type == 0).ToList();
orderItem.PddBuyerOrders.AddRange((await OrderGetOrderListHelper.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("0") || html.Contains("200"))
{
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 "申请成功";
}
///
/// 申请拒收后查询拒收状态
///
///
///
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;
}
}