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; } }