using AllBase; using AllBase.Helper; using AllBase.Model; using AllBase.Model.Config; using AllBase.Model.DBModel; using AllBase.Model.Result; using CefSharp; using CefSharp.DevTools.IO; using CefSharp.DevTools.Profiler; using CefSharp.WinForms; using DevComponents.WinForms.Drawing; //using TemuKJD.DashBoardForms; using Microsoft.Win32; using NaiBa.CefHelper; using NaiBa.CefHelper.Handler; using NaiBa.Util.Enum; using NaiBa.Util.Extension; using NaiBa.Util.Model; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices.ComTypes; using System.Security.Policy; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; //using System.Web.Hosting; using System.Windows.Forms; using Work; using Work._29Tools.BLL; using Work._29Tools.CefTools; using Work.BaseForms; using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel; namespace TemuKJD.ToolForms { public partial class PddMobileBuyOrderForm : BaseGeneralForm { public oms_wei_external_procurement_log_info AbnormalTransitWarehouseOrderInfo { get; set; } = null; public bool IsAutoBuy { get; set; } = true; public bool IsFormLoad { get; set; } = false; public bool ShowBuyMask { get; set; } = false; /// /// 直发direct 中转transit /// public string BuyType { get; set; } = "transit"; public int CloseAfterSecond { get; set; } public string InitUrl = ""; public string BuyMapUrl = ""; private string shopCookieHead = "yangkeduo.com"; private string shopMainUrl = "https://mobile.yangkeduo.com/index.html"; private ChromiumWebBrowser cefWebBrowser = null; private string currentUrl = ""; private bool IsSoldOut = false; // 当前买手 private BuyerLoginInfo buyer = null; // 订单商品 private oms_wei_order_item_info orderItem = null; // 关联商品 private WXBuyMapInfo buyMap = null; // 订单仓库 private TransitWarehouseParam transitWarehouse = null; // (拍单后)回调函数,过滤订单 private Action filterOrderAction = null; // (拍单后)回调函数,更新拍单余额 private Action updateBalanceAction = null; public PddMobileBuyOrderForm(Action filterOrder, Action updateBalance, oms_wei_order_item_info orderItemInfo, BuyerLoginInfo buyerInfo, WXBuyMapInfo buy_map = null) { InitializeComponent(); this.buyer = buyerInfo; this.orderItem = orderItemInfo; this.buyMap = buy_map; filterOrderAction = filterOrder; updateBalanceAction = updateBalance; } private void PddBuyOrderForm_Load(object sender, EventArgs e) { if (this.BuyType == "direct" && pnlMap.Visible == false) { this.pnlDirectAddressAnalysis.Visible = true; this.lblBuyAddress.Text = "拍单地址"; } //splitContainer1.Dock = DockStyle.Fill; this.Height = SystemInformation.WorkingArea.Height - 80; this.CenterToScreen(); chkAutoChangeWarehouseAddress.Checked = GlobalConfig.BuyConfig.IsAutoChangeWarehouseAddress; chkUseAppBalance.Checked = GlobalConfig.BuyConfig.IsUseAppBalance; //chkUseAppBalance.Checked = false; //chkUseAppBalance.Visible = false; //GlobalConfig.BuyConfig.IsUseAppBalance = false; if (CloseAfterSecond > 0) { Task.Run(() => { Thread.Sleep(1000 * CloseAfterSecond); if (this.Created) { Invoke(new Action(() => { this.Close(); })); } }); } if (this.ShowBuyMask == true) { Task.Run(() => { for (int i = 3; i > 0; i--) { Invoke(new Action(() => { this.pnlMask.Visible = true; this.pnlMask.Text = "自动拍单倒计时\r\n" + i; })); Thread.Sleep(1000); } Invoke(new Action(() => { this.pnlMask.Visible = false; })); }); } if (buyMap != null) { this.txtMapGoodsName.Text = buyMap.map_goods_name; this.txtMapSkuName.Text = buyMap.map_spec_name; this.txtMapGoodsId.Text = buyMap.map_goods_id; this.txtMapSkuId.Text = buyMap.map_sku_id; txtSendProvince.Text = buyMap.map_send_address; this.transitWarehouse = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransId == buyMap.transit_warehouse_id); // 异常单重新拍单 if (AbnormalTransitWarehouseOrderInfo != null) { transitWarehouse = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransId == AbnormalTransitWarehouseOrderInfo.platform); } if (transitWarehouse != null && this.BuyType == "transit") { cmbTransitWarehouse.Text = transitWarehouse?.TransName + " " + transitWarehouse?.TransDetailAddress; txtBuyTransitWarehouse.Text = transitWarehouse?.TransDetailAddress; } else { txtBuyTransitWarehouse.Text = orderItem.ItemOrder.AddressStr; } } this.pictureBox1.Image = ImageBuild.LoadBitmapLoadBitmipImageFromUrl(orderItem.thumb_img); this.txtShopSkuId.Text = orderItem.sku_id; this.txtShopGoodsId.Text = orderItem.product_id; this.txtUpSpuCode.Text = orderItem.out_product_id.IsNullOrEmpty() ? orderItem.product_id : orderItem.out_product_id; this.txtUpSkuCode.Text = orderItem.out_sku_id.IsNullOrEmpty() ? orderItem.sku_attr_str : orderItem.out_sku_id; this.txtShopGoodsName.Text = orderItem.title; this.txtShopSpecName.Text = orderItem.sku_attr_str; this.txtShopOrderItemCnt.Text = orderItem.sku_cnt.ParseToString(); this.txtShopOrderItemPrice.Text = (orderItem.real_price * 0.01m).ParseToString(); this.txtOrderId.Text = orderItem.order_id; var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ErpShopId == orderItem.shop_id.ParseToString()); this.txtShopName.Text = shop?.ShopAccount; foreach (var warehouse in TransitWarehouseData.TransitWarehouseList) { this.cmbTransitWarehouse.Items.Add(warehouse.TransName + " " + warehouse.TransDetailAddress); } Task.Run(() => { Invoke(new Action(() => { LoadCef(); })); }); IsFormLoad = true; } private void Rb_CheckedChanged(object sender, EventArgs e) { transitWarehouse = (sender as RadioButton)?.Tag as TransitWarehouseParam; } /// /// 自动登录店铺后台 /// private void LoadCef() { if (cefWebBrowser == null) { //cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); if (!string.IsNullOrEmpty(InitUrl)) cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser(InitUrl, true, true); else cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser(shopMainUrl, false); LocalResourceRequestHandler resourceRequestHandler = new LocalResourceRequestHandler(); resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete; resourceRequestHandler.BeforeResourceLoadEvent += RequestHandler_BeforeResourceLoad; cefWebBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); var lifeSapnHandler = new LocalLifeSpanHandler(PopWindowType.SelfWindow); cefWebBrowser.LifeSpanHandler = lifeSapnHandler; cefWebBrowser.KeyboardHandler = new KeyboardHandler(); cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged; cefWebBrowser.LoadError += CefWebBrowser_LoadError; cefWebBrowser.Dock = DockStyle.Fill; cefWebBrowser.SendToBack(); //js绑定C#对象 //PDDShopBrowserObject shopObj = new PDDShopBrowserObject(); //shopObj.OnInfoReceived += ShopObj_OnInfoReceived; //CefSharpSettings.WcfEnabled = true; //cefWebBrowser.JavascriptObjectRepository.Register( // name: "shopObj", // objectToBind: shopObj, // isAsync: false, // options: new BindingOptions { Binder = BindingOptions.DefaultBinder.Binder /*CamelCaseJavascriptNames = false*/ /*cef79*/ } //); //if (buyer.cookie == null) // buyer.cookie = ""; List cookieLst = new List(); try { if (buyer != null) { cookieLst = JsonHelper.DeserializeJsonToList(buyer?.cookie); if (cookieLst == null) cookieLst = new List(); } } catch { } Task.Run(() => { Invoke(new Action(() => { splitContainer1.Panel1.Controls.Add(cefWebBrowser); //cefWebBrowser.Load(shopMainUrl); })); // cef138必须init后方可设置或删除cookie while (!cefWebBrowser.IsBrowserInitialized || !cefWebBrowser.GetBrowser().MainFrame.IsValid) Thread.Sleep(20); CEFBrowser.DeleteCookie(cefWebBrowser.GetCookieManager(null), "mobile.yangkeduo.com"); CEFBrowser.DeleteCookie(cefWebBrowser.GetCookieManager(null), "yangkeduo.com"); //if (cookieLst.Any(c => c.Value.StartsWith("windows_1"))) // cefWebBrowser.ExecuteScriptAsync("navigator.__defineGetter__('userAgent', function() { return 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.5.40.8 Safari/537.36 PddWorkbench-Online PddBrowser pdd_windows_version/3.0.3.12'; });"); //cef 138 如果没有设置RequestContext 可能为空,直接getCookieManager //if (this.openType != EnumOpenType.login) { var t = CEFBrowser.SetCookieAsync(JsonHelper.SerializeObject(cookieLst), cefWebBrowser.GetCookieManager(null)); if (InitUrl.Contains("&after_sales_reason=88")) { t.Wait(5000); } } if (!string.IsNullOrEmpty(InitUrl)) cefWebBrowser.Load(InitUrl); else cefWebBrowser.Load(shopMainUrl); }); } } private void CefWebBrowser_LoadError(object sender, CefSharp.LoadErrorEventArgs e) { } private void CefWebBrowser_AddressChanged(object sender, CefSharp.AddressChangedEventArgs e) { if (this.Created && !this.Disposing && !this.IsDisposed) { Invoke(new Action(() => { currentUrl = e.Address; txtAddress.Text = e.Address; })); } } private void CefWebBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) { //js绑定C#对象 html页面内声明绑定的C#对象 StringBuilder sb = new StringBuilder(); sb.Append("(function(){"); sb.Append("CefSharp.BindObjectAsync('shopObj');"); sb.Append("})();"); cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(sb.ToString()); } //public Func BeforeResourceLoadEvent; // sender, requestUrl, postData, request, true(表示取消执行) private bool RequestHandler_BeforeResourceLoad(object sender, string url, string postData, IRequest request) { if (url.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/origenes/address_info")) { if (chkAutoChangeWarehouseAddress.Checked && transitWarehouse != null && BuyType == "transit") { //var address = BaseRegex.GetStringJson(ref postData, "address"); JObject jObj = JsonHelper.JObjectParse(postData); jObj["province_id"] = transitWarehouse.province_id; jObj["city_id"] = transitWarehouse.city_id; jObj["district_id"] = transitWarehouse.district_id; jObj["address"] = transitWarehouse.TransDetailAddress + Randomx.GetId(1, 35) + Randomx.GetId(1, 9).ToString().PadLeft(2, '0') + "室" + txtSourceCode.Text; jObj["mobile"] = TransitWaybillHelper.MobileHead[Randomx.GetId(TransitWaybillHelper.MobileHead.Count)] + Randomx.GetNumber(8); jObj["name"] = TransitWaybillHelper.LastName[Randomx.GetId(TransitWaybillHelper.LastName.Count)] + (Randomx.GetId(2) == 1 ? "先生" : "女士"); postData = JsonHelper.SerializeObject(jObj); request.PostData.Elements[0].Bytes = System.Text.Encoding.UTF8.GetBytes(postData); } else if (BuyType == "direct" && orderItem?.ItemOrder?.AddressStr.Contains("******") == false) { var dvProvince = GlobalConfig.PddDivisions.FirstOrDefault(d => d.name == orderItem.ItemOrder.province_name); var dvCity = dvProvince.children.FirstOrDefault(d => d.name == orderItem.ItemOrder.city_name); var dvCounty = dvCity.children.FirstOrDefault(d => d.name == orderItem.ItemOrder.county_name); JObject jObj = JsonHelper.JObjectParse(postData); jObj["province_id"] = dvProvince.pdd_region_id; jObj["city_id"] = dvCity.pdd_region_id; jObj["district_id"] = dvCounty.pdd_region_id; jObj["address"] = orderItem.ItemOrder.detail_info; jObj["mobile"] = orderItem.ItemOrder.tel_number; jObj["name"] = orderItem.ItemOrder.user_name; postData = JsonHelper.SerializeObject(jObj); request.PostData.Elements[0].Bytes = System.Text.Encoding.UTF8.GetBytes(postData); } HasChangeAddress = true; } return false; } //static int GetAntiContentsTimes = 40; private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData, IRequest request) { Task.Run(() => { DoResourceLoadComplete(url, postData, responseData); }); } public void DoResourceLoadComplete(string url, string postData, string responseData) { if (url.StartsWith("https://mobile.yangkeduo.com/order_checkout.html") && responseData.Contains("该商品已下架")) { IsSoldOut = true; } // 个人页面 if (url.Contains("https://mobile.yangkeduo.com/personal.html")) { Task.Run(() => { //var data = responseData; }); } // 商品页面 获取发货地信息,如果页面没有去客服页面询问 if (url.StartsWith("https://mobile.yangkeduo.com/goods.html?goods_id=")) { Task.Run(() => { var sendProvince = ""; var data = responseData; var sendProvinceIndex = data.IndexOf("{\"key\":\"发货地\",\"values\":["); if (sendProvinceIndex > 0) { sendProvince = data.Substring(sendProvinceIndex + "{\"key\":\"发货地\",\"values\":[".Length); sendProvince = sendProvince.Substring(0, sendProvince.IndexOf("]")); sendProvince = sendProvince.Trim('\"'); Invoke(new Action(() => { this.txtSendProvince.Text = sendProvince; })); } if (!string.IsNullOrEmpty(sendProvince) && this.transitWarehouse == null) { MatchTransitWarehouse(sendProvince); } }); } // 订单详情页面 获取关联信息和拍单信息(已拍过单但是因某种原因未成功绑定仓库) if (url.StartsWith("https://mobile.yangkeduo.com/order.html?order_sn=")) { Task.Run(() => { var data = responseData; var goodsId = BaseRegex.GetLongJson(ref data, "goodsId"); var skuId = BaseRegex.GetLongJson(ref data, "skuId"); var goodsName = BaseRegex.GetStringJson(ref data, "goodsName"); var spec = BaseRegex.GetStringJson(ref data, "spec"); var oneGoodsPrice = BaseRegex.GetIntJson(ref data, "goodsPrice"); var buyCnt = BaseRegex.GetIntJson(ref data, "goodsNumber"); var buyPrice = BaseRegex.GetIntJson(ref data, "payAmount"); if (buyPrice.IsNullOrZero()) buyPrice = BaseRegex.GetIntJson(ref data, "orderAmount"); var orderSn = BaseRegex.GetIntJson(ref data, "orderSn"); Invoke(new Action(() => { // 自动填写关联信息界面 this.txtMapGoodsId.Text = goodsId.ParseToString(); this.txtMapSkuId.Text = skuId.ParseToString(); this.txtMapGoodsName.Text = goodsName; this.txtMapSkuName.Text = spec; this.txtSendProvince.Text = ""; this.cmbTransitWarehouse.Text = ""; // 自动填写拍单信息界面 if (!goodsId.IsNullOrZero()) this.txtBuyGoodsId.Text = goodsId.ParseToString(); if (!skuId.IsNullOrZero()) this.txtBuySkuId.Text = skuId.ParseToString(); if (!goodsName.IsNullOrEmpty()) this.txtBuyGoodsName.Text = goodsName; if (!spec.IsNullOrEmpty()) this.txtBuySkuName.Text = spec; if (!buyCnt.IsNullOrZero()) this.txtBuyCnt.Text = buyCnt.ParseToString(); if (!buyPrice.IsNullOrZero()) this.txtBuyPrice.Text = (buyPrice * 0.01m).ParseToString(); })); }); } // 待提交订单确认界面,填写拍单信息 两个接口都有可能有值,通过返回值内信息和url是否含有sku_id综合判断 //https://mobile.yangkeduo.com/proxy/api/api/morgan/confirm/render?pdduid=8161628055192 //https://mobile.yangkeduo.com/order_checkout.html?sku_id=1917755178967&group_id=168599782729&goods_id=966934985983&goods_number=1&page_from=0&detail_id=27322663212&_oak_rcto=YWJun7Qe7qhenWIlxgKO3uhsoi0WMIkr6Sb3iSrTsNPiwo_AHzvFVWwZ36KSfBTSAX-QF_CD92G9rA&order_extra_type=1&refer_page_element=open_btn&source_channel=0&refer_page_name=goods_detail&refer_page_id=10014_1782220402115_blxn1wofgo&refer_page_sn=10014 //https://mobile.yangkeduo.com/order_checkout.html?sku_id=1914416497946&group_id=168211384489&goods_id=964481496910&goods_number=2&page_from=23&detail_id=27475863056&_oc_refer_ad=0&_oak_rcto=YWJQMioxuzYiHEIW34yn103Toi0WMIkr6SaYUDjBkmkvOAtI8c-ZcKMw36KSfBTSAX-QF_CD92G9rA&order_extra_type=1&refer_page_element=open_btn&source_channel=0&_x_query=%E4%B8%AD%E5%9B%BD%E5%8F%A4%E4%BB%A3%E7%AE%97%E6%9C%AF%E6%B3%95%E8%80%81%E7%89%88%E6%9C%AC%E6%B4%AA%E4%B8%95%E8%B0%9F%E8%91%97%E5%91%BD%E7%90%86%E5%AD%A6%E7%A0%94%E7%A9%B6%E5%85%A5%E9%97%A8%E9%A3%8E%E6%B0%B4%E5%AD%A6%E4%B9%A6%E7%B1%8D%E5%85%A5%E9%97%A8%E5%B1%85%E5%AE%B6&refer_page_name=goods_detail&refer_page_id=10014_1782275100226_pojdmxgpty&refer_page_sn=10014 if (responseData.Contains("\"goods_id\"") && (url.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/morgan/confirm/render?pdduid=") || url.Contains("sku_id="))) { Task.Run(() => { var data = responseData; if (data.Contains("\"goods_id\"")) { var goodsId = BaseRegex.GetLongJson(ref data, "goods_id"); var skuId = BaseRegex.GetLongJson(ref data, "sku_id"); var goodsName = BaseRegex.GetStringJson(ref data, "goods_name"); if (string.IsNullOrEmpty(goodsName)) goodsName = BaseRegex.GetStringJson(ref data, "goodsName"); var specifications = BaseRegex.GetMatchRegexString(ref data, @"""specifications"":\[([^']*?)\]"); var spec = string.IsNullOrEmpty(specifications) ? "" : specifications; if (spec.IsNullOrEmpty()) { var specMatch = BaseRegex.GetMatchRegex(ref data, @"""spec_value"":""([^']+?)"""); foreach (var match in specMatch) { var matchStr = match.ParseToString(); spec += ("," + BaseRegex.GetStringJson(ref matchStr, "spec_value")); } spec = spec.Trim(','); } var oneGoodsPrice = BaseRegex.GetIntJson(ref data, "goodsPrice"); var buyCnt = BaseRegex.GetIntJson(ref data, "goods_number"); var buyPrice = BaseRegex.GetIntJson(ref data, "pay_price"); Invoke(new Action(() => { if (!goodsId.IsNullOrZero()) this.txtBuyGoodsId.Text = goodsId.ParseToString(); if (!skuId.IsNullOrZero()) this.txtBuySkuId.Text = skuId.ParseToString(); if (!goodsName.IsNullOrEmpty()) this.txtBuyGoodsName.Text = goodsName; if (!spec.IsNullOrEmpty()) this.txtBuySkuName.Text = spec; if (!buyCnt.IsNullOrZero()) this.txtBuyCnt.Text = buyCnt.ParseToString(); if (!buyPrice.IsNullOrZero()) this.txtBuyPrice.Text = (buyPrice * 0.01m).ParseToString(); })); Invoke(new Action(() => { if (BuyType == "direct" && txtBuyTransitWarehouse.Text.Contains("******")) { BaseMsgForm.ShowError("请手动输入合法地址信息再拍单!"); return; } // 自动修改收货地址为中转仓(或直发) var transit = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransDetailAddress == txtBuyTransitWarehouse.Text.Trim()); if (transit == null && BuyType == "transit") { BaseMsgForm.ShowError("仓库已发生改变,请点击重新关联商品,选择仓库后重新拍单!"); return; } if ((transit != null || BuyType == "direct") && IsChangeAddress == false && HasChangeAddress == false) { if (IsSoldOut) { BaseMsgForm.ShowError("商品已售罄,请重新关联未售罄商品后再拍单!"); return; } if (!IsSoldOut) { Task.Run(() => { IsChangeAddress = true; Thread.Sleep(100); if (BuyType == "transit") { if (AbnormalTransitWarehouseOrderInfo != null) { Invoke(new Action(() => { txtSourceCode.Text = AbnormalTransitWarehouseOrderInfo.random_code; })); } else { var sourceCodeRst = GetSourceCode(transit); if (sourceCodeRst.Contains("失败")) { Invoke(new Action(() => { this.cefWebBrowser.Visible = false; BaseMsgForm.ShowError(sourceCodeRst); })); return; } } } ChangeAddress(transit); IsChangeAddress = false; }); } } // 自动下单 if (IsAutoBuy) { if (!IsSoldOut) { if (HasChangeAddress == true) { } } } })); } }); } if (postData.Contains("260805-")) { } // 订单提交接口 //https://mobile.yangkeduo.com/proxy/api/order/prepay?pdduid=8161628055192 //https://mobile.yangkeduo.com/proxy/api/api/van-spike/prepay?pdduid=8161628055192 if (url.StartsWith("https://mobile.yangkeduo.com/proxy/api/order/prepay?pdduid=") || url.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/van-spike/prepay?pdduid=")) { var data = postData; Task.Run(() => { Invoke(new Action(() => { //txtBuyOrderId.Text = BaseRegex.GetStringJson(ref data, "order_sn"); txtBuyOrderId.Text = BaseRegex.GetStringJsonByRegs(ref data, "", "order_sn", "orderSn"); })); }); } if (url.Contains("alipay.com") && responseData.Contains("支付成功")) { Task.Run(() => { var uri = url; var pData = postData; var rData = responseData; Invoke(new Action(() => { //txtBuyOrderId.Text = BaseRegex.GetStringJson(ref data, "order_sn"); btnManualUpdateBuyOrder_Click(null, null); })); }); } } /// /// 获取溯源码 /// /// public string GetSourceCode(TransitWarehouseParam transit) { JObject body = new JObject(); body["province"] = transit.province_name; body["city"] = transit.city_name; body["warehouseCode"] = transit.TransId; body["matchType"] = 1; var url = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/getRandomTraceCode"; var dataStr = JsonHelper.SerializeObject(body); var sourceCodeRst = HttpResponseWXBLL.e57PostResponse(url, dataStr, ""); var randomCode = BaseRegex.GetStringXml(ref sourceCodeRst, "randomCode"); if (!string.IsNullOrEmpty(randomCode)) { Invoke(new Action(() => { txtSourceCode.Text = randomCode; })); return randomCode; } else { return "获取失败,请关闭拍单窗口重试 " + BaseRegex.GetStringXml(ref sourceCodeRst, "msg", sourceCodeRst); } } bool IsChangeAddress = false; bool HasChangeAddress = false; /// /// 自动填写地址 /// /// /// public string ChangeAddress(TransitWarehouseParam transit) { Thread.Sleep(200); var host = cefWebBrowser.GetBrowser().GetHost(); var client = cefWebBrowser.GetDevToolsClient(); for (int i = 0; i < 20; i++) { Thread.Sleep(50); if (host == null || client == null) { host = cefWebBrowser.GetBrowser().GetHost(); client = cefWebBrowser.GetDevToolsClient(); continue; } } if (host == null || client == null) { return "页面未加载"; } // 点击图片搜索图标 var jsStr1 = @"(function() { var element = document.getElementsByClassName('oc-address-info')[0]; //for (i=0; i< elements.length;i++){ // var element = elements[i]; // if (element.outerHTML.indexOf('当前收货地址为') >= 0) { element.click(); return 'success'; // break; // } //} })();"; var ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true); ts1.Wait(5000); for (int i = 0; i < 20; i++) { if (ts1.Result.Result.Value is string rstStr) { if (rstStr == "success") break; } Thread.Sleep (100); ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true); ts1.Wait(5000); } //Thread.Sleep(Randomx.GetId(1500, 2500)); Thread.Sleep(Randomx.GetId(300, 500)); jsStr1 = @"(function() { var elements = document.getElementsByTagName('span'); for (i=0; i< elements.length;i++){ var element = elements[i]; if (element.innerHTML.indexOf('修改') == 0) { element.click(); return 'success'; } } })();"; ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true); for (int i = 0; i < 20; i++) { if (ts1.Result.Result.Value is string rstStr) { if (rstStr == "success") break; } Thread.Sleep(100); ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true); ts1.Wait(5000); } //Thread.Sleep(Randomx.GetId(1500, 2500)); Thread.Sleep(Randomx.GetId(300, 500)); jsStr1 = @"(function() { var elements = document.getElementsByTagName('span'); for (i=0; i< elements.length;i++){ var element = elements[i]; if (element.innerHTML.indexOf('保存') == 0) { element.click(); return 'success'; } } })();"; ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true); for (int i = 0; i < 20; i++) { if (ts1.Result.Result.Value is string rstStr) { if (rstStr == "success") break; } Thread.Sleep(100); ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true); ts1.Wait(5000); } //Thread.Sleep(Randomx.GetId(1500, 2500)); Thread.Sleep(Randomx.GetId(300, 500)); jsStr1 = @"(function() { var elements = document.getElementsByTagName('div'); for (i = elements.length - 1; i >= 0; i--){ var element = elements[i]; if (element.innerHTML.indexOf('" + txtBuyTransitWarehouse.Text.Trim() + @"') >= 0 && element.innerHTML.indexOf('" + txtSourceCode.Text.Trim() + @"') >= 0) { element.click(); return 'success'; } } })();"; if (BuyType == "direct") { jsStr1 = @"(function() { var elements = document.getElementsByTagName('div'); for (i = elements.length - 1; i >= 0; i--){ var element = elements[i]; if (element.innerHTML.indexOf('" + orderItem?.ItemOrder?.detail_info + @"') >= 0) { element.click(); return 'success'; } } })();"; } ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true); for (int i = 0; i < 20; i++) { if (ts1.Result.Result.Value is string rstStr) { if (rstStr == "success") break; } Thread.Sleep(100); ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true); ts1.Wait(5000); } //Thread.Sleep(Randomx.GetId(1500, 2500)); Thread.Sleep(Randomx.GetId(300, 500)); return ""; } private void btnManualUpdateSendProvince_Click(object sender, EventArgs e) { var sendProvince = txtSendProvince.Text.Trim(); MatchTransitWarehouse(sendProvince); } void MatchTransitWarehouse(string sendProvince) { bool isAutoGetWarehouse = false; //foreach (var control in this.flowLayoutPanel1.Controls) //{ // if (control is RadioButton rb) // { // if (rb.Tag is TransitWarehouseParam warehouseParam) // { // if (warehouseParam.TransDetailAddress.Contains(sendProvince)) // { // Invoke(new Action(() => // { // rb.Checked = true; // })); // isAutoGetWarehouse = true; // break; // } // } // } //} foreach (var item in this.cmbTransitWarehouse.Items) { TransitWarehouseParam warehouseParam = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransName + " " + t.TransDetailAddress == item.ParseToString()); if (warehouseParam == null) { continue; } if (warehouseParam.TransDetailAddress.Contains(sendProvince)) { Invoke(new Action(() => { cmbTransitWarehouse.Text = warehouseParam.TransName + " " + warehouseParam.TransDetailAddress; })); transitWarehouse = warehouseParam; isAutoGetWarehouse = true; break; } } if (!isAutoGetWarehouse) { //黄导家庭父母5天训练营-《父母5天成为孩子成长的引路人》+《不内卷养育》2本书 Invoke(new Action(() => { cmbTransitWarehouse.Text = ""; BaseMsgForm.ShowError("匹配仓库失败,请手动选择"); })); } } private void ShopLoginForm_FormClosed(object sender, FormClosedEventArgs e) { //OnSaveComplete(shop); Task.Run(() => { Thread.Sleep(500); if (!this.Disposing && !this.IsDisposed) { //MainForm.instance.Invoke(new Action(() => { this.Dispose(); })); } }); } private void txtAddress_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { if (cefWebBrowser != null) { cefWebBrowser.Load(txtAddress.Text); } } } private void btnManualUpdateTransitWarehouse_Click(object sender, EventArgs e) { if (transitWarehouse == null && !cmbTransitWarehouse.Text.Trim().IsNullOrEmpty()) { transitWarehouse = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransName + " " + t.TransDetailAddress == cmbTransitWarehouse.Text.Trim().ParseToString()); } if (transitWarehouse == null) { BaseMsgForm.ShowError("仓库不能为空"); return; } this.Enabled = false; if (this.cefWebBrowser.Address.StartsWith("https://mobile.yangkeduo.com/order.html?order_sn=")) { } var url = BaseClass.Build29WxObjString("order/wx_add_mdy_buy_prod_map"); var data = UserLogin.GetSignaturex() + "&spu_code=" + GetHtml.UrlEncodeUtf8(txtUpSpuCode.Text.Trim()) + "&sku_code=" + GetHtml.UrlEncodeUtf8(txtUpSkuCode.Text.Trim()) + "&main_user_name=" + BaseClass.MainUserName + "&map_goods_name=" + txtMapGoodsName.Text.Trim() + "&map_spec_name=" + txtMapSkuName.Text.Trim() + "&map_goods_id=" + txtMapGoodsId.Text.Trim() + "&map_sku_id=" + txtMapSkuId.Text.Trim() + "&map_send_address=" + txtSendProvince.Text.Trim() + "&transit_warehouse_id=" + transitWarehouse?.TransId; var result = GetHtml.PostUtf8(url, data); if (!result.Contains("\"code\":200")) result = GetHtml.PostUtf8(url, data); if (!result.Contains("\"code\":200")) { this.Enabled = true; BaseMsgForm.ShowError("保存失败" + BaseRegex.GetStringJson(ref result, "msg") + ",请稍后重试"); } else { var urlMap = BaseClass.Build29WxObjString("order/wx_get_buy_prod_map"); var dataMap = UserLogin.GetSignaturex() + "&spu_codes=" + txtUpSpuCode.Text.Trim(); //dataMap += "&sku_codes=" + txtUpSkuCode.Text.Trim(); dataMap += "&main_user_name=" + BaseClass.MainUserName; var resultMap = GetHtml.PostUtf8(urlMap, dataMap); if (string.IsNullOrEmpty(resultMap) || !resultMap.Contains("\"code\":200")) resultMap = GetHtml.PostUtf8(urlMap, dataMap); if (string.IsNullOrEmpty(resultMap) || !resultMap.Contains("\"code\":200")) { } else { List buyMapList = new List(); try { buyMapList = JsonHelper.DeserializeJsonToList(JObject.Parse(resultMap)["data"].ParseToString()); } catch { } var map = buyMapList.FirstOrDefault(b => b.spu_code == txtUpSpuCode.Text.Trim() && b.sku_code == txtUpSkuCode.Text.Trim()); if (map != null) { foreach (var order in GlobalConfig.lstOrder) { if (order.IsWaitBuy) { foreach (var item in order.orderItems) { if ((item.out_product_id == map.spu_code && item.out_sku_id == map.sku_code) || (item.out_product_id == map.spu_code && item.sku_attr_str == map.sku_code) || (item.product_id == map.spu_code && item.out_sku_id == map.sku_code) || (item.product_id == map.spu_code && item.sku_attr_str == map.sku_code)) { item.BuyMap = map; if (filterOrderAction != null) { item.SetOrderItemTextProperty(); filterOrderAction(order, false); } } } } } } } BaseMsgForm.ShowInfo("保存成功!"); this.Close(); } } private async void btnManualUpdateBuyOrder_Click(object sender, EventArgs e) { if (BuyType == "transit" && txtSourceCode.Text.Trim().Length != 6) { BaseMsgForm.ShowError("溯源码长度错误!"); return; } var client = cefWebBrowser.GetDevToolsClient(); if (client == null) { BaseMsgForm.ShowError("页面未加载!"); return; } //var sourceCode = txtSourceCode.Text.Trim(); //var jsStr1 = @"(function() { var elements = document.getElementsByTagName('div'); // for (i = elements.length - 1; i >= 0; i--){ // var element = elements[i]; // if (element.innerHTML.indexOf('" + sourceCode + @"') >= 0) { // return 'success'; // } // } // return ''; // })();"; //var ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true); //await ts1; // 付款页面没法匹配,暂时注释 //if (ts1.Result?.Result?.Value.ParseToString() != "success") //{ // BaseMsgForm.ShowError("溯源码不匹配!"); // return; //} if (BuyType == "transit" && string.IsNullOrEmpty(txtBuyTransitWarehouse.Text.Trim())) { BaseMsgForm.ShowError("缺少中转地址,请重新绑定商品并选择仓库地址"); return; } var transit = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransDetailAddress == txtBuyTransitWarehouse.Text.Trim()); if (BuyType == "transit" && transit == null) { BaseMsgForm.ShowError("中转地址对应的中转仓不存在,请核对"); return; } if (string.IsNullOrEmpty(txtBuyOrderId.Text.Trim())) { BaseMsgForm.ShowError("缺少拍单订单号,请拍单后再提交"); return; } if ((txtBuyPrice.Text.ParseToDecimal() * 100).ParseToInt().IsNullOrZero()) { BaseMsgForm.ShowError("缺少拍单金额,请拍单后再提交"); return; } btnManualUpdateBuyOrder.Enabled = false; if (BuyType == "transit") { #region 正常中转拍单 if (AbnormalTransitWarehouseOrderInfo == null) { JObject body = new JObject(); body["orderNo"] = orderItem.order_id; // 微信订单号 body["orderSkuId"] = orderItem.sku_id; // 微信商品skuId body["outOrderNo"] = txtBuyOrderId.Text.Trim(); // 拍单订单号 body["outAmount"] = (txtBuyPrice.Text.ParseToDecimal() * 100).ParseToInt() + ""; // 外采金额 body["buyerAccount"] = buyer.buyer_nick; // 买手昵称 body["purchaserNote"] = BaseClass.NickName; // 购买软件账户备注 body["express1Company"] = ""; // 物流公司编号 body["express1Waybill"] = ""; // 物流编号 body["platform"] = transit.TransId; // 中转仓ID body["orderPlatformCode"] = "WEISHOP"; body["randomCode"] = txtSourceCode.Text.Trim(); if (GlobalConfig.BuyConfig.IsUseAppBalance) { body["userName"] = BaseClass.UserName; // 软件端用户名 body["purchaserNote"] = BaseClass.UserName + "-" + BaseClass.NickName; // 购买软件账户备注 string basePostageKey = WarehousePostageInfo.DicWarehousePostage.Keys.FirstOrDefault(pk => (orderItem.ItemOrder?.province_name).ParseToString().Contains(pk)); decimal basePostage = basePostageKey.IsNullOrEmpty() ? WarehousePostageInfo.DicWarehousePostage.Values.Min() : WarehousePostageInfo.DicWarehousePostage[basePostageKey]; body["oemAmount"] = (BaseClass.PostagePerOrderDiff * 100).ParseToInt().ParseToString(); body["postage"] = ((basePostage + BaseClass.PostagePerOrderDiff) * 100).ParseToInt().ParseToString(); } var url = "https://po.e57.cn/prod-api/api/oms-api/externalProcurement/saveOrUpdate"; var dataStr = JsonHelper.SerializeObject(body); //dataStr = "{\"orderNo\":\"3737339733954942720\",\"outOrderNo\":\"2606846854564\",\"buyerAccount\":\"测试\",\"outAmount\":\"2000\",\"purchaserNote\":\"测试\",\"express1Company\":\"\"" + // ",\"express1Waybill\":\"\",\"platform\":\"XDYSHC\",\"orderPlatformCode\":\"WEISHOP\"}"; var exportRst = HttpResponseWXBLL.e57PostResponse(url, dataStr, ""); //保存成功200 //订单不存在:373733973395494272500 if (!exportRst.ParseToString().Contains("200")) { string msg = ""; string code = ""; try { System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); xmlDoc.LoadXml(exportRst); code = xmlDoc["AjaxResult"]["code"].InnerText; msg = xmlDoc["AjaxResult"]["msg"].InnerText; } catch { msg = exportRst.ParseToString(); } BaseMsgForm.ShowError("拍单保存失败,服务端返回 " + msg, "拍单信息保存失败"); btnManualUpdateBuyOrder.Enabled = true; return; } if (updateBalanceAction != null) updateBalanceAction(); orderItem.ItemTransitOrders.Insert(0, new oms_wei_external_procurement_log_info() { buyer_account = buyer.buyer_nick, id = 0, order_no = orderItem.order_id, order_sku_id = orderItem.sku_id, out_amount = (txtBuyPrice.Text.ParseToDecimal() * 100).ParseToInt(), out_order_no = txtBuyOrderId.Text.Trim(), purchaser_note = body["purchaserNote"].ParseToString(), }); orderItem.SetOrderItemTextProperty(); // 利润计算重置为最小值,控件Resource更新时将计算利润 orderItem.ProfitCount = decimal.MinValue; var order = orderItem?.ItemOrder; if (filterOrderAction != null && order != null) { filterOrderAction(order, true); } //// 前一天的订单直接提前取号 //if (DateTime.Now.Date > BaseClass.StampToDateTime(order.create_time).Date) //{ // JObject data = new JObject(); // data["outOrderNo"] = txtBuyOrderId.Text.Trim(); // //data2["outOrderNo"] = orderItem.ItemTransitOrder.order_code; // data["warehouseCode"] = transit.TransId; // 中转仓仓库对应编码 XDYSZC XDYYWC ... // //data["warehouseCode"] = txtBuyOrderId.Text.Trim(); // 中转仓仓库对应编码 // data["platform"] = "WEISHOP"; // var getVirtualTicketUrl = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/order/virtual/create"; // var getVirtualTicketDataStr = JsonHelper.SerializeObject(data); // var getVirtualTicketRst = HttpResponseWXBLL.e57PostResponse(getVirtualTicketUrl, getVirtualTicketDataStr, ""); // if (!getVirtualTicketRst.ParseToString().Contains("200") && !getVirtualTicketRst.ParseToString().Contains("0")) // { // string msg = ""; // string code = ""; // try // { // System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); // xmlDoc.LoadXml(getVirtualTicketRst); // code = xmlDoc["AjaxResult"]["code"].InnerText; // msg = xmlDoc["AjaxResult"]["msg"].InnerText; // } // catch // { // msg = getVirtualTicketRst.ParseToString(); // } // BaseMsgForm.ShowError("拍单信息保存成功,接收到服务端传递的错误消息:" + msg, "订单提前取号失败"); // btnManualUpdateBuyOrder.Enabled = true; // return; // } //} } #endregion #region 秒退异常单中转重拍 if (AbnormalTransitWarehouseOrderInfo != null) { var url = BaseClass.Build29WxObjString("order/wx_update_abnormal_transit_order"); var data = UserLogin.GetSignaturex(); data += "&out_order_no=" + txtBuyOrderId.Text.Trim(); data += "&order_no=" + orderItem.order_id; data += "&order_sku_id=" + orderItem.sku_id; data += "&buyer_account=" + buyer.buyer_nick; data += "&out_amount=" + (txtBuyPrice.Text.ParseToDecimal() * 100).ParseToInt() + ""; data += "&purchaser_note=" + BaseClass.UserName + "-" + BaseClass.NickName; // 购买软件账户备注 data += "&refund_status=" + ""; data += "&old_out_order_no=" + AbnormalTransitWarehouseOrderInfo.out_order_no; data += "&old_order_no=" + AbnormalTransitWarehouseOrderInfo.order_no; data += "&old_order_sku_id=" + AbnormalTransitWarehouseOrderInfo.order_sku_id; data += "&old_buyer_account=" + AbnormalTransitWarehouseOrderInfo.buyer_account; data += "&old_out_amount=" + AbnormalTransitWarehouseOrderInfo.out_amount; data += "&old_purchaser_note=" + AbnormalTransitWarehouseOrderInfo.purchaser_note; data += "&old_refund_status=" + AbnormalTransitWarehouseOrderInfo.refund_status; data += "&order_code=" + AbnormalTransitWarehouseOrderInfo.order_code; var html = GetHtml.PostUtf8(url, data); if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) { var msg = BaseRegex.GetStringJsonByRegs(ref html, html, "msg"); BaseMsgForm.ShowError("异常单重拍保存失败"); btnManualUpdateBuyOrder.Enabled = true; return; } if (orderItem.ItemTransitOrder != null) { orderItem.ItemTransitOrder.buyer_account = buyer.buyer_nick; orderItem.ItemTransitOrder.id = 0; orderItem.ItemTransitOrder.order_no = orderItem.order_id; orderItem.ItemTransitOrder.order_sku_id = orderItem.sku_id; orderItem.ItemTransitOrder.out_amount = (txtBuyPrice.Text.ParseToDecimal() * 100).ParseToInt(); orderItem.ItemTransitOrder.out_order_no = txtBuyOrderId.Text.Trim(); orderItem.ItemTransitOrder.purchaser_note = BaseClass.UserName + "-" + BaseClass.NickName; orderItem.ItemTransitOrder.refund_status = ""; } orderItem.SetOrderItemTextProperty(); // 利润计算重置为最小值,控件Resource更新时将计算利润 orderItem.ProfitCount = decimal.MinValue; var order = orderItem?.ItemOrder; if (filterOrderAction != null && order != null) { filterOrderAction(order, true); } } #endregion BaseMsgForm.ShowInfo("拍单信息保存成功"); } if (BuyType == "direct") { #region 直发拍单 var url = BaseClass.Build29WxObjString("order/wx_get_order_item_ext_info"); var data = UserLogin.GetSignaturex(); data += "&wx_order_id_in=" + orderItem.order_id; data += "&wx_sku_id_in=" + orderItem.sku_id; var html = GetHtml.PostUtf8(url, data); if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) html = GetHtml.PostUtf8(url, data); if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) { BaseMsgForm.ShowError("直发拍单信息保存失败(01) " + BaseRegex.GetStringJson(ref html, "msg")); return; } var existOrderExtList = JsonHelper.DeserializeJsonToList(JsonHelper.JObjectParse(html)["data"].ParseToString()); order_item_ext orderExt = new order_item_ext() { order_id = orderItem.order_id, sku_id = orderItem.sku_id, out_order_id = txtBuyOrderId.Text.Trim(), shop_app_id = orderItem.Shop.ShopId, shop_name = orderItem.Shop.ShopAccount, buy_type = "直发", }; var url1 = BaseClass.Build29WxObjString("order/wx_add_order_item_ext_info"); if (existOrderExtList.Any(eoe => eoe.order_id == orderExt.order_id && eoe.sku_id == orderExt.sku_id)) url1 = BaseClass.Build29WxObjString("order/wx_mdy_order_item_ext_info"); var data1 = UserLogin.GetSignaturex(); data1 += "&wx_order_id=" + orderExt.order_id; data1 += "&wx_sku_id=" + orderExt.sku_id; data1 += "&out_order_id=" + orderExt.out_order_id; data1 += "&shop_app_id=" + orderExt.shop_app_id; data1 += "&shop_name=" + orderExt.shop_name; data1 += "&buy_type=" + orderExt.buy_type; var html1 = GetHtml.PostUtf8(url1, data1); if (string.IsNullOrEmpty(html1) || !html1.Contains("\"code\":200")) { BaseMsgForm.ShowError("直发拍单信息保存失败(02) " + BaseRegex.GetStringJson(ref html1, "msg")); return; } // 拍单后覆盖原售后状态(如果有) var url2 = BaseClass.Build29WxObjString("order/wx_update_erp_out_after_sale_status"); var data2 = UserLogin.GetSignaturex(); data2 += "&order_id=" + orderItem.order_id; data2 += "&out_after_sale_status=NULL"; var html2 = GetHtml.PostUtf8(url2, data2); if (string.IsNullOrEmpty(html2) || !html2.Contains("\"code\":200")) html2 = GetHtml.PostUtf8(url2, data2); if (string.IsNullOrEmpty(html2) || !html2.Contains("\"code\":200")) { BaseMsgForm.ShowError("直发拍单信息保存失败(03) " + BaseRegex.GetStringJson(ref html2, "msg")); return; } JObject obj = new JObject(); obj["platform"] = "WEISHOP"; obj["outAmount"] = (txtBuyPrice.Text.ParseToDecimal() * 100).ParseToInt() + ""; obj["outAccount"] = buyer.buyer_name; obj["orderId"] = orderItem.order_id; obj["outOrderNo"] = txtBuyOrderId.Text.Trim(); //if (!order.outExpressCompanyCode.IsNullOrEmpty() && !order.tracking_number.IsNullOrEmpty()) //{ // obj["outExpressCompany"] = order.outExpressCompanyCode; // obj["outExpressNo"] = order.tracking_number; //} var dataStr = JsonHelper.SerializeObject(obj); url = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/bind/v2"; //成功 "0SUCCESS" //更新微信外采订单状态成功1 //失败 已存在 1505调用微信接口更新物流信息失败: 非法参数, 同运单号拦截 rid: 69d8ab9c-22baa3b1-67de0d95 var exportRst = HttpResponseWXBLL.e57PostResponse(url, dataStr, ""); var code = BaseRegex.GetStringXml(ref exportRst, "code"); var msg = BaseRegex.GetStringXml(ref exportRst, "msg"); if (code == "0" || code == "1") { // 利润计算重置为最小值,控件Resource更新时将计算利润 orderItem.ProfitCount = decimal.MinValue; var order = orderItem?.ItemOrder; if (filterOrderAction != null && order != null) { orderItem.OrderItemExt = orderExt; order.out_account = buyer.buyer_id; order.out_express_company = "OTHER"; order.out_order_no = txtBuyOrderId.Text.Trim(); orderItem.SetOrderItemTextProperty(); order.SetOrderTextProperty(); filterOrderAction(order, true); } BaseMsgForm.ShowInfo("拍单信息保存成功"); } else { //order.sendStatus = "发送失败 " + (string.IsNullOrEmpty(msg) ? data : msg); //NaiBa.Util.Helper.ConfigHelper.SaveConfig("other_buyer_order_list", lstOtherBuyerOrderInfoLite); BaseMsgForm.ShowError("直发拍单保存失败,服务端返回 " + msg, "拍单信息保存失败"); return; } #endregion } this.Close(); } private void pictureBox1_Click(object sender, EventArgs e) { if (pictureBox1.Size.Width == 100) { pictureBox1.Size = new Size(430, 430); pictureBox1.BringToFront(); } else { pictureBox1.Size = new Size(100, 100); } } private void btnJumpOrderList_Click(object sender, EventArgs e) { cefWebBrowser.Load("https://mobile.yangkeduo.com/orders.html"); } private void btnReMap_Click(object sender, EventArgs e) { transitWarehouse = null; pnlMap.Visible = true; } private void cmbTransitWarehouse_SelectedIndexChanged(object sender, EventArgs e) { transitWarehouse = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransName + " " + t.TransDetailAddress == cmbTransitWarehouse.Text); } private void chkAutoChangeWarehouseAddress_CheckedChanged(object sender, EventArgs e) { if (IsFormLoad) { GlobalConfig.BuyConfig.IsAutoChangeWarehouseAddress = chkAutoChangeWarehouseAddress.Checked; NaiBa.Util.Helper.ConfigHelper.SaveConfig("buy_config_260708", GlobalConfig.BuyConfig); } } private void chkUseAppBalance_CheckedChanged(object sender, EventArgs e) { if (IsFormLoad) { GlobalConfig.BuyConfig.IsUseAppBalance = chkUseAppBalance.Checked; NaiBa.Util.Helper.ConfigHelper.SaveConfig("buy_config_260708", GlobalConfig.BuyConfig); } } private void btnAnalysis_Click(object sender, EventArgs e) { var order = this.orderItem?.ItemOrder; if (order == null) return; var txt = txtDirectAddress.Text.Trim(); txt = txt.Replace("\r", "").Replace("\n", ""); if (txt.Contains("拨打请输入分机号")) { Match extensionNumberMatch = Regex.Match(txt, @"拨打请输入分机号\d{4}"); if (extensionNumberMatch.Success) { var extensionNumber = extensionNumberMatch.Value.Replace("拨打请输入分机号", ""); txt = txt.Replace("-" + extensionNumber, ""); txt = txt.Replace("(", "("); txt = txt.Replace(")", ")"); txt = txt.Replace("(拨打请输入分机号" + extensionNumber + ")", ""); } } // 定义座机号的正则表达式 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)) { this.orderItem.ItemOrder.tel_number = phone; } var province = GlobalConfig.Divisions.FirstOrDefault(d => txt.Contains(d.name)); if (province == null) return; this.orderItem.ItemOrder.province_name = province.name; var city = province.children.FirstOrDefault(c => txt.Contains(c.name)); if (city == null) return; this.orderItem.ItemOrder.city_name = city.name; var county = city.children.FirstOrDefault(c => txt.Contains(c.name)); if (county == null) return; this.orderItem.ItemOrder.county_name = 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.orderItem.ItemOrder.user_name = tArr.FirstOrDefault(); this.orderItem.ItemOrder.detail_info = string.Join("", tArr).Replace(this.orderItem.ItemOrder.user_name, "").Trim(',',','); order.AddressStr = order.user_name + "," + order.tel_number + "," + order.province_name + order.city_name + order.county_name + order.detail_info; this.txtBuyTransitWarehouse.Text = this.orderItem.ItemOrder.AddressStr; Task.Run(() => { ChangeAddress(null); }); } } }