using _29WxOrderWpf.BaseWindows; using _29WxOrderWpf.Ctrls.OrderCtrls; using AllBase; using AllBase.Helper; using AllBase.Model.Config; 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.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 { /// /// TransitReturnOrderWindow.xaml 的交互逻辑 /// public partial class TransitReturnOrderWindow : BaseWindow { public static TransitReturnOrderWindow instance { get; set; } public oms_wei_order_item_info OrderItem { get; set; } public TransitReturnOrderWindow(oms_wei_order_item_info orderItem) { InitializeComponent(); instance = this; if (orderItem != null) OrderItem = orderItem; } private void mainGrid_Loaded(object sender, RoutedEventArgs e) { } private void TransitAfterSaleWindow_Loaded(object sender, RoutedEventArgs e) { this.cmbExpressName.Items.Add(""); this.cmbExpressName.Items.Add("邮政EMS"); this.cmbExpressName.Items.Add("极兔速递"); this.cmbExpressName.Items.Add("申通快递"); this.cmbExpressName.Items.Add("韵达快递"); this.cmbExpressName.Items.Add("圆通速递"); this.cmbExpressName.Items.Add("中通快递"); this.cmbExpressName.Items.Add("百世快运"); this.cmbExpressName.Items.Add("顺丰速运"); this.cmbExpressName.Items.Add("京东快递"); this.cmbExpressName.Items.Add("其他快递"); if (OrderItem != null) { // 上海仓默认发货地址 // 随机用户名 txtSendUser.Text = TransitWaybillHelper.LastName[Randomx.GetId(TransitWaybillHelper.LastName.Count)] + (Randomx.GetId(2) == 1 ? "先生" : "女士"); // 固定手机号及地址 txtSendMobile.Text = "13024622251"; txtSendProvince.Text = "上海市"; txtSendCity.Text = "上海市"; txtSendCounty.Text = "普陀区"; txtSendDetailAddress.Text = GlobalConfig.TransitReturnOrderReturnAddress; txtShopOrderId.Text = OrderItem.order_id; txtShopName.Text = OrderItem.ItemOrder?.shop_name; txtGoodsName.Text = OrderItem.title; txtSpuId.Text = OrderItem.product_id.ParseToString(); txtSpecName.Text = OrderItem.sku_attr_str; txtWaybillId.Text = OrderItem.ItemRefund?.return_waybill_id; foreach (var cmbItem in cmbExpressName.Items) { if (PddBuyerOrderLiteInfo.GetWxExpressCodeToWxExpressName((OrderItem.ItemRefund?.return_delivery_id).ParseToString()) == cmbItem.ParseToString()) { cmbExpressName.SelectedItem = cmbItem; } } this.txtAddressAnalysis.Text = OrderItem.PddBuyerAfterSale?.afterSaleAddress; if (OrderItem?.ItemOrder?.OrderBuyType == "直发" || OrderItem?.ItemOrder?.OrderBuyType == "云改直") { this.txtAddressAnalysis.Text = OrderItem?.DirectPddBuyerAfterSale?.afterSaleAddress; } btnAddressAnalysis_Click(null, null); if (OrderItem.AddEditTransitWarehouseReturnOrderStr == "已添加") { // 回填库内信息 btnAdd.Content = "创 建"; if (OrderItem.DistribReturnOrderInfo != null) { txtProvince.Text = OrderItem.DistribReturnOrderInfo.receiver_province; txtCity.Text = OrderItem.DistribReturnOrderInfo.receiver_city; txtCounty.Text = OrderItem.DistribReturnOrderInfo.receiver_area; txtDetailAddress.Text = OrderItem.DistribReturnOrderInfo.receiver_address; txtUser.Text = OrderItem.DistribReturnOrderInfo.receiver_name; txtMobile.Text = OrderItem.DistribReturnOrderInfo.receiver_phone; } } if (OrderItem.AddEditTransitWarehouseReturnOrderStr == "已创建未到仓" || OrderItem.AddEditTransitWarehouseReturnOrderStr == "已到仓" || OrderItem.AddEditTransitWarehouseReturnOrderStr == "已发回") { btnAdd.IsEnabled = btnAddressAnalysis.IsEnabled = false; if (OrderItem.DistribReturnOrderInfo != null) { txtProvince.Text = OrderItem.DistribReturnOrderInfo.receiver_province; txtCity.Text = OrderItem.DistribReturnOrderInfo.receiver_city; txtCounty.Text = OrderItem.DistribReturnOrderInfo.receiver_area; txtDetailAddress.Text = OrderItem.DistribReturnOrderInfo.receiver_address; txtUser.Text = OrderItem.DistribReturnOrderInfo.receiver_name; txtMobile.Text = OrderItem.DistribReturnOrderInfo.receiver_phone; } } } } private void btnAdd_Click(object sender, RoutedEventArgs e) { if (OrderItem?.ItemOrder?.OrderBuyType == "云仓" && (OrderItem?.ItemTransitOrder?.warehouse_status).ParseToInt() < 1) { //BaseMsgWindow.ShowError("当前订单仓库状态不支持创建退货订单!"); //return; } if (txtWaybillId.Text.Trim().IsNullOrEmpty() || PddBuyerOrderLiteInfo.GetPddToTransitWarehouseExpressCompanyCode(cmbExpressName.SelectedItem.ParseToString()).IsNullOrEmpty()) { BaseMsgWindow.ShowError("缺少店铺退货单号!"); return; } if (txtUser.Text.Trim().IsNullOrEmpty() || txtMobile.Text.Trim().IsNullOrEmpty() || txtProvince.Text.Trim().IsNullOrEmpty() || txtCity.Text.Trim().IsNullOrEmpty() || txtCounty.Text.Trim().IsNullOrEmpty() || txtDetailAddress.Text.Trim().IsNullOrEmpty()) { BaseMsgWindow.ShowError("缺少收货人信息!"); return; } if (txtUser.Text.Trim().Length > 15) { BaseMsgWindow.ShowError("收货人姓名长度不能超过15!"); return; } JObject jObj = new JObject(); jObj["orderCodeSource"] = OrderItem.order_id; jObj["logisticsCode"] = PddBuyerOrderLiteInfo.GetPddToTransitWarehouseExpressCompanyCode(cmbExpressName.SelectedItem.ParseToString()); jObj["logisticsExpressNo"] = txtWaybillId.Text.Trim(); jObj["platform"] = "OTHER"; jObj["shopName"] = OrderItem.ItemOrder?.shop_name; jObj["senderName"] = txtSendUser.Text.Trim(); jObj["senderPhone"] = txtSendMobile.Text.Trim(); jObj["senderProvince"] = txtSendProvince.Text.Trim(); jObj["senderCity"] = txtSendCity.Text.Trim(); jObj["senderArea"] = txtSendCounty.Text.Trim(); jObj["senderAddress"] = txtSendDetailAddress.Text.Trim(); jObj["receiverName"] = txtUser.Text.Trim(); jObj["receiverPhone"] = txtMobile.Text.Trim(); jObj["receiverProvince"] = txtProvince.Text.Trim(); jObj["receiverCity"] = txtCity.Text.Trim(); jObj["receiverArea"] = txtCounty.Text.Trim(); jObj["receiverAddress"] = txtDetailAddress.Text.Trim(); jObj["orderCreateTime"] = (OrderItem.ItemOrder?.CreateDateTime).ParseToString(); jObj["userAccount"] = BaseClass.UserName; jObj["platformCode"] = "WEISHOP"; jObj["afterSaleNo"] = OrderItem.ItemRefund?.after_sale_order_id; jObj["platformOrderNo"] = OrderItem.order_id; 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毛) jObj["oemAmount"] = (BaseClass.RefundPostagePerOrderDiff * 100).ParseToInt().ParseToString(); jObj["firstWeightFee"] = ((basePostage + BaseClass.RefundPostagePerOrderDiff) * 100).ParseToInt().ParseToString(); JObject jItemObj = new JObject(); jItemObj["spuCode"] = OrderItem.product_id.ParseToString(); jItemObj["spuName"] = OrderItem.title; jItemObj["skuCode"] = OrderItem.sku_id.ParseToString(); jItemObj["specInfo"] = OrderItem.sku_attr_str; jItemObj["skuUrl"] = OrderItem.thumb_img; jItemObj["picUrl"] = OrderItem.thumb_img; jItemObj["returnQuantity"] = OrderItem.sku_cnt; jObj["orderDetailsList"] = new JArray(); (jObj["orderDetailsList"] as JArray).Add(jItemObj); var returnOrders = OrderListCtrl.GetTransitReturnOrderList(OrderItem.order_id); OrderItem.DistribReturnOrderInfos = returnOrders; if (btnAdd.Content.ToString() == "添 加" && OrderItem.DistribReturnOrderInfo == null) { var addReturnOrderUrl = "https://po.e57.cn/prod-api/api/oms-api/api/distribution/returns/addReturnOrder"; var addReturnOrderStr = JsonHelper.SerializeObject(jObj); var getTransitAfterSaleRst = HttpResponseWXBLL.e57PostResponse(addReturnOrderUrl, addReturnOrderStr, ""); if (!getTransitAfterSaleRst.ParseToString().Contains("200") && !getTransitAfterSaleRst.ParseToString().Contains("0")) { string msg = BaseRegex.GetStringXml(ref getTransitAfterSaleRst, "msg"); if (msg.IsNullOrEmpty()) msg = getTransitAfterSaleRst; BaseMsgWindow.ShowError("中转仓退货订单添加失败,服务端返回 " + msg); return; } } returnOrders = OrderListCtrl.GetTransitReturnOrderList(OrderItem.order_id); OrderItem.DistribReturnOrderInfos = returnOrders; var orderCode = OrderItem.DistribReturnOrderInfo.order_code; if (string.IsNullOrEmpty(orderCode)) { BaseMsgWindow.ShowError("中转仓退货订单创建失败,售后单获取失败"); MainWindow.Instance.orderListCtrl.GetOrder(OrderItem.order_id); return; } var createReturnOrderUrl = "https://po.e57.cn/prod-api/api/oms-api/api/distribution/returns/createReturnOrder"; var createObj = new JObject(); createObj["orderCode"] = orderCode; createObj["logisticsCode"] = jObj["logisticsCode"].ParseToString(); createObj["logisticsExpressNo"] = jObj["logisticsExpressNo"].ParseToString(); var createReturnOrderStr = JsonHelper.SerializeObject(createObj); var createReturnOrderRst = HttpResponseWXBLL.e57PostResponse(createReturnOrderUrl, createReturnOrderStr, ""); //创建第三方退货订单成功0 if (!createReturnOrderRst.ParseToString().Contains("200") && !createReturnOrderRst.ParseToString().Contains("0")) { string msg = BaseRegex.GetStringXml(ref createReturnOrderRst, "msg"); if (msg.IsNullOrEmpty()) msg = createReturnOrderRst; BaseMsgWindow.ShowError("中转仓退货订单创建失败,服务端返回 " + msg); MainWindow.Instance.orderListCtrl.GetOrder(OrderItem.order_id); return; } MainWindow.Instance.orderListCtrl.GetOrder(OrderItem.order_id); StartUp.UpdateBalance(); BaseMsgWindow.ShowInfo("中转仓退货订单创建成功", "", this); this.Close(); } public static void AddReturnOrder(oms_wei_order_item_info OrderItem) { // 订单不存在或已作废的,直接返回 if (OrderItem == null || OrderItem.ItemRefund == null) { return; } // 已创建退货订单,直接返回 if (OrderItem.DistribReturnOrderInfo != null && OrderItem.DistribReturnOrderInfo.warehouse_status != 0) { return; } var wxExpressName = PddBuyerOrderLiteInfo.GetWxExpressCodeToWxExpressName((OrderItem?.ItemRefund?.return_delivery_id).ParseToString()); var aftersaleAddress = OrderItem?.PddBuyerAfterSale?.afterSaleAddress; if (OrderItem?.ItemOrder.OrderBuyType == "直发" || OrderItem?.ItemOrder.OrderBuyType == "云改直") { aftersaleAddress = OrderItem?.DirectPddBuyerAfterSale?.afterSaleAddress; } var receiver = PddAddressAnalysis(aftersaleAddress.ParseToString()); // 单号不存在或者地址识别失败的直接返回 if (wxExpressName.IsNullOrEmpty() || OrderItem.ItemRefund.return_waybill_id.IsNullOrEmpty() || receiver.receiver_name.IsNullOrEmpty() || receiver.receiver_phone.IsNullOrEmpty() || receiver.receiver_province.IsNullOrEmpty() || receiver.receiver_city.IsNullOrEmpty() || receiver.receiver_area.IsNullOrEmpty() || receiver.receiver_address.IsNullOrEmpty()) { if (!string.IsNullOrWhiteSpace(aftersaleAddress) || receiver.receiver_name?.Length > 15) { // todo 提示地址解析失败请手动提交 OrderItem.AddEditTransitWarehouseReturnOrderStr = "解析失败请手动添加"; } return; } JObject jObj = new JObject(); jObj["orderCodeSource"] = OrderItem.order_id; jObj["logisticsCode"] = PddBuyerOrderLiteInfo.GetPddToTransitWarehouseExpressCompanyCode(wxExpressName); ; jObj["logisticsExpressNo"] = OrderItem.ItemRefund?.return_waybill_id; jObj["platform"] = "OTHER"; jObj["shopName"] = OrderItem.ItemOrder?.shop_name; jObj["senderName"] = TransitWaybillHelper.LastName[Randomx.GetId(TransitWaybillHelper.LastName.Count)] + (Randomx.GetId(2) == 1 ? "先生" : "女士"); jObj["senderPhone"] = "13024622251"; jObj["senderProvince"] = "上海市"; jObj["senderCity"] = "上海市"; jObj["senderArea"] = "普陀区"; jObj["senderAddress"] = GlobalConfig.TransitReturnOrderReturnAddress; jObj["receiverName"] = receiver.receiver_name; jObj["receiverPhone"] = receiver.receiver_phone; jObj["receiverProvince"] = receiver.receiver_province; jObj["receiverCity"] = receiver.receiver_city; jObj["receiverArea"] = receiver.receiver_area; jObj["receiverAddress"] = receiver.receiver_address; jObj["orderCreateTime"] = (OrderItem.ItemOrder?.CreateDateTime).ParseToString(); jObj["userAccount"] = BaseClass.UserName; jObj["platformCode"] = "WEISHOP"; jObj["afterSaleNo"] = OrderItem.ItemRefund?.after_sale_order_id; jObj["platformOrderNo"] = OrderItem.order_id; string basePostageKey = WarehousePostageInfo.DicWarehousePostage.Keys.FirstOrDefault(pk => receiver.receiver_province.ParseToString().Contains(pk)); decimal basePostage = basePostageKey.IsNullOrEmpty() ? WarehousePostageInfo.DicWarehousePostage.Values.Min() : WarehousePostageInfo.DicWarehousePostage[basePostageKey]; basePostage += 0.3m; // 送货2.2 退货2.5(+3毛) jObj["oemAmount"] = (BaseClass.RefundPostagePerOrderDiff * 100).ParseToInt().ParseToString(); jObj["firstWeightFee"] = ((basePostage + BaseClass.RefundPostagePerOrderDiff) * 100).ParseToInt().ParseToString(); JObject jItemObj = new JObject(); jItemObj["spuCode"] = OrderItem.product_id.ParseToString(); jItemObj["spuName"] = OrderItem.title; jItemObj["skuCode"] = OrderItem.sku_id.ParseToString(); jItemObj["specInfo"] = OrderItem.sku_attr_str; jItemObj["skuUrl"] = OrderItem.thumb_img; jItemObj["picUrl"] = OrderItem.thumb_img; jItemObj["returnQuantity"] = OrderItem.sku_cnt; jObj["orderDetailsList"] = new JArray(); (jObj["orderDetailsList"] as JArray).Add(jItemObj); var returnOrders = OrderListCtrl.GetTransitReturnOrderList(OrderItem.order_id); OrderItem.DistribReturnOrderInfos = returnOrders; if (OrderItem.DistribReturnOrderInfo == null) { var addReturnOrderUrl = "https://po.e57.cn/prod-api/api/oms-api/api/distribution/returns/addReturnOrder"; var addReturnOrderStr = JsonHelper.SerializeObject(jObj); var getTransitAfterSaleRst = HttpResponseWXBLL.e57PostResponse(addReturnOrderUrl, addReturnOrderStr, ""); if (!getTransitAfterSaleRst.ParseToString().Contains("200") && !getTransitAfterSaleRst.ParseToString().Contains("0")) { string msg = BaseRegex.GetStringXml(ref getTransitAfterSaleRst, "msg"); if (msg.IsNullOrEmpty()) msg = getTransitAfterSaleRst; BaseMsgWindow.ShowAnimateMessage("中转仓退货订单添加失败,服务端返回 " + msg, "Error", 5); return; } } returnOrders = OrderListCtrl.GetTransitReturnOrderList(OrderItem.order_id); OrderItem.DistribReturnOrderInfos = returnOrders; var orderCode = OrderItem.DistribReturnOrderInfo.order_code; if (string.IsNullOrEmpty(orderCode)) { BaseMsgWindow.ShowAnimateMessage("中转仓退货订单创建失败,售后单获取失败", "Error", 5); MainWindow.Instance.orderListCtrl.GetOrder(OrderItem.order_id); return; } var createReturnOrderUrl = "https://po.e57.cn/prod-api/api/oms-api/api/distribution/returns/createReturnOrder"; var createObj = new JObject(); createObj["orderCode"] = orderCode; createObj["logisticsCode"] = jObj["logisticsCode"].ParseToString(); createObj["logisticsExpressNo"] = jObj["logisticsExpressNo"].ParseToString(); var createReturnOrderStr = JsonHelper.SerializeObject(createObj); var createReturnOrderRst = HttpResponseWXBLL.e57PostResponse(createReturnOrderUrl, createReturnOrderStr, ""); if (!createReturnOrderRst.ParseToString().Contains("200") && !createReturnOrderRst.ParseToString().Contains("0")) { string msg = BaseRegex.GetStringXml(ref createReturnOrderRst, "msg"); if (msg.IsNullOrEmpty()) msg = createReturnOrderRst; BaseMsgWindow.ShowAnimateMessage("中转仓退货订单创建失败,服务端返回 " + msg, "Error", 5); MainWindow.Instance.orderListCtrl.GetOrder(OrderItem.order_id); return; } //MainWindow.Instance.orderListCtrl.GetOrder(OrderItem.order_id); returnOrders = OrderListCtrl.GetTransitReturnOrderList(OrderItem.order_id); OrderItem.DistribReturnOrderInfos = returnOrders; StartUp.UpdateBalance(); BaseMsgWindow.ShowAnimateMessage("中转仓退货订单创建成功", "Msg", 2); } private void btnAddressAnalysis_Click(object sender, RoutedEventArgs e) { var receiver = PddAddressAnalysis(txtAddressAnalysis.Text.Trim()); this.txtUser.Text = receiver.receiver_name; this.txtMobile.Text = receiver.receiver_phone; this.txtProvince.Text = receiver.receiver_province; this.txtCity.Text = receiver.receiver_city; this.txtCounty.Text = receiver.receiver_area; this.txtDetailAddress.Text = receiver.receiver_address; } public static distrib_receiver_info WxAddressAnalysis(string AddressText) { distrib_receiver_info receiver = new distrib_receiver_info(); var txt = AddressText; 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)) { receiver.receiver_phone = phone; } var province = GlobalConfig.Divisions.FirstOrDefault(d => txt.Contains(d.name)); if (province == null) return receiver; receiver.receiver_province = province.name; var city = province.children.FirstOrDefault(c => txt.Contains(c.name)); if (city == null) return receiver; receiver.receiver_city = city.name; var county = city.children.FirstOrDefault(c => txt.Contains(c.name)); if (county == null) return receiver; receiver.receiver_area = 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(); receiver.receiver_name = tArr.FirstOrDefault(); receiver.receiver_address = string.Join("", tArr).Replace(receiver.receiver_name, ""); return receiver; } public static distrib_receiver_info PddAddressAnalysis(string AddressText) { distrib_receiver_info receiver = new distrib_receiver_info(); var txt = AddressText; 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)) { receiver.receiver_phone = phone; } var province = GlobalConfig.PddDivisions.FirstOrDefault(d => txt.Contains(d.name)); if (province == null) return receiver; receiver.receiver_province = province.name; var city = province.children.FirstOrDefault(c => txt.Contains(c.name)); if (city == null) return receiver; receiver.receiver_city = city.name; var county = city.children.FirstOrDefault(c => txt.Contains(c.name)); if (county == null) return receiver; receiver.receiver_area = 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(); receiver.receiver_name = tArr.FirstOrDefault(); receiver.receiver_address = string.Join("", tArr).Replace(receiver.receiver_name, ""); return receiver; } } }