From 4a7af051b2669abebd91c55224ab69024a6b399f Mon Sep 17 00:00:00 2001 From: wule Date: Tue, 4 Aug 2026 22:52:02 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=9B=BE=E7=89=87=E4=B8=8D?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D=20=20=20?= =?UTF-8?q?=E8=AF=BB=E5=8D=95=E6=8B=8D=E5=8D=95=E5=8D=A1=E6=AD=BB=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImageUrlToBitmapImageConverter.cs | 35 +--- .../BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs | 43 +++-- .../Ctrls/OrderCtrls/OrderListCtrl.xaml.cs | 11 +- .../OrderCtrls/OrderListRowItemCtrl.xaml | 4 +- .../OrderCtrls/OrderListRowItemCtrl.xaml.cs | 8 +- .../Ctrls/ShopCtrls/ShopListCtrl.xaml.cs | 4 +- AllBase/BaseClass.cs | 2 +- AllBase/GetHtml.cs | 153 ++++++++++++------ AllBase/Helper/GlobalConfig.cs | 8 +- AllBase/ImageBuild.cs | 107 ++++++++++++ .../Model/DBModel/oms_wei_order_item_info.cs | 3 +- Work/_29Tools/Forms/PddMobileBuyOrderForm.cs | 2 +- Work/_29Tools/Forms/ToolForms/ShowImgForm.cs | 35 +++- 13 files changed, 295 insertions(+), 120 deletions(-) diff --git a/29WxOrderWpf/Converters/ImageUrlToBitmapImageConverter.cs b/29WxOrderWpf/Converters/ImageUrlToBitmapImageConverter.cs index b54b814..dfbf7e4 100644 --- a/29WxOrderWpf/Converters/ImageUrlToBitmapImageConverter.cs +++ b/29WxOrderWpf/Converters/ImageUrlToBitmapImageConverter.cs @@ -24,7 +24,7 @@ namespace _29WxOrderWpf.Converters //var bitMap = new BitmapImage(new Uri(url)); BitmapImage bitMap = null; //bitMap = LoadImageFromUrl(url + "?imageView2/1/w/100/format/webp|imageMogr2/auto-orient="); - bitMap = LoadImageFromUrl(url); + bitMap = AllBase.ImageBuild.LoadBitmipImageFromUrl(url); return bitMap; //string errStr = ""; //var bitmapImg = GetUrlImg(url, out errStr); @@ -43,38 +43,5 @@ namespace _29WxOrderWpf.Converters { throw new NotImplementedException(); // 不需要反向转换,所以不实现。 } - - - public static BitmapImage LoadImageFromUrl(string url) - { - BitmapImage bitmap = new BitmapImage(); - - try - { - using (WebClient webClient = new WebClient()) - { - // 下载图片数据到内存流 - using (MemoryStream stream = new MemoryStream(webClient.DownloadData(url))) - { - stream.Position = 0; // 重置流的位置到开始处 - bitmap.BeginInit(); - bitmap.CreateOptions = BitmapCreateOptions.PreservePixelFormat; - bitmap.CacheOption = BitmapCacheOption.OnLoad; // 或者使用 BitmapCacheOption.OnLoad 以减少内存使用 - bitmap.UriSource = null; // 清除可能的旧UriSource,防止缓存问题 - bitmap.StreamSource = stream; - bitmap.EndInit(); - bitmap.Freeze(); // 防止后续更改,提高性能 - } - } - } - catch (Exception ex) - { - // 处理异常,例如打印错误信息或设置一个默认图片等 - //Console.WriteLine("Error loading image: " + ex.Message); - return null; - } - - return bitmap; - } } } diff --git a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs index 3b4a8b6..d656e38 100644 --- a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs +++ b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs @@ -53,9 +53,9 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls { ChromiumWebBrowser cefWebBrowser = null; public string cefAddress = ""; - public static ObservableCollectionThreadSafe lstPddBuyerOrderInfoLite { get; set; } = new ObservableCollectionThreadSafe(); - public static ObservableCollectionThreadSafe lstFilterPddBuyerOrderInfoLite { get; set; } = new ObservableCollectionThreadSafe(); - public static ObservableCollectionThreadSafe lstPddBuyerAfterSaleInfoLite { get; set; } = new ObservableCollectionThreadSafe(); + public static ConcurrentList lstPddBuyerOrderInfoLite { get; set; } = new ConcurrentList(); + public static ObservableCollection lstFilterPddBuyerOrderInfoLite { get; set; } = new ObservableCollection(); + public static ConcurrentList lstPddBuyerAfterSaleInfoLite { get; set; } = new ConcurrentList(); public static ObservableCollectionThreadSafe lstFilterPddBuyerAfterSaleInfoLite { get; set; } = new ObservableCollectionThreadSafe(); public static ConcurrentList lstPddBuyerOrderVoidAfterSaleOrderSn { get; set; } = new ConcurrentList(); public CancellationTokenSource cancellationTokenSource { get; set; } = new CancellationTokenSource(); @@ -100,7 +100,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls void filterBuyerOrder() { - lstFilterPddBuyerOrderInfoLite = new ObservableCollectionThreadSafe(lstPddBuyerOrderInfoLite.Where(o => filterOneBuyerOrder(o) == false)); + lstFilterPddBuyerOrderInfoLite = new ObservableCollection(lstPddBuyerOrderInfoLite.Where(o => filterOneBuyerOrder(o) == false)); if (dgBuyerOrder != null) this.dgBuyerOrder.ItemsSource = lstFilterPddBuyerOrderInfoLite; @@ -155,9 +155,12 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls this.chkAutoReadBuyerOrder.IsChecked = buyerReadOrderConfig.IsAutoReadOrder; this.chkAutoAfterSale.IsChecked = buyerReadOrderConfig.IsAutoAfterSale; - lstPddBuyerOrderInfoLite = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("pdd_buyer_order_list"); + lstPddBuyerOrderInfoLite = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("pdd_buyer_order_list"); if (lstPddBuyerOrderInfoLite == null) - lstPddBuyerOrderInfoLite = new ObservableCollectionThreadSafe(); + lstPddBuyerOrderInfoLite = new ConcurrentList(); + + // 移除所有null值 + lstPddBuyerOrderInfoLite.RemoveAll(o => o == null); foreach (var item in lstPddBuyerOrderInfoLite.ToList()) { if (item.OrderTime < DateTime.Now.AddMonths(-1)) @@ -166,11 +169,12 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls item.WxSendTypeStr = "直发"; } - lstPddBuyerAfterSaleInfoLite = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("pdd_buyer_after_sale_list"); + lstPddBuyerAfterSaleInfoLite = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("pdd_buyer_after_sale_list"); if (lstPddBuyerAfterSaleInfoLite == null) - lstPddBuyerAfterSaleInfoLite = new ObservableCollectionThreadSafe(); + lstPddBuyerAfterSaleInfoLite = new ConcurrentList(); - lstPddBuyerAfterSaleInfoLite = new ObservableCollectionThreadSafe(lstPddBuyerAfterSaleInfoLite.Where(af => af != null)); + // 移除所有null值 + lstPddBuyerAfterSaleInfoLite.RemoveAll(af => af == null); foreach (var item in lstPddBuyerAfterSaleInfoLite.ToList()) { if (item.orderDate < DateTime.Now.AddMonths(-2).ToString("yyMMdd").ParseToInt()) @@ -740,6 +744,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls } } + bool isUpdate = false; PddBuyerOrderLiteInfo order = null; Dispatcher.Invoke(new Action(() => { @@ -748,6 +753,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls if (order == null) { order = o; + isUpdate = true; Dispatcher.Invoke(new Action(() => { lstPddBuyerOrderInfoLite.Add(order); @@ -755,8 +761,10 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls } else { - // 现在先注释掉,每次刷新订单都复写数据库,后面跑稳了以后拿掉,有更新才复写数据库 - //if (JsonHelper.SerializeObject(order) != JsonHelper.SerializeObject(o)) + + string orderStr = JsonHelper.SerializeObject(order); + string oStr = JsonHelper.SerializeObject(o); + if (JsonHelper.SerializeObject(order) != JsonHelper.SerializeObject(o)) { if (order.order_sn == "260730-501334709841478") { @@ -860,6 +868,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls { // 待发货直接售后,并通知中转仓接口修改退货状态 var afterSaleRst = PddDirectAutoAfterSale(order); + isUpdate = true; } } SendOrderE57(order); @@ -873,6 +882,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls { // 待发货直接售后,并通知中转仓接口修改退货状态 var afterSaleRst = PddTransitAutoAfterSale(order); + isUpdate = true; } } if (order.TransitWarehouseRawMessage.ParseToString().Contains("超出派送范围")) @@ -881,12 +891,13 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls { // 待发货直接售后,并通知中转仓接口修改退货状态 var afterSaleRst = PddTransitAutoAfterSale(order); + isUpdate = true; } } SendTransitOrderE57(order); } - if (!string.IsNullOrEmpty(order.ShopOrderIdStr)/* && order.WxSendTypeStr != "直发"*/) + if (isUpdate && !string.IsNullOrEmpty(order.ShopOrderIdStr)/* && order.WxSendTypeStr != "直发"*/) { // 买手订单状态记录到数据库 order_pdd_buyer_order pddBuyerOrder = new order_pdd_buyer_order() @@ -1052,7 +1063,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls { afterSale = lstPddBuyerAfterSaleInfoLite.FirstOrDefault(aft => aft.afterSalesId == af.afterSalesId); var afterSaleTmp = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(afterSale)); - afterSaleTmp.sendStatus = ""; // 比较订单变化,如果有变化,才写库或者处理(设置为空强制变化) + //afterSaleTmp.sendStatus = ""; // 比较订单变化,如果有变化,才写库或者处理(设置为空强制变化) afterSaleTmp.AfterSaleStatusOldStr = null; // 设置null,比较订单变化,如果有变化,才写 afterSaleTmp.listItemMallVO = new ListItemMallVO(); // 这个值每次获取的时候都会变,设置为新对象,不干扰比较订单变化 var afTmp = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(af)); @@ -1210,7 +1221,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls } // 买手已退款,尝试作废仓库订单 - if (afterSale.TransitBuyerOrderRefundStatus == "买手退款成功" && afterSale.WxSendTypeStr != "直发") + if (isUpdate && afterSale.TransitBuyerOrderRefundStatus == "买手退款成功" && afterSale.WxSendTypeStr != "直发") { // 订单是未退款的仓库单(因一个微信订单,可以作废重拍多次,可能存在多个拼多多买手单,此处要使用买手单号对应的 transitItem 作为是否作废的判断依据 if (orderItem != null && orderItem.refund_status <= 1 && transitItem != null && transitItem.order_void_status == 0) @@ -1233,7 +1244,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls } // 获取买手退款地址并显示,如果是中转仓,填写退货地址并发送包裹 - if (!string.IsNullOrEmpty(afterSale?.ShopOrderIdStr)) + if (isUpdate && !string.IsNullOrEmpty(afterSale?.ShopOrderIdStr)) { // 待用户发货 获取地址 if(string.IsNullOrWhiteSpace(afterSale.AfterSaleAddress)) @@ -1242,7 +1253,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls } // 记录到买手退货表 - if (!string.IsNullOrEmpty(afterSale?.ShopOrderIdStr) /* && afterSale.WxSendTypeStr != "直发"*/) + if (isUpdate && !string.IsNullOrEmpty(afterSale?.ShopOrderIdStr) /* && afterSale.WxSendTypeStr != "直发"*/) { // 买手退款单状态记录到数据库 order_pdd_buyer_after_sale pddBuyerAfterSale = new order_pdd_buyer_after_sale() diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs index 58654f3..a454768 100644 --- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs @@ -75,7 +75,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls //lstOrder.Add(new oms_wei_order_info() { id = 1, IsSelect = false, order_id = ("3737033423685556736".ParseToLong() + Randomx.GetId(0,100)).ParseToString(), shop_name = "媛卡曦工厂优选" }); GlobalConfig.lstOrder.Add(new oms_wei_order_info() { id = 1, IsSelect = false, order_id = Randomx.GetId(1000, 10000).ParseToString(), shop_name = "媛卡曦工厂优选" }); } - GlobalConfig.lstOrder.SortDesc(o => o.order_id.ParseToLong()); + //GlobalConfig.lstOrder.SortDesc(o => o.order_id.ParseToLong()); } public void AutoGetOrder() @@ -135,6 +135,11 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls { break; } + Dispatcher.Invoke(new Action(() => + { + imgLoading.Visibility = Visibility.Visible; + btnSearch.IsEnabled = false; + })); page++; var url = BaseClass.Build29WxObjString("order/get_erp_order_list"); @@ -416,7 +421,9 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls if (string.IsNullOrEmpty(orderIds)) GetShopWaybillExceptionOrder(); - hasReadOrder = true; + if (string.IsNullOrEmpty(orderIds)) + hasReadOrder = true; + Dispatcher.Invoke(new Action(() => { imgLoading.Visibility = Visibility.Collapsed; diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml index 1d6abd4..4763b22 100644 --- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml @@ -140,9 +140,9 @@ + Visibility="{Binding FreightVisibility}"/> + Background="Transparent" IsReadOnly="True" BorderThickness="0" TextWrapping="Wrap" Visibility="{Binding FreightVisibility}"/> diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs index b565c41..aff5c04 100644 --- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml.cs @@ -550,6 +550,9 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls return; } + //BaseMsgWindow.ShowAnimateMessage("触发成功!" + DateTime.Now.ParseToString(), "Msg", 5); + //return; + // 打开拍单窗口 Dispatcher.Invoke(new Action(() => { @@ -612,7 +615,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls // 异步加载图片防止卡顿 // 缩略图在有的电脑上无法显示 //BitmapImage bImg = ImageUrlToBitmapImageConverter.LoadImageFromUrl(order_item.thumb_img + "?imageView2/1/w/100/format/webp|imageMogr2/auto-orient="); - BitmapImage bImg = ImageUrlToBitmapImageConverter.LoadImageFromUrl(order_item.thumb_img); + BitmapImage bImg = AllBase.ImageBuild.LoadBitmipImageFromUrl(order_item.thumb_img); Thread.Sleep(Randomx.GetId(1000)); Dispatcher.Invoke(new Action(() => { @@ -1153,6 +1156,9 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls return; } + //BaseMsgWindow.ShowAnimateMessage("触发成功!" + DateTime.Now.ParseToString(), "Msg", 5); + //return; + // 打开拍单窗口 Dispatcher.Invoke(new Action(() => { diff --git a/29WxOrderWpf/Ctrls/ShopCtrls/ShopListCtrl.xaml.cs b/29WxOrderWpf/Ctrls/ShopCtrls/ShopListCtrl.xaml.cs index 8abeedc..bb4cd04 100644 --- a/29WxOrderWpf/Ctrls/ShopCtrls/ShopListCtrl.xaml.cs +++ b/29WxOrderWpf/Ctrls/ShopCtrls/ShopListCtrl.xaml.cs @@ -39,7 +39,7 @@ namespace _29WxOrderWpf.Ctrls.ShopCtrls private void shopListCtrl_Loaded(object sender, RoutedEventArgs e) { - this.lbxShop.ItemsSource = GlobalConfig.ShopLoginList; + this.lbxShop.ItemsSource = new ObservableCollection(GlobalConfig.ShopLoginList); Task.Run(() => { while(MainWindow.Instance.hasReadShop == false) @@ -168,7 +168,7 @@ namespace _29WxOrderWpf.Ctrls.ShopCtrls txtShopName.Text = ""; cmbNotes.Text = ""; cmbGroup.Text = ""; - this.lbxShop.ItemsSource = GlobalConfig.ShopLoginList; + this.lbxShop.ItemsSource = new ObservableCollection(GlobalConfig.ShopLoginList); } private void btnRefreshShop_Click(object sender, RoutedEventArgs e) diff --git a/AllBase/BaseClass.cs b/AllBase/BaseClass.cs index e99fb5f..fce2d68 100644 --- a/AllBase/BaseClass.cs +++ b/AllBase/BaseClass.cs @@ -32,7 +32,7 @@ namespace AllBase /// 版本ID /// - public static int VersionCount = 205; + public static int VersionCount = 207; public static string ServerUrl { get; set; } = "http://1.13.195.131:9000"; public static string DebugUrl { get; set; } = "http://localhost:9000"; diff --git a/AllBase/GetHtml.cs b/AllBase/GetHtml.cs index 68b1678..1323ad9 100644 --- a/AllBase/GetHtml.cs +++ b/AllBase/GetHtml.cs @@ -15,6 +15,7 @@ using System.IO; using System.IO.Compression; using System.Net; using System.Security.Cryptography; +using System.Security.Policy; using System.Text; using System.Text.RegularExpressions; using System.Threading; @@ -1147,66 +1148,118 @@ Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrom /// public static string PostUtf8(string url, string postData, string contentType = "", int timeOut = -1) { - //return PostUtf8(url, Encoding.UTF8.GetBytes(postData)); - //bool isError = false; - string[] l = UserAgent.Split('\n'); + HttpWebResponse response = null; + string result; try { - string codeType = "utf-8"; - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); - request.UserAgent = l[new Random(Guid.NewGuid().GetHashCode()).Next(l.Length)].Trim(); - byte[] byteData = Encoding.GetEncoding(codeType).GetBytes(postData); - request.Method = "POST"; - request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; - if (timeOut == -1) - { - request.Timeout = BaseClass.TimeOut * 1000; - request.ReadWriteTimeout = BaseClass.TimeOut * 1000; - } - else - { - request.Timeout = timeOut * 1000; - request.ReadWriteTimeout = timeOut * 1000; - } - request.Proxy = null; + HttpWebRequest request; + request = (HttpWebRequest)WebRequest.Create(url); + request.KeepAlive = true; + request.ContentType = "application/x-www-form-urlencoded; charset=utf-8"; + request.Headers.Add("sec-ch-ua", @"""Not(A:Brand"";v=""8"", ""Chromium"";v=""144"", ""Google Chrome"";v=""144"""); + request.Headers.Add("sec-ch-ua-mobile", @"?0"); + request.Headers.Add("sec-ch-ua-platform", @"""Windows"""); + request.Headers.Add("Upgrade-Insecure-Requests", @"1"); + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36"; + request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"; + request.Headers.Add("Sec-Fetch-Site", @"none"); + request.Headers.Add("Sec-Fetch-Mode", @"navigate"); + request.Headers.Add("Sec-Fetch-User", @"?1"); + request.Headers.Add("Sec-Fetch-Dest", @"document"); request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); - request.ContentType = "application/x-www-form-urlencoded; charset=" + codeType; - if (!string.IsNullOrEmpty(contentType)) - { - request.ContentType = contentType; - } - request.ContentLength = byteData.Length; - request.Referer = url; - request.CookieContainer = new CookieContainer(); - request.AllowAutoRedirect = false; - using (Stream requestStream = request.GetRequestStream()) - { - requestStream.Write(byteData, 0, byteData.Length); - } - HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + request.Method = "POST"; + request.ServicePoint.Expect100Continue = false; - Stream receiveStream = response.GetResponseStream(); - StreamReader readStream = new StreamReader(receiveStream, Encoding.GetEncoding(codeType)); - //string data = readStream.ReadToEnd().Trim(); - //if (string.IsNullOrEmpty(data)) - //{ - // return "{\"code\": 400,\"data\": []}"; - //} - //return data; - return ReadResponse(response); + string body = postData; + byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); + request.ContentLength = postBytes.Length; + Stream stream = request.GetRequestStream(); + stream.Write(postBytes, 0, postBytes.Length); + stream.Close(); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException ex) + { + if (ex.Status == WebExceptionStatus.ProtocolError) + { + response = (HttpWebResponse)ex.Response; + result = ReadResponse(response); + return result; + } + else return ex.Message; } catch (Exception e) { - //LogSave.Add(url + "---------" + e.ToString()); - //if (!isError) - //{ - // isError = true; - // goto reTry; - //} - return "{\"code\": 400,\"msg\":\"" + e.Message + "\"}"; + if (response != null) response.Close(); + return e.Message; } + result = ReadResponse(response); + return result; + + ////return PostUtf8(url, Encoding.UTF8.GetBytes(postData)); + ////bool isError = false; + //string[] l = UserAgent.Split('\n'); + //try + //{ + // string codeType = "utf-8"; + // HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + // request.UserAgent = l[new Random(Guid.NewGuid().GetHashCode()).Next(l.Length)].Trim(); + // byte[] byteData = Encoding.GetEncoding(codeType).GetBytes(postData); + // request.Method = "POST"; + // request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; + // if (timeOut == -1) + // { + // request.Timeout = BaseClass.TimeOut * 1000; + // request.ReadWriteTimeout = BaseClass.TimeOut * 1000; + // } + // else + // { + // request.Timeout = timeOut * 1000; + // request.ReadWriteTimeout = timeOut * 1000; + // } + // request.Proxy = null; + + // request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + + // request.ContentType = "application/x-www-form-urlencoded; charset=" + codeType; + // if (!string.IsNullOrEmpty(contentType)) + // { + // request.ContentType = contentType; + // } + // request.ContentLength = byteData.Length; + // request.Referer = url; + // request.CookieContainer = new CookieContainer(); + // request.AllowAutoRedirect = false; + // using (Stream requestStream = request.GetRequestStream()) + // { + // requestStream.Write(byteData, 0, byteData.Length); + // } + // HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + + // Stream receiveStream = response.GetResponseStream(); + // StreamReader readStream = new StreamReader(receiveStream, Encoding.GetEncoding(codeType)); + // //string data = readStream.ReadToEnd().Trim(); + // //if (string.IsNullOrEmpty(data)) + // //{ + // // return "{\"code\": 400,\"data\": []}"; + // //} + // //return data; + // return ReadResponse(response); + //} + //catch (Exception e) + //{ + // //LogSave.Add(url + "---------" + e.ToString()); + // //if (!isError) + // //{ + // // isError = true; + // // goto reTry; + // //} + // return "{\"code\": 400,\"msg\":\"" + e.Message + "\"}"; + //} } /// /// post 数据 diff --git a/AllBase/Helper/GlobalConfig.cs b/AllBase/Helper/GlobalConfig.cs index b187b79..2702910 100644 --- a/AllBase/Helper/GlobalConfig.cs +++ b/AllBase/Helper/GlobalConfig.cs @@ -26,11 +26,11 @@ namespace AllBase.Helper /// /// 店铺列表 /// - public static ObservableCollectionThreadSafe ShopLoginList { get; set; } = new ObservableCollectionThreadSafe(); + public static ConcurrentList ShopLoginList { get; set; } = new ConcurrentList(); /// /// 拼多多买手列表 /// - public static ObservableCollectionThreadSafe PDDBuyerLoginList { get; set; } = new ObservableCollectionThreadSafe(); + public static ObservableCollection PDDBuyerLoginList { get; set; } = new ObservableCollection(); /// /// 当前拼多多买手 /// @@ -38,11 +38,11 @@ namespace AllBase.Helper /// /// 订单列表 /// - public static ObservableCollectionThreadSafe lstOrder { get; set; } = new ObservableCollectionThreadSafe(); + public static ConcurrentList lstOrder { get; set; } = new ConcurrentList(); /// /// 过滤的订单列表 /// - public static ObservableCollectionThreadSafe lstFilterOrder { get; set; } = new ObservableCollectionThreadSafe(); + public static ObservableCollection lstFilterOrder { get; set; } = new ObservableCollection(); /// /// 当前标签头 /// diff --git a/AllBase/ImageBuild.cs b/AllBase/ImageBuild.cs index 40deb3c..d70b7d5 100644 --- a/AllBase/ImageBuild.cs +++ b/AllBase/ImageBuild.cs @@ -3,7 +3,9 @@ using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; +using System.Net; using System.Runtime.InteropServices; +using System.Windows.Forms; using System.Windows.Media.Imaging; namespace AllBase @@ -334,5 +336,110 @@ namespace AllBase DeleteObject(h); return icon; } + + public static Image LoadBitmapLoadBitmipImageFromUrl(string url) + { + try + { + BitmapImage bi = LoadBitmipImageFromUrl(url); + return BitmapImageToSystemDrawingImage(bi); + } + catch (Exception e) + { + return null; + } + } + + public static Image BitmapImageToSystemDrawingImage(BitmapImage bitmapImage) + { + // 方法1 会乱码花屏 + //int width = bitmapImage.PixelWidth; + //int height = bitmapImage.PixelHeight; + //int stride = width * ((bitmapImage.Format.BitsPerPixel + 7) / 8); + + //byte[] pixels = new byte[stride * height]; + //bitmapImage.CopyPixels(pixels, stride, 0); + + //Bitmap bitmap = new Bitmap(width, height, PixelFormat.Format32bppArgb); + //BitmapData bmpData = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, bitmap.PixelFormat); + + //Marshal.Copy(pixels, 0, bmpData.Scan0, pixels.Length); + //bitmap.UnlockBits(bmpData); + + //return bitmap; + + // 方法2 + using (MemoryStream stream = new MemoryStream()) + { + BitmapEncoder encoder = new BmpBitmapEncoder(); + encoder.Frames.Add(BitmapFrame.Create(bitmapImage)); + encoder.Save(stream); + stream.Position = 0; + Bitmap bitmap = new Bitmap(stream); + stream.Close(); + + //// 现在你可以将这个Bitmap对象用于Windows Forms的PictureBox或其他图像显示控件 + //PictureBox pictureBox = new PictureBox(); + //pictureBox.Image = bitmap; // 或者如果你已经有了一个PictureBox控件,直接设置其Image属性 + return bitmap; + } + } + + public static BitmapImage LoadBitmipImageFromUrl(string url) + { + BitmapImage bitmap = new BitmapImage(); + + try + { + using (WebClient webClient = new WebClient()) + { + // 下载图片数据到内存流 + using (MemoryStream stream = new MemoryStream(webClient.DownloadData(url))) + { + stream.Position = 0; // 重置流的位置到开始处 + bitmap.BeginInit(); + bitmap.CreateOptions = BitmapCreateOptions.PreservePixelFormat; + bitmap.CacheOption = BitmapCacheOption.OnLoad; // 或者使用 BitmapCacheOption.OnLoad 以减少内存使用 + bitmap.UriSource = null; // 清除可能的旧UriSource,防止缓存问题 + bitmap.StreamSource = stream; + bitmap.EndInit(); + bitmap.Freeze(); // 防止后续更改,提高性能 + } + } + } + catch (Exception ex) + { + // 处理异常,例如打印错误信息或设置一个默认图片等 + //Console.WriteLine("Error loading image: " + ex.Message); + return null; + } + + return bitmap; + } + + + //public string BitmapImageToBase64(BitmapImage bitmapImage) + //{ + // // 创建一个 RenderTargetBitmap 对象来渲染 BitmapImage + // RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap( + // (int)bitmapImage.PixelWidth, + // (int)bitmapImage.PixelHeight, + // bitmapImage.DpiX, + // bitmapImage.DpiY, + // System.Windows.Media.PixelFormats.Pbgra32); + // renderTargetBitmap.Render(bitmapImage); + + // // 将 RenderTargetBitmap 保存到内存流中 + // PngBitmapEncoder encoder = new PngBitmapEncoder(); + // encoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap)); + + // using (MemoryStream memoryStream = new MemoryStream()) + // { + // encoder.Save(memoryStream); + // byte[] imageBytes = memoryStream.ToArray(); + // string base64String = Convert.ToBase64String(imageBytes); + // return base64String; + // } + //} } } diff --git a/AllBase/Model/DBModel/oms_wei_order_item_info.cs b/AllBase/Model/DBModel/oms_wei_order_item_info.cs index 5169eb0..1094177 100644 --- a/AllBase/Model/DBModel/oms_wei_order_item_info.cs +++ b/AllBase/Model/DBModel/oms_wei_order_item_info.cs @@ -797,9 +797,10 @@ namespace AllBase.Model.DBModel /// /// 运费文本是否可见 /// - public Visibility freight_visibility + public Visibility FreightVisibility { get { if (ItemOrder.out_amount > 0 || ItemTransitOrder?.out_amount > 0) return Visibility.Collapsed; return Visibility.Visible; } + //get { if (ItemOrder.freight > 0) return Visibility.Visible; return Visibility.Collapsed; } set { } } diff --git a/Work/_29Tools/Forms/PddMobileBuyOrderForm.cs b/Work/_29Tools/Forms/PddMobileBuyOrderForm.cs index dc1d58b..5cf62b4 100644 --- a/Work/_29Tools/Forms/PddMobileBuyOrderForm.cs +++ b/Work/_29Tools/Forms/PddMobileBuyOrderForm.cs @@ -166,7 +166,7 @@ namespace TemuKJD.ToolForms } } - pictureBox1.ImageLocation = orderItem.thumb_img; + 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; diff --git a/Work/_29Tools/Forms/ToolForms/ShowImgForm.cs b/Work/_29Tools/Forms/ToolForms/ShowImgForm.cs index d05815e..a4ecc71 100644 --- a/Work/_29Tools/Forms/ToolForms/ShowImgForm.cs +++ b/Work/_29Tools/Forms/ToolForms/ShowImgForm.cs @@ -1,9 +1,12 @@ -using System; +using AllBase; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; +using System.Net; +using System.Security.Policy; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -24,14 +27,22 @@ namespace Work._29Tools.Forms.ToolForms if (!string.IsNullOrEmpty(currentImgUrl)) { - this.pictureBox1.ImageLocation = currentImgUrl.Replace("https", "http"); + //if (currentImgUrl.Contains("wxapp")) + // this.pictureBox1.ImageLocation = currentImgUrl; + //else + // this.pictureBox1.ImageLocation = currentImgUrl.Replace("https", "http"); //string getImgError = ""; //var image = AllBase.GetHtml.GetUrlImg(currentImgUrl, out getImgError); //if (!string.IsNullOrEmpty(getImgError)) // //BaseMsgForm.ShowError("图片加载失败 " + getImgError); - // image = TemuKJD.Properties.Resources.errpic; + // image = Properties.Resources.errpic; //this.pictureBox1.Image = image; + + //"ivborw" , "/9j/" , "uklgr" , "r0lgod" + //UklGRkoxAgBXRUJQVlA4WAoAAAAgAAAAHwMAHwMASUNDUEgMAAAAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAA + //UklGRjInAwBXRUJQVlA4WAoAAAAgAAAAnwUAnwUASUNDUAgCAAAAAAIIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAA + this.pictureBox1.Image = ImageBuild.LoadBitmapLoadBitmipImageFromUrl(currentImgUrl); } } @@ -45,7 +56,13 @@ namespace Work._29Tools.Forms.ToolForms if (!string.IsNullOrEmpty(currentImgUrl)) { if (picDic != null) - this.pictureBox1.ImageLocation = currentImgUrl.Replace("https", "http"); + { + if (currentImgUrl.Contains("wxapp")) + this.pictureBox1.ImageLocation = currentImgUrl; + else + this.pictureBox1.ImageLocation = currentImgUrl.Replace("https", "http"); + } + } } @@ -83,7 +100,10 @@ namespace Work._29Tools.Forms.ToolForms if (index == imgDic.Keys.Count) index = 0; currentImgUrl = imgDic.Keys.ToList()[index]; - this.pictureBox1.ImageLocation = currentImgUrl.Replace("https", "http"); + if (currentImgUrl.Contains("wxapp")) + this.pictureBox1.ImageLocation = currentImgUrl; + else + this.pictureBox1.ImageLocation = currentImgUrl.Replace("https", "http"); break; } if (imgDic[imgDic.Keys.ToList()[i]] == currentImgUrl) @@ -92,7 +112,10 @@ namespace Work._29Tools.Forms.ToolForms if (index == imgDic.Keys.Count) index = 0; currentImgUrl = imgDic[imgDic.Keys.ToList()[index]]; - this.pictureBox1.ImageLocation = currentImgUrl.Replace("https", "http"); + if (currentImgUrl.Contains("wxapp")) + this.pictureBox1.ImageLocation = currentImgUrl; + else + this.pictureBox1.ImageLocation = currentImgUrl.Replace("https", "http"); break; } }