278 lines
12 KiB
C#
278 lines
12 KiB
C#
using _29WxOrderWpf.BaseWindows;
|
|
using AllBase;
|
|
using AllBase.Helper;
|
|
using AllBase.Model.Config;
|
|
using AllBase.Model.DBModel;
|
|
using NaiBa.Util.Extension;
|
|
using Newtonsoft.Json.Linq;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Data;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Input;
|
|
using System.Windows.Interop;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
using System.Windows.Shapes;
|
|
using Work._29Tools.BLL;
|
|
|
|
namespace _29WxOrderWpf.Windows.OrderWindows
|
|
{
|
|
/// <summary>
|
|
/// TransitAfterSaleWindow.xaml 的交互逻辑
|
|
/// </summary>
|
|
public partial class TransitAfterSaleWindow : BaseWindow
|
|
{
|
|
public oms_wei_order_item_info OrderItem { get; set; }
|
|
|
|
public TransitAfterSaleWindow(oms_wei_order_item_info orderItem)
|
|
{
|
|
InitializeComponent();
|
|
|
|
if (orderItem != null)
|
|
OrderItem = orderItem;
|
|
}
|
|
|
|
private void mainGrid_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private async void TransitAfterSaleWindow_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
btnAdd.IsEnabled = true;
|
|
foreach (var warehouse in TransitWarehouseData.TransitWarehouseList)
|
|
{
|
|
this.cmbWareHouse.Items.Add(warehouse.TransName);
|
|
}
|
|
|
|
if (OrderItem != null)
|
|
{
|
|
this.cmbWareHouse.Text = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransId == OrderItem.ItemTransitOrderWithVoid?.platform)?.TransName;
|
|
this.txtExpressName.Text = OrderItem.ItemTransitOrder?.express_2_company ?? OrderItem.ItemTransitOrderWithVoid?.express_2_company;
|
|
this.txtWarehouseWaybill.Text = OrderItem.ItemTransitOrder?.express_2_waybill ?? OrderItem.ItemTransitOrderWithVoid?.express_2_waybill;
|
|
|
|
if (OrderItem.ItemTransitOrderAfterSale != null)
|
|
{
|
|
btnAdd.IsEnabled = false;
|
|
|
|
this.txtUser.Text = OrderItem.ItemTransitOrderAfterSale.recipient_name;
|
|
this.txtMobile.Text = OrderItem.ItemTransitOrderAfterSale.recipient_phone;
|
|
this.txtDetailAddress.Text = OrderItem.ItemTransitOrderAfterSale.refund_detail_address;
|
|
//this.txtAddress.Text = OrderItem.ItemTransitOrderAfterSale.refund_province + "/" + OrderItem.ItemTransitOrderAfterSale.refund_city + "/" + OrderItem.ItemTransitOrderAfterSale.refund_county;
|
|
this.txtProvince.Text = OrderItem.ItemTransitOrderAfterSale.refund_province;
|
|
this.txtCity.Text = OrderItem.ItemTransitOrderAfterSale.refund_city;
|
|
this.txtCounty.Text = OrderItem.ItemTransitOrderAfterSale.refund_county;
|
|
}
|
|
else
|
|
{
|
|
// 需要手动申请售后的,先去申请售后再提交拦截退回总店
|
|
if (!string.IsNullOrEmpty(OrderItem.ItemTransitOrderWithVoid?.out_order_no) && OrderItem.PddBuyerAfterSaleAddressStr.IsNullOrEmpty() &&
|
|
OrderItem.TransitRefundStatusStr.Contains("需手动申请售后") || OrderItem.TransitRefundStatusStr.Contains("待用户发货"))
|
|
{
|
|
btnAdd.IsEnabled = false;
|
|
imgLoading.Visibility = Visibility.Visible;
|
|
await MainWindow.Instance.orderListCtrl.DoBuyerRefend(new List<oms_wei_order_item_info>() { OrderItem });
|
|
var order = GlobalConfig.lstOrder.FirstOrDefault(o => o.order_id == OrderItem.order_id);
|
|
if (order != null)
|
|
{
|
|
var orderItemTmp = order.orderItems.FirstOrDefault(oi => oi.sku_id == OrderItem.sku_id);
|
|
if (orderItemTmp != null)
|
|
OrderItem = orderItemTmp;
|
|
}
|
|
btnAdd.IsEnabled = true;
|
|
}
|
|
|
|
if (OrderItem.PddBuyerAfterSale?.orderSn == OrderItem.ItemTransitOrder?.out_order_no && !string.IsNullOrEmpty(OrderItem.PddBuyerAfterSale?.afterSaleAddress))
|
|
{
|
|
txtAddressAnalysis.Text = OrderItem.PddBuyerAfterSale?.afterSaleAddress;
|
|
btnAddressAnalysis_Click(null, null);
|
|
}
|
|
}
|
|
imgLoading.Visibility = Visibility.Collapsed;
|
|
|
|
// 如果提交过工单,则显示已提交工单及提交时间。
|
|
var workOrderInfo = await GetWorkOrder();
|
|
var issueType = BaseRegex.GetStringJson(ref workOrderInfo, "issueType");
|
|
var createTime = BaseRegex.GetStringJson(ref workOrderInfo, "createdAt").ParseToString().ParseToDateTime();
|
|
if (!string.IsNullOrEmpty(issueType))
|
|
{
|
|
lblWorkOrderMsg.Content = "已提交工单(" + createTime.ParseToString() + ")";
|
|
}
|
|
}
|
|
|
|
//if (OrderItem?.ItemTransitOrder?.warehouse_status != 0 && OrderItem?.ItemTransitOrder?.warehouse_status != 1)
|
|
////if (OrderItem?.ItemTransitOrderWithVoid?.warehouse_status != 0 && OrderItem?.ItemTransitOrderWithVoid?.warehouse_status != 1)
|
|
//{
|
|
// btnAdd.IsEnabled = false;
|
|
// //BaseMsgWindow.ShowError("当前订单仓库状态不支持售后,请联系买家直接退回总店!");
|
|
// lblMsg.Content = "当前订单仓库状态不支持售后,请联系买家直接退回总店!";
|
|
// return;
|
|
//}
|
|
|
|
if ((OrderItem?.ItemTransitOrder?.warehouse_status).ParseToInt() < 1)
|
|
{
|
|
//btnAdd.IsEnabled = false;
|
|
//lblMsg.Content = "当前订单仓库状态不支持拦截退回总店,建议联系买家直接退回总店!";
|
|
}
|
|
}
|
|
|
|
private void btnAdd_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (string.IsNullOrEmpty(lblWorkOrderMsg.Content.ParseToString()))
|
|
{
|
|
var workOrder = AddWorkOrder();
|
|
if (!workOrder.Contains("\"success\":true"))
|
|
{
|
|
BaseMsgWindow.ShowError("中转拦截包裹添加失败," + BaseRegex.GetStringJson(ref workOrder, "message"), "", this);
|
|
return;
|
|
}
|
|
}
|
|
//{"success":true,"replayed":true,"operation":"replayed","ticket":{"id":"1d268a38-7f60-4295-9345-a8f21298181c","ticketNo":"WO-20260820102516-AE62D8F2","issueType":"拦截退回云仓-出库后","status":"pending_approval","queue":"pending"},"creatorBinding":{"bound":true,"clientUserId":"user_1784451034258_a6da3c","username":"18305598906"},"targetOrder":{"appId":"wx5cfcfda1fae03689","wechatOrderNo":"3737793636785868032","purchaseOrderNo":"260716-496899202560980","verified":true},"requestId":"2bbd8e98-0a95-4162-9fc1-b377644209ed"}
|
|
|
|
|
|
//http://localhost:8088/oms-api/external_procurement/createReturnPackage
|
|
//{
|
|
// "orderNo": "3737011320735026432",
|
|
// "orderCode": "4600000167202606117621000767",
|
|
// "refundProvince": "安徽省",
|
|
// "refundCity": "合肥市",
|
|
// "refundCounty": "瑶海区",
|
|
// "refundDetailAddress": "某街道 1”,
|
|
// "recipientName": "张三",
|
|
// "recipientPhone": "13800138000"
|
|
//} post(json)请求方式,如果使用客户端账户扣款增加一个参数account_user
|
|
|
|
JObject data = new JObject();
|
|
data["orderNo"] = OrderItem.order_id;
|
|
data["orderCode"] = OrderItem.ItemTransitOrderWithVoid?.order_code;
|
|
data["refundProvince"] = txtProvince.Text.Trim();
|
|
data["refundCity"] = txtCity.Text.Trim();
|
|
data["refundCounty"] = txtCounty.Text.Trim();
|
|
data["refundDetailAddress"] = txtDetailAddress.Text.Trim();
|
|
data["recipientName"] = txtUser.Text.Trim();
|
|
data["recipientPhone"] = txtMobile.Text.Trim();
|
|
data["account_user"] = BaseClass.UserName;
|
|
data["accountUser"] = BaseClass.UserName;
|
|
//data["platform"] = "WEISHOP";
|
|
|
|
if (GlobalConfig.BuyConfig.IsUseAppBalance)
|
|
{
|
|
string basePostageKey = WarehousePostageInfo.DicWarehousePostage.Keys.FirstOrDefault(pk => (txtProvince.Text.Trim()).ParseToString().Contains(pk));
|
|
decimal basePostage = basePostageKey.IsNullOrEmpty() ? WarehousePostageInfo.DicWarehousePostage.Values.Min() : WarehousePostageInfo.DicWarehousePostage[basePostageKey];
|
|
basePostage += 0.3m; // 送货2.2 退货2.5(+3毛)
|
|
|
|
data["oemAmount"] = (BaseClass.RefundPostagePerOrderDiff * 100).ParseToInt().ParseToString();
|
|
data["postage"] = ((basePostage + BaseClass.RefundPostagePerOrderDiff) * 100).ParseToInt().ParseToString();
|
|
}
|
|
|
|
var getTransitAfterSaleUrl = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/createReturnPackage";
|
|
var getTransitAfterSaleStr = JsonHelper.SerializeObject(data);
|
|
var getTransitAfterSaleRst = HttpResponseWXBLL.e57PostResponse(getTransitAfterSaleUrl, getTransitAfterSaleStr, "");
|
|
if (!getTransitAfterSaleRst.ParseToString().Contains("<code>200</code>") && !getTransitAfterSaleRst.ParseToString().Contains("<code>0</code>"))
|
|
{
|
|
string msg = BaseRegex.GetStringXml(ref getTransitAfterSaleRst, "msg");
|
|
if (msg.IsNullOrEmpty())
|
|
msg = getTransitAfterSaleRst;
|
|
BaseMsgWindow.ShowError("中转售后添加失败,服务端返回 " + msg, "", this);
|
|
}
|
|
else
|
|
{
|
|
//<AjaxResult><msg>创建退货包裹成功</msg><code>0</code></AjaxResult>
|
|
MainWindow.Instance.orderListCtrl.GetOrder(OrderItem.order_id);
|
|
Task.Run(() => { MainWindow.Instance.orderListCtrl.FilterOrders(); });
|
|
BaseMsgWindow.ShowInfo("添加退货包裹成功", "", this);
|
|
this.Close();
|
|
}
|
|
}
|
|
|
|
private void btnAddressAnalysis_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
var txt = txtAddressAnalysis.Text.Trim();
|
|
txt = txt.Replace("\r", "").Replace("\n", "");
|
|
|
|
|
|
// 定义座机号的正则表达式
|
|
string landlinePattern = @"\d{3}-\d{8}|\d{4}-\d{7}";
|
|
// 定义手机号的正则表达式
|
|
string mobilePattern = @"1[3-9]\d{9}";
|
|
|
|
// 使用正则表达式匹配座机号和手机号
|
|
Match landlineMatch = Regex.Match(txt, landlinePattern);
|
|
Match mobileMatch = Regex.Match(txt, mobilePattern);
|
|
|
|
var phone = "";
|
|
if (landlineMatch.Success)
|
|
{
|
|
phone = landlineMatch.Value;
|
|
txt = txt.Replace(phone, " ");
|
|
}
|
|
if (mobileMatch.Success)
|
|
{
|
|
phone = mobileMatch.Value;
|
|
txt = txt.Replace(phone, " ");
|
|
}
|
|
if (!string.IsNullOrEmpty(phone))
|
|
{
|
|
txtMobile.Text = phone;
|
|
}
|
|
|
|
var province = GlobalConfig.Divisions.FirstOrDefault(d => txt.Contains(d.name));
|
|
if (province == null)
|
|
return;
|
|
txtProvince.Text = province.name;
|
|
var city = province.children.FirstOrDefault(c => txt.Contains(c.name));
|
|
if (city == null)
|
|
return;
|
|
txtCity.Text = city.name;
|
|
var county = city.children.FirstOrDefault(c => txt.Contains(c.name));
|
|
if (county == null)
|
|
return;
|
|
txtCounty.Text = county.name;
|
|
txt = txt.Replace(county.name, " ").Replace(city.name, " ").Replace(province.name, " ");
|
|
|
|
var tArr = txt.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
|
|
tArr = tArr.OrderBy(t => t.Length).ToArray();
|
|
this.txtUser.Text = tArr.FirstOrDefault();
|
|
this.txtDetailAddress.Text = string.Join("", tArr).Replace(this.txtUser.Text, "");
|
|
}
|
|
|
|
private void btnWorkOrder_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
}
|
|
|
|
public string AddWorkOrder()
|
|
{
|
|
if (OrderItem.ItemTransitOrder?.warehouse_status == 3)
|
|
return "\"success\":true,\"message\":\"已到仓,无需拦截工单\"";
|
|
if (OrderItem.ItemTransitOrderWithVoid?.warehouse_status == 3)
|
|
return "\"success\":true,\"message\":\"已到仓,无需拦截工单\"";
|
|
|
|
string url = HttpResponseTransitWorkOrderBLL.WorkOrderUrl + "/api/open/v1/customer-work-orders/intercept-return-cloud-warehouse-after-outbound";
|
|
JObject obj = new JObject();
|
|
obj["appId"] = this.OrderItem.Shop?.ShopId;
|
|
obj["wechatOrderNo"] = this.OrderItem.order_id;
|
|
//obj["purchaseOrderNo"] = this.OrderItem.PddBuyerAfterSale?.orderSn;
|
|
obj["purchaseOrderNo"] = OrderItem.ItemTransitOrderWithVoid?.order_code;
|
|
obj["creator"] = BaseClass.UserName;
|
|
obj["remark"] = "客户要求拦截并退回云仓";
|
|
|
|
var rst = HttpResponseTransitWorkOrderBLL.PostResponse(this.OrderItem.Shop, url, JsonHelper.SerializeObject(obj), "");
|
|
return rst;
|
|
}
|
|
|
|
public async Task<string> GetWorkOrder()
|
|
{
|
|
string url = HttpResponseTransitWorkOrderBLL.WorkOrderUrl + "/api/open/v1/customer-work-orders?wechatOrderNo=" + this.OrderItem.order_id;
|
|
var rst = await HttpResponseTransitWorkOrderBLL.GetResponseAsync(this.OrderItem.Shop, url, "");
|
|
return rst;
|
|
}
|
|
}
|
|
}
|