diff --git a/29WxOrderWpf/Ctrls/BuyerCtrls/TaobaoBuyOrderViewModel.cs b/29WxOrderWpf/Ctrls/BuyerCtrls/TaobaoBuyOrderViewModel.cs index 8b563bc..f36b647 100644 --- a/29WxOrderWpf/Ctrls/BuyerCtrls/TaobaoBuyOrderViewModel.cs +++ b/29WxOrderWpf/Ctrls/BuyerCtrls/TaobaoBuyOrderViewModel.cs @@ -1738,7 +1738,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls /// public void ManualUpdateBuyOrder() { - if (BuyType == "transit" && txtSourceCodeVal.Trim().Length != 6) + if (BuyType == "transit" && txtSourceCodeVal.ParseToString().Trim().Length != 6) { ErrorMsg = "溯源码长度错误!"; return; diff --git a/29WxOrderWpf/Ctrls/Settings/SettingsView.xaml b/29WxOrderWpf/Ctrls/Settings/SettingsView.xaml index 6bc62ae..d17cb6c 100644 --- a/29WxOrderWpf/Ctrls/Settings/SettingsView.xaml +++ b/29WxOrderWpf/Ctrls/Settings/SettingsView.xaml @@ -24,6 +24,24 @@ + + + + + + + + + + + + + diff --git a/29WxOrderWpf/ViewModels/SettingViewModel.cs b/29WxOrderWpf/ViewModels/SettingViewModel.cs index 4611fe4..f3dcc91 100644 --- a/29WxOrderWpf/ViewModels/SettingViewModel.cs +++ b/29WxOrderWpf/ViewModels/SettingViewModel.cs @@ -31,10 +31,16 @@ public class SettingViewModel : BindableBaseEx get => GetValue(); set => SetValue(value); } + public bool SwitchEnablePddTransitTraditionalAddress + { + get => GetValue(); + set => SetValue(value); + } public void Assign(SettingConfig config) { AutoSwitchGiftType = config.AutoSwitchGiftType; SwitchEnableDirectBuy = config.SwitchEnableDirectBuy; + SwitchEnablePddTransitTraditionalAddress = config.SwitchEnablePddTransitTraditionalAddress; } public SettingConfig ToConfig() { @@ -42,6 +48,7 @@ public class SettingViewModel : BindableBaseEx { AutoSwitchGiftType = AutoSwitchGiftType, SwitchEnableDirectBuy = SwitchEnableDirectBuy, + SwitchEnablePddTransitTraditionalAddress = SwitchEnablePddTransitTraditionalAddress, }; } } diff --git a/29WxOrderWpf/ViewModels/TaobaoLoginViewModel.cs b/29WxOrderWpf/ViewModels/TaobaoLoginViewModel.cs index 4a7cc39..44eb538 100644 --- a/29WxOrderWpf/ViewModels/TaobaoLoginViewModel.cs +++ b/29WxOrderWpf/ViewModels/TaobaoLoginViewModel.cs @@ -345,18 +345,20 @@ namespace _29WxOrderWpf.ViewModels // cef138必须init后方可设置或删除cookie - while (!CefWebBrowser.IsBrowserInitialized || !CefWebBrowser.GetBrowser().MainFrame.IsValid) + while (_isWindowLoaded && (!CefWebBrowser.IsBrowserInitialized || !CefWebBrowser.GetBrowser().MainFrame.IsValid)) await Task.Delay(20); //await WPFCEFBrowser.DeleteCookieAsync(CefWebBrowser.GetCookieManager(null)); //cef 138 如果没有设置RequestContext 可能为空,直接getCookieManager //await WPFCEFBrowser.SetCookieAsync(JsonHelper.SerializeObject(cookieLst), CefWebBrowser.GetCookieManager(null)); if (OpenType != EnumOpenType.login) + { foreach (var cook in cookieLst) { - await WPFCEFBrowser.SetCookieAsync(cook.Domain.Trim('.'), cook.Name + "=" + cook.Value + ";", CefWebBrowser.GetCookieManager(null)); - //t.Wait(5000); + if (_isWindowLoaded) + await WPFCEFBrowser.SetCookieAsync(cook.Domain.Trim('.'), cook.Name + "=" + cook.Value + ";", CefWebBrowser.GetCookieManager(null)); } + } //根据登录的具体店铺设置local storage if (!string.IsNullOrEmpty(buyer?.buyer_id)) @@ -369,9 +371,9 @@ namespace _29WxOrderWpf.ViewModels } if (!string.IsNullOrEmpty(InitUrl)) - CefWebBrowser.Load(InitUrl); + CefWebBrowser?.Load(InitUrl); else - CefWebBrowser.Load(buyerMainUrl); + CefWebBrowser?.Load(buyerMainUrl); //不是登录的话就此返回 if (OpenType != EnumOpenType.login) @@ -381,14 +383,14 @@ namespace _29WxOrderWpf.ViewModels for (int i = 0; i < 50; i++) { - if (CefWebBrowser.IsLoading) + if (CefWebBrowser?.IsLoading == true) await Task.Delay(100); } await Task.Delay(Randomx.GetId(1500, 2000)); if (!_isWindowLoaded) return; - while (!CefWebBrowser.Address?.StartsWith(buyerLoginUrl) ?? false) + while (!CefWebBrowser?.Address?.StartsWith(buyerLoginUrl) ?? false) { await Task.Delay(1000); if (!_isWindowLoaded) @@ -396,8 +398,7 @@ namespace _29WxOrderWpf.ViewModels } } - } - ); + }); } @@ -426,7 +427,7 @@ namespace _29WxOrderWpf.ViewModels sb.Append("(function(){"); sb.Append("CefSharp.BindObjectAsync('shopObj');"); sb.Append("})();"); - CefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(sb.ToString()); + CefWebBrowser?.GetBrowser().MainFrame.EvaluateScriptAsync(sb.ToString()); } private bool RequestHandler_BeforeResourceLoad(object sender, string url, string postData, IRequest request) @@ -489,6 +490,8 @@ namespace _29WxOrderWpf.ViewModels { Thread.Sleep(2000); + if (!_isWindowLoaded) + return; //List cookieList = WPFCEFBrowser.GetCookieList(shopCookieHead, CefWebBrowser.GetCookieManager(null)); List cookieList = WPFCEFBrowser.GetCookieList("", CefWebBrowser.GetCookieManager(null)); @@ -555,9 +558,9 @@ namespace _29WxOrderWpf.ViewModels if (CefWebBrowser != null) { if (Address != "about:blank") - CefWebBrowser.Load(Address); + CefWebBrowser?.Load(Address); else - CefWebBrowser.Load(buyerMainUrl); + CefWebBrowser?.Load(buyerMainUrl); } } diff --git a/AllBase/Model/Config/SettingConfig.cs b/AllBase/Model/Config/SettingConfig.cs index c726123..8d688eb 100644 --- a/AllBase/Model/Config/SettingConfig.cs +++ b/AllBase/Model/Config/SettingConfig.cs @@ -21,5 +21,9 @@ public class SettingConfig /// 允许直发拍单 /// public bool SwitchEnableDirectBuy { get; set; } = false; + /// + /// 拼多多仓库订单使用随机繁体字 + /// + public bool SwitchEnablePddTransitTraditionalAddress { get; set; } = false; #endregion } diff --git a/AllBase/Model/DBModel/TransitWarehouseParam.cs b/AllBase/Model/DBModel/TransitWarehouseParam.cs index 9d0fe4d..463d445 100644 --- a/AllBase/Model/DBModel/TransitWarehouseParam.cs +++ b/AllBase/Model/DBModel/TransitWarehouseParam.cs @@ -39,7 +39,9 @@ namespace AllBase.Model.DBModel public int district_id { get; set; } public string province_name { get;set; } public string city_name { get; set; } - } + public string district_name { get; set; } + + } public class TransitWarehouseData { @@ -64,16 +66,52 @@ namespace AllBase.Model.DBModel { "XDYFJSSC", "福建仓" }, }; - public static string TransitWarehouseDataStr = @" + + public static string TransitWarehouseDataStr = @" XDYBJC ;北京仓 ;胡萍 ;18565773752 ;北京市顺义区光明街道滨河小区七区1号楼 ;2 ;52 ;511 ;北京市 ;北京市 ;顺义区 ;光明街道 ;滨河小区七区1号楼108室 XDYGZC ;广州仓 ;何外华 ;13826339849 ;广州市增城区朱村街道育山一路68号国际物流园 ;6 ;76 ;702 ;广东省 ;广州市 ;增城区 ;朱村街道 ;育山一路68号国际物流园 XDYWHC ;武汉2仓 ;杨先生 ;13044121071 ;湖北省武汉市江汉区民族街道沿江大道轮渡龙王庙码头 ;13 ;180 ;1546 ;湖北省 ;武汉市 ;江汉区 ;民族街道 ;沿江大道轮渡龙王庙码头 XDYSHANDC ;山东2仓 ;鸿鹄小申 ;13044121239 ;山东省临沂市费县南外环东转盘往东200米顺通快递有限公司(仓库二楼) ;22 ;292 ;2415 ;山东省 ;临沂市 ;费县 ;费城街道 ;南外环东转盘往东200米顺通快递有限公司(仓库二楼) -XDYSHC ;上海新仓 ;纪先生 ;13044121150 ;上海市上海市徐汇区徐家汇街道虹桥路616号A座 ;25 ;321 ;2706 ;上海市 ;上海市 ;徐汇区 ;徐家汇街道 ;虹桥路616号A座 +XDYSHC ;上海新仓 ;纪先生 ;13044121150 ;上海市徐汇区徐家汇街道虹桥路616号A座 ;25 ;321 ;2706 ;上海市 ;上海市 ;徐汇区 ;徐家汇街道 ;虹桥路616号A座 XDYSZC ;深圳仓 ;峰峰 ;15343351331 ;广东省东莞市凤岗镇浸校塘东良巷逸乐轩E栋5号楼 ;6 ;79 ;732 ;广东省 ;东莞市 ;凤岗镇 ;凤岗街道 ;浸校塘东良巷逸乐轩E栋5号楼 XDYYWC ;义乌仓 ;小田 ;19058117371 ;浙江省金华市义乌市后宅街道金城高尔夫二期别墅区401栋 ;31 ;386 ;3409 ;浙江省 ;金华市 ;义乌市 ;后宅街道 ;金城高尔夫二期别墅区401栋 XDYFJSSC ;福建仓 ;小张 ;13799125513 ;福建省泉州市晋江市青阳街道中堡电商园一栋 ;4 ;58 ;568 ;福建省 ;泉州市 ;晋江市 ;青阳街道 ;中堡电商园一栋"; + public static Dictionary> dicChineseNumberChar = new Dictionary>() + { + { '1', new List { '一', '壹' } }, + { '2', new List { '二', '贰' } }, + { '3', new List { '三', '叁' } }, + { '4', new List { '四', '肆' } }, + { '5', new List { '五', '伍' } }, + { '6', new List { '六', '陆' } }, + { '7', new List { '七', '柒' } }, + { '8', new List { '八', '捌' } }, + { '9', new List { '九', '玖' } }, + { '0', new List { '零', '〇' } }, + { '一', new List { '壹' } }, + { '二', new List { '贰' } }, + { '三', new List { '叁' } }, + { '四', new List { '肆' } }, + { '五', new List { '伍' } }, + { '六', new List { '陆' } }, + { '七', new List { '柒' } }, + { '八', new List { '捌' } }, + { '九', new List { '玖' } }, + { '零', new List { '〇' } }, + }; + +// public static string TransitWarehouseDataStrTraditional = @" +//XDYBJC ;北京仓 ;胡萍 ;18565773752 ;北京市順義區光明街道濱河小區七區一號樓 ;2 ;52 ;511 ;北京市 ;北京市 ;顺义区 ;光明街道 ;濱河小區七區一號樓一零八室 +//XDYGZC ;广州仓 ;何外华 ;13826339849 ;廣州市增城區朱村街道育山一路六八號國際物流園 ;6 ;76 ;702 ;广东省 ;广州市 ;增城区 ;朱村街道 ;育山一路六八號國際物流園 +//XDYWHC ;武汉2仓 ;杨先生 ;13044121071 ;湖北省武漢市江漢區民族街道沿江大道輪渡龍王廟碼頭 ;13 ;180 ;1546 ;湖北省 ;武汉市 ;江汉区 ;民族街道 ;沿江大道輪渡龍王廟碼頭 +//XDYSHANDC ;山东2仓 ;鸿鹄小申 ;13044121239 ;山東省臨沂市費縣南外環東轉盤往東二零零米順通快遞有限公司(倉庫二樓) ;22 ;292 ;2415 ;山东省 ;临沂市 ;费县 ;費城街道 ;南外環東轉盤往東二零零米順通快遞有限公司(倉庫二樓) +//XDYSHC ;上海新仓 ;纪先生 ;13044121150 ;上海市徐匯區徐家匯街道虹橋路六一六號A座 ;25 ;321 ;2706 ;上海市 ;上海市 ;徐汇区 ;徐家匯街道 ;虹橋路六一六號A座 +//XDYSZC ;深圳仓 ;峰峰 ;15343351331 ;廣東省東莞市鳳崗鎮浸校塘東良巷逸樂軒E棟五號樓 ;6 ;79 ;732 ;广东省 ;东莞市 ;凤岗镇 ;鳳崗街道 ;浸校塘東良巷逸樂軒E棟五號樓 +//XDYYWC ;义乌仓 ;小田 ;19058117371 ;浙江省金华市义乌市後宅街道金城高爾夫二期別墅區四零一棟 ;31 ;386 ;3409 ;浙江省 ;金华市 ;义乌市 ;後宅街道 ;金城高爾夫二期別墅區四零一棟 +//XDYFJSSC ;福建仓 ;小张 ;13799125513 ;福建省泉州市晋江市青陽街道中堡電商園一棟 ;4 ;58 ;568 ;福建省 ;泉州市 ;晋江市 ;青陽街道 ;中堡電商園一棟"; + + //XDYSHC ;上海新仓 ;纪先生 ;13044121150 ;上海市上海市徐汇区徐家汇街道虹桥路616号A座 ;25 ;321 ;2706 ;上海市 ;上海市 ;徐汇区 ;徐家汇街道 ;虹桥路616号A座 //XDYSHC ;上海新仓 ;纪先生 ;13044121150 ;上海市上海市普陀区真如镇街道真北路2653弄T区 ;25 ;321 ;2709 ;上海市 ;上海市 ;普陀区 ;真如镇街道 ;真北路2653弄T区 //XDYFJSSC 石狮仓 福建省/泉州市/晋江市青阳街道中堡电商园一栋 //XDYYWC ;义乌仓 ;小田 ;19058117371 ;浙江省金华市义乌市北苑街道西站大道妈妈商贸18号库39号楼誉达 ;31 ;386 ;3409 ;浙江省 ;金华市 ;义乌市 ;北苑街道 ;西站大道妈妈商贸18号库39号楼誉达 @@ -99,7 +137,7 @@ XDYFJSSC ;福建仓 ;小张 ;13799125513 ;福建省泉州市晋江市青 static List transitWarehouseList = null; - public static List TransitWarehouseList + public static List TransitWarehouseList { get { @@ -125,6 +163,7 @@ XDYFJSSC ;福建仓 ;小张 ;13799125513 ;福建省泉州市晋江市青 district_id = arr[7].Trim().ParseToInt(), province_name = arr[8].Trim(), city_name = arr[9].Trim(), + district_name = arr[10].Trim(), }; transitWarehouseList.Add(tw); } @@ -136,5 +175,7 @@ XDYFJSSC ;福建仓 ;小张 ;13799125513 ;福建省泉州市晋江市青 { } } - } + + static List transitWarehouseTList = null; + } } diff --git a/AllBase/Util/ChineseStringConverter.cs b/AllBase/Util/ChineseStringConverter.cs new file mode 100644 index 0000000..a49cd5d --- /dev/null +++ b/AllBase/Util/ChineseStringConverter.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Util; + +public class ChineseStringConverter +{ + private const int LCMAP_SIMPLIFIED_CHINESE = 0x02000000; + private const int LCMAP_TRADITIONAL_CHINESE = 0x04000000; + + [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)] + private static extern int LCMapString(int Locale, int dwMapFlags, string lpSrcStr, int cchSrc, [Out] string lpDestStr, int cchDest); + + public static string ToSimplified(string source) + { + string target = new string(' ', source.Length); + LCMapString(0x0800, LCMAP_SIMPLIFIED_CHINESE, source, source.Length, target, source.Length); + return target; + } + + public static string ToTraditional(string source) + { + string target = new string(' ', source.Length); + LCMapString(0x0800, LCMAP_TRADITIONAL_CHINESE, source, source.Length, target, source.Length); + return target; + } +} diff --git a/Work/_29Tools/Forms/PddMobileBuyOrderForm.cs b/Work/_29Tools/Forms/PddMobileBuyOrderForm.cs index 38b87c9..d807ce2 100644 --- a/Work/_29Tools/Forms/PddMobileBuyOrderForm.cs +++ b/Work/_29Tools/Forms/PddMobileBuyOrderForm.cs @@ -4,6 +4,7 @@ using AllBase.Model; using AllBase.Model.Config; using AllBase.Model.DBModel; using AllBase.Model.Result; +using AllBase.Util; using CefSharp; using CefSharp.DevTools; using CefSharp.DevTools.IO; @@ -94,10 +95,38 @@ namespace TemuKJD.ToolForms // (拍单后)回调函数,更新拍单余额 private Action updateBalanceAction = null; + string _txtBuyTransitWarehouseStr = ""; /// /// 拍单中转地址 /// - string txtBuyTransitWarehouseStr = ""; + string txtBuyTransitWarehouseStr + { + get { return _txtBuyTransitWarehouseStr; } + set + { + if (!string.IsNullOrEmpty(value) && BuyType == "transit") + { + //txtBuyTransitWarehouseRandomStr = value; + var numberDic = TransitWarehouseData.dicChineseNumberChar; + var txtBuyTransitWarehouseRandomStrTmp = txtBuyTransitWarehouseRandomStr = transitWarehouse.TransFullAddress + Randomx.GetId(1, 35) + Randomx.GetId(1, 9).ToString().PadLeft(2, '0') + "室"; + if (BaseClass.Setting.SwitchEnablePddTransitTraditionalAddress == true) + { + for (int i = 0; i < 10 && txtBuyTransitWarehouseRandomStrTmp == txtBuyTransitWarehouseRandomStr; i++) + { + txtBuyTransitWarehouseRandomStrTmp = string.Join("", txtBuyTransitWarehouseRandomStrTmp.Select(c => Randomx.GetId(2) == 0 ? c.ToString() : ChineseStringConverter.ToTraditional(c.ToString()))); + txtBuyTransitWarehouseRandomStrTmp = string.Join("", txtBuyTransitWarehouseRandomStrTmp.Select(c => (Randomx.GetId(2) == 0 || !numberDic.Keys.Contains(c)) ? c : numberDic[c][Randomx.GetId(numberDic[c].Count)])); + } + txtBuyTransitWarehouseRandomStr = txtBuyTransitWarehouseRandomStrTmp; + } + } + else + { + txtBuyTransitWarehouseRandomStr = value; + } + _txtBuyTransitWarehouseStr = value; + } + } + string txtBuyTransitWarehouseRandomStr = ""; bool IsChangeAddress = false; bool HasChangeAddress = false; @@ -377,7 +406,8 @@ namespace TemuKJD.ToolForms jObj["province_id"] = transitWarehouse.province_id; jObj["city_id"] = transitWarehouse.city_id; jObj["district_id"] = transitWarehouse.district_id; - jObj["address"] = transitWarehouse.TransFullAddress + Randomx.GetId(1, 35) + Randomx.GetId(1, 9).ToString().PadLeft(2, '0') + "室" + txtSourceCode.Text; + //jObj["address"] = transitWarehouse.TransFullAddress + Randomx.GetId(1, 35) + Randomx.GetId(1, 9).ToString().PadLeft(2, '0') + "室" + txtSourceCode.Text; + jObj["address"] = txtBuyTransitWarehouseRandomStr + 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); @@ -1029,7 +1059,7 @@ namespace TemuKJD.ToolForms jsStr1 = @"(function() { var elements = document.getElementsByTagName('div'); for (i = elements.length - 1; i >= 0; i--){ var element = elements[i]; - if (element.innerHTML.indexOf('" + txtBuyTransitWarehouseStr + @"') >= 0 && element.innerHTML.indexOf('" + txtSourceCode.Text.Trim() + @"') >= 0) { + if (element.innerHTML.indexOf('" + txtBuyTransitWarehouseRandomStr + @"') >= 0 && element.innerHTML.indexOf('" + txtSourceCode.Text.Trim() + @"') >= 0) { element.click(); return 'success'; }