Files

352 lines
13 KiB
C#
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.GetStringJson(ref 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;
}
}