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 { /// /// TransitAfterSaleWindow.xaml 的交互逻辑 /// public partial class TransitAfterSaleWindow : BaseWindow { public int PackType { get; set; } public oms_wei_order_item_info OrderItem { get; set; } public oms_wei_order_item_transit_detail_info TransitInfo { get; set; } public oms_wei_external_procurement_log_info TransitOrder { get; set; } = null; public oms_wei_transfer_extra_package ExtraPackage { get; set; } = null; public TransitAfterSaleWindow(oms_wei_order_item_info orderItem, oms_wei_order_item_transit_detail_info _transitInfo) { InitializeComponent(); if (orderItem != null) OrderItem = orderItem; if (_transitInfo != null) TransitInfo = _transitInfo; if (_transitInfo?.oms_wei_external_procurement_log_info != null) TransitOrder = _transitInfo?.oms_wei_external_procurement_log_info; else if (_transitInfo?.oms_wei_transfer_extra_package != null) ExtraPackage = _transitInfo?.oms_wei_transfer_extra_package; PackType = _transitInfo?.TransitTypeStr == "额外包裹" ? 2 : 1; } 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 && TransitInfo != null) { if (ExtraPackage != null) { // 获取额外包裹对应的发货包裹或者发货包裹本身 var _transitOrder = OrderItem.ItemTransitOrders.FirstOrDefault(t => t.order_code == ExtraPackage?.order_code); this.cmbWareHouse.Text = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransId == _transitOrder?.platform)?.TransName; this.txtExpressName.Text = string.IsNullOrWhiteSpace(ExtraPackage.real_logistics_code) ? ExtraPackage.logistics_code : ExtraPackage?.real_logistics_code; this.txtWarehouseWaybill.Text = string.IsNullOrWhiteSpace(ExtraPackage?.real_logistics_express_code) ? ExtraPackage?.logistics_express_code : ExtraPackage?.real_logistics_express_code; var transitAfterSale = OrderItem.ItemTransitOrderAfterSales?.OrderByDescending(t => t.id)?.FirstOrDefault(t => t.order_code == ExtraPackage.order_code && t.order_void_status != 1 && t.pack_type == PackType); if (transitAfterSale != null) { btnAdd.IsEnabled = false; this.txtUser.Text = transitAfterSale.recipient_name; this.txtMobile.Text = transitAfterSale.recipient_phone; this.txtDetailAddress.Text = transitAfterSale.refund_detail_address; //this.txtAddress.Text = transitAfterSale.refund_province + "/" + transitAfterSale.refund_city + "/" + transitAfterSale.refund_county; this.txtProvince.Text = transitAfterSale.refund_province; this.txtCity.Text = transitAfterSale.refund_city; this.txtCounty.Text = transitAfterSale.refund_county; } else { var pddBuyerAfterSale = OrderItem.PddBuyerAfterSales.FirstOrDefault(af => af.orderSn == _transitOrder?.out_order_no); // 需要手动申请售后的,先去申请售后再提交拦截退回总店 if (!string.IsNullOrEmpty(_transitOrder?.out_order_no) && !string.IsNullOrEmpty(pddBuyerAfterSale?.afterSaleAddress) && (_transitOrder.refund_status.ParseToString().Contains("需手动申请售后") || _transitOrder.refund_status.ParseToString().Contains("待用户发货"))) { btnAdd.IsEnabled = false; imgLoading.Visibility = Visibility.Visible; await MainWindow.Instance.orderListCtrl.DoBuyerRefend(new List() { 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; } pddBuyerAfterSale = OrderItem.PddBuyerAfterSales.FirstOrDefault(af => af.orderSn == _transitOrder?.out_order_no); if (!string.IsNullOrEmpty(pddBuyerAfterSale?.afterSaleAddress)) { txtAddressAnalysis.Text = pddBuyerAfterSale?.afterSaleAddress; btnAddressAnalysis_Click(null, null); } } } else if(TransitOrder != null) { this.cmbWareHouse.Text = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransId == TransitOrder?.platform)?.TransName; this.txtExpressName.Text = string.IsNullOrWhiteSpace(TransitOrder?.express_2_waybill) ? TransitOrder?.express_1_company : TransitOrder?.express_2_company; this.txtWarehouseWaybill.Text = string.IsNullOrWhiteSpace(TransitOrder?.express_2_waybill) ? TransitOrder?.express_1_waybill : TransitOrder?.express_2_waybill; if (this.txtExpressName.Text.IsNullOrEmpty() || this.txtWarehouseWaybill.Text.IsNullOrEmpty()) { this.txtExpressName.Text = OrderItem.PddBuyerOrders.FirstOrDefault(p => p.order_sn == TransitOrder?.out_order_no)?.outExpressCompanyCode; this.txtWarehouseWaybill.Text = OrderItem.PddBuyerOrders.FirstOrDefault(p => p.order_sn == TransitOrder?.out_order_no)?.tracking_number; if (!string.IsNullOrWhiteSpace(this.txtExpressName.Text) && !string.IsNullOrWhiteSpace(this.txtWarehouseWaybill.Text)) { // 没物流信息的仓库单手动更新买手物流信息 JObject data = new JObject(); data["orderNo"] = OrderItem.order_id; data["orderCode"] = TransitOrder?.order_code; data["logisticsExpressCode"] = this.txtWarehouseWaybill.Text; data["logisticsExpressCompany"] = this.txtExpressName.Text; var updateTransitExpressUrl = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/orders/updateLogisticsExpressCode"; var updateTransitExpressStr = JsonHelper.SerializeObject(data); var updateTransitExpressRst = HttpResponseWXBLL.e57PostResponse(updateTransitExpressUrl, updateTransitExpressStr, ""); } } var transitAfterSale = OrderItem.ItemTransitOrderAfterSales?.OrderByDescending(t => t.id)?.FirstOrDefault(t => t.order_code == TransitOrder.order_code && t.order_void_status != 1 && t.pack_type == PackType); if (transitAfterSale != null) { btnAdd.IsEnabled = false; this.txtUser.Text = transitAfterSale.recipient_name; this.txtMobile.Text = transitAfterSale.recipient_phone; this.txtDetailAddress.Text = transitAfterSale.refund_detail_address; //this.txtAddress.Text = transitAfterSale.refund_province + "/" + transitAfterSale.refund_city + "/" + transitAfterSale.refund_county; this.txtProvince.Text = transitAfterSale.refund_province; this.txtCity.Text = transitAfterSale.refund_city; this.txtCounty.Text = transitAfterSale.refund_county; } else { // 需要手动申请售后的,先去申请售后再提交拦截退回总店 if (!string.IsNullOrEmpty(TransitOrder?.out_order_no) && OrderItem.PddBuyerAfterSaleAddressStr.IsNullOrEmpty() && (TransitOrder.refund_status.ParseToString().Contains("需手动申请售后") || TransitOrder.refund_status.ParseToString().Contains("待用户发货"))) { btnAdd.IsEnabled = false; imgLoading.Visibility = Visibility.Visible; await MainWindow.Instance.orderListCtrl.DoBuyerRefend(new List() { 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 == TransitOrder?.out_order_no && !string.IsNullOrEmpty(OrderItem.PddBuyerAfterSale?.afterSaleAddress)) { txtAddressAnalysis.Text = OrderItem.PddBuyerAfterSale?.afterSaleAddress; btnAddressAnalysis_Click(null, null); } } } } // 如果提交过工单,则显示已提交工单及提交时间。 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() + ")"; } imgLoading.Visibility = Visibility.Collapsed; } private async void btnAddReturnPackage_Click(object sender, RoutedEventArgs e) { if (string.IsNullOrEmpty(lblWorkOrderMsg.Content.ParseToString())) { // 后续为独立创建工单 // 创建拦截退货包裹工单 var workOrder = await AddWorkOrderAsync(); 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"] = TransitOrder?.order_code ?? ExtraPackage?.batchId; /* 发货单填写发货单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["packType"] = PackType; /* 1正常发货拦截退回,2额外包裹拦截退回, */ //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 = await HttpResponseWXBLL.e57PostResponseAsync(getTransitAfterSaleUrl, getTransitAfterSaleStr); if (!getTransitAfterSaleRst.ParseToString().Contains("\"code\":0") && !getTransitAfterSaleRst.ParseToString().Contains("\"code\":200")) { string msg = BaseRegex.GetStringJsonByRegs(ref getTransitAfterSaleRst, getTransitAfterSaleRst, "msg"); BaseMsgWindow.ShowError("拦截退货包裹添加失败,服务端返回 " + msg, "", this); } else { //创建退货包裹成功0 await MainWindow.Instance.orderListCtrl.GetOrder(OrderItem.order_id); //MainWindow.Instance.orderListCtrl.FilterOrders(); StartUp.UpdateBalance(); 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 async Task AddWorkOrderAsync() { if (TransitOrder?.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.ItemOrder?.Shop?.ShopId; obj["wechatOrderNo"] = this.OrderItem.order_id; //obj["purchaseOrderNo"] = this.OrderItem.PddBuyerAfterSale?.orderSn; obj["purchaseOrderNo"] = TransitOrder?.order_code; obj["creator"] = BaseClass.UserName; obj["remark"] = "客户要求拦截并退回云仓"; var rst = await HttpResponseTransitWorkOrderBLL.PostResponseAsync(this.OrderItem.ItemOrder?.Shop, url, JsonHelper.SerializeObject(obj), ""); return rst; } public async Task GetWorkOrder() { string url = HttpResponseTransitWorkOrderBLL.WorkOrderUrl + "/api/open/v1/customer-work-orders?wechatOrderNo=" + this.OrderItem.order_id; var rst = await HttpResponseTransitWorkOrderBLL.GetResponseAsync(this.OrderItem.ItemOrder?.Shop, url, ""); return rst; } } }