From 9f26f03474b46b2b654f07b2245f8271282f4e88 Mon Sep 17 00:00:00 2001 From: wule Date: Fri, 17 Apr 2026 17:41:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B9=B0=E6=89=8B=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AllBase/BaseClass.cs | 2 +- .../Result/PDDResult/PddBuyerOrderInfoLite.cs | 1 + TEMUKJD/BLL/YkdHttpResponseBLL.cs | 65 +- .../PDDAddActivityForm.Designer.cs | 131 +- .../ActivityForms/PDDAddActivityForm.cs | 2007 ++++++++++------- .../ProductForms/PDDProductUpDownForm.cs | 2 +- .../PDDDBProdUserSelectForm.cs | 2 + .../WXUserProdListForm.Designer.cs | 14 +- .../TalkForms/BuyerOrderListForm.Designer.cs | 182 +- .../WXForms/TalkForms/BuyerOrderListForm.cs | 411 +++- .../WXForms/TalkForms/BuyerOrderListForm.resx | 3 + 11 files changed, 1841 insertions(+), 979 deletions(-) diff --git a/AllBase/BaseClass.cs b/AllBase/BaseClass.cs index 987065b..2346137 100644 --- a/AllBase/BaseClass.cs +++ b/AllBase/BaseClass.cs @@ -27,7 +27,7 @@ namespace AllBase /// /// 版本ID /// - public static int VersionCount = 989; + public static int VersionCount = 993; //public static int VersionCount = 613; /// diff --git a/AllBase/Model/Result/PDDResult/PddBuyerOrderInfoLite.cs b/AllBase/Model/Result/PDDResult/PddBuyerOrderInfoLite.cs index 40d1d80..2d8ca82 100644 --- a/AllBase/Model/Result/PDDResult/PddBuyerOrderInfoLite.cs +++ b/AllBase/Model/Result/PDDResult/PddBuyerOrderInfoLite.cs @@ -51,6 +51,7 @@ namespace AllBase.Model.Result.PDDResult } } public string sendStatus { get; set; } = ""; + public string refundStatus { get; set; } = ""; public string buyerId { get; set; } // 买手Id public string buyerName { get; set; } // 买手名称 diff --git a/TEMUKJD/BLL/YkdHttpResponseBLL.cs b/TEMUKJD/BLL/YkdHttpResponseBLL.cs index a1b902f..a6fef9e 100644 --- a/TEMUKJD/BLL/YkdHttpResponseBLL.cs +++ b/TEMUKJD/BLL/YkdHttpResponseBLL.cs @@ -40,7 +40,8 @@ namespace TemuKJD.BLL request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"; request.Accept = "application/json, text/plain, */*"; request.Headers.Add("sec-ch-ua", @"""Not)A;Brand"";v=""8"", ""Chromium"";v=""138"""); - request.Headers.Add("sec-ch-ua-mobile", @"?0"); + request.Headers.Add("sec-ch-ua-mobile", @"?0"); + request.Headers.Add("Origin", @"https://mobile.yangkeduo.com"); request.Headers.Set(HttpRequestHeader.Cookie, cookies); request.Headers.Add("Sec-Fetch-Site", @"same-origin"); request.Headers.Add("Sec-Fetch-Mode", @"cors"); @@ -115,7 +116,67 @@ namespace TemuKJD.BLL request.Headers.Add("Sec-Fetch-Dest", @"empty"); //request.Referer = "https://mobile.yangkeduo.com/goods.html?goods_id=668777537796&_oak_rcto=YWKWG77VXtDidZlaaAew84Hjoi0WMIkr6Sb3iSrTsNPiwhxdCIE-1DEr&_oc_trace_mark=199&_oc_adinfo=eyJwYWdlX3NuIjoxMDAwMiwic2NlbmVfaWQiOjUwNn0%3D&_oak_gallery_token=49fa7eda1bcf57d32ea05e34565ca727&_oak_gallery=https%3A%2F%2Fimg.pddpic.com%2Fmms-material-img%2F2025-08-19%2F74364405-4d67-4d13-ad64-1712f70865db.jpeg.a.jpeg&_oc_refer_ad=1&page_from=35&thumb_url=https%3A%2F%2Fimg.pddpic.com%2Fmms-material-img%2F2025-08-19%2F74364405-4d67-4d13-ad64-1712f70865db.jpeg.a.jpeg%3FimageMogr2%2Fthumbnail%2F400x%257CimageView2%2F2%2Fw%2F400%2Fq%2F80%2Fformat%2Fwebp&refer_page_name=index&refer_page_id=10002_1775730536937_hocm3gfy6j&refer_page_sn=10002&uin=CFS2K7V47GEISCE6TLYY6HRWPI_GEXDA"; request.Referer = referer; - request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br, zstd"); + //request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br, zstd"); + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException ex) + { + if (ex.Status == WebExceptionStatus.ProtocolError) + { + response = (HttpWebResponse)ex.Response; + result = GetProxyHtml.ReadResponse(response); + return result; + } + else return ex.Message; + } + catch (Exception e) + { + if (response != null) response.Close(); + return e.Message; + } + result = GetProxyHtml.ReadResponse(response); + return result; + } + + public static string YangkeduoGetPageResponse(BuyerLoginInfo buyer, string _url, string referer = "") + { + string cookies = ""; + try + { + var cookieLst = JsonHelper.DeserializeJsonToList(buyer?.cookie.ParseToString()); + if (cookieLst == null) + cookieLst = new List(); + foreach (var cook in cookieLst) + { + cookies += cook.Name + "=" + cook.Value + ";"; + } + } + catch { } + + HttpWebResponse response = null; + string result; + try + { + string url = _url; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + request.KeepAlive = true; + request.Headers.Add("sec-ch-ua", @"""Not)A;Brand"";v=""8"", ""Chromium"";v=""138"""); + 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/138.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.Set(HttpRequestHeader.Cookie, cookies); + 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, br, zstd"); + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); response = (HttpWebResponse)request.GetResponse(); diff --git a/TEMUKJD/PDDForms/ProductForms/ActivityForms/PDDAddActivityForm.Designer.cs b/TEMUKJD/PDDForms/ProductForms/ActivityForms/PDDAddActivityForm.Designer.cs index e3feb60..2fbfc53 100644 --- a/TEMUKJD/PDDForms/ProductForms/ActivityForms/PDDAddActivityForm.Designer.cs +++ b/TEMUKJD/PDDForms/ProductForms/ActivityForms/PDDAddActivityForm.Designer.cs @@ -32,16 +32,18 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle13 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle14 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle15 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle16 = new System.Windows.Forms.DataGridViewCellStyle(); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); this.ucGroupBoxEx2 = new TemuKJD.UserComponent.UcGroupBoxEx(this.components); + this.label6 = new System.Windows.Forms.Label(); + this.txtMultiCnt = new System.Windows.Forms.TextBox(); this.label5 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); this.txtSleepTime = new System.Windows.Forms.TextBox(); @@ -178,7 +180,7 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms // splitContainer1.Panel2 // this.splitContainer1.Panel2.Controls.Add(this.splitContainer3); - this.splitContainer1.Size = new System.Drawing.Size(1571, 546); + this.splitContainer1.Size = new System.Drawing.Size(1507, 546); this.splitContainer1.SplitterDistance = 140; this.splitContainer1.TabIndex = 11; // @@ -189,6 +191,8 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms | System.Windows.Forms.AnchorStyles.Right))); this.ucGroupBoxEx2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); this.ucGroupBoxEx2.BorderStyle = TemuKJD.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx2.Controls.Add(this.label6); + this.ucGroupBoxEx2.Controls.Add(this.txtMultiCnt); this.ucGroupBoxEx2.Controls.Add(this.label5); this.ucGroupBoxEx2.Controls.Add(this.label3); this.ucGroupBoxEx2.Controls.Add(this.txtSleepTime); @@ -222,11 +226,32 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms this.ucGroupBoxEx2.Controls.Add(this.line2); this.ucGroupBoxEx2.Location = new System.Drawing.Point(459, 2); this.ucGroupBoxEx2.Name = "ucGroupBoxEx2"; - this.ucGroupBoxEx2.Size = new System.Drawing.Size(1110, 140); + this.ucGroupBoxEx2.Size = new System.Drawing.Size(1046, 140); this.ucGroupBoxEx2.TabIndex = 667; this.ucGroupBoxEx2.TabStop = false; this.ucGroupBoxEx2.Text = "活动价格配置"; // + // label6 + // + this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(533, 92); + this.label6.Margin = new System.Windows.Forms.Padding(6, 0, 0, 0); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(68, 17); + this.label6.TabIndex = 904; + this.label6.Text = "批量提交数"; + // + // txtMultiCnt + // + this.txtMultiCnt.Location = new System.Drawing.Point(604, 89); + this.txtMultiCnt.Margin = new System.Windows.Forms.Padding(0, 2, 0, 2); + this.txtMultiCnt.Name = "txtMultiCnt"; + this.txtMultiCnt.Size = new System.Drawing.Size(37, 23); + this.txtMultiCnt.TabIndex = 903; + this.txtMultiCnt.Text = "5"; + this.txtMultiCnt.TextChanged += new System.EventHandler(this.txtMultiCnt_TextChanged); + // // label5 // this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); @@ -344,7 +369,7 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms this.btnApiUpload.Cursor = System.Windows.Forms.Cursors.Hand; this.btnApiUpload.DisabledBackColor = System.Drawing.Color.Empty; this.btnApiUpload.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnApiUpload.Location = new System.Drawing.Point(1031, 33); + this.btnApiUpload.Location = new System.Drawing.Point(967, 33); this.btnApiUpload.Name = "btnApiUpload"; this.btnApiUpload.Size = new System.Drawing.Size(66, 23); this.btnApiUpload.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -368,7 +393,7 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms this.btnStop.CanvasColor = System.Drawing.SystemColors.Control; this.btnStop.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.btnStop.DisabledBackColor = System.Drawing.Color.Empty; - this.btnStop.Location = new System.Drawing.Point(1031, 68); + this.btnStop.Location = new System.Drawing.Point(967, 68); this.btnStop.Margin = new System.Windows.Forms.Padding(4, 2, 2, 2); this.btnStop.Name = "btnStop"; this.btnStop.Size = new System.Drawing.Size(66, 23); @@ -427,7 +452,7 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms this.btnClearDgv.CanvasColor = System.Drawing.SystemColors.Control; this.btnClearDgv.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.btnClearDgv.DisabledBackColor = System.Drawing.Color.Empty; - this.btnClearDgv.Location = new System.Drawing.Point(1031, 100); + this.btnClearDgv.Location = new System.Drawing.Point(967, 100); this.btnClearDgv.Margin = new System.Windows.Forms.Padding(4, 2, 2, 2); this.btnClearDgv.Name = "btnClearDgv"; this.btnClearDgv.Size = new System.Drawing.Size(66, 23); @@ -967,7 +992,7 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms // splitContainer3.Panel2 // this.splitContainer3.Panel2.Controls.Add(this.splitContainer4); - this.splitContainer3.Size = new System.Drawing.Size(1571, 402); + this.splitContainer3.Size = new System.Drawing.Size(1507, 402); this.splitContainer3.SplitterDistance = 372; this.splitContainer3.TabIndex = 1; // @@ -994,7 +1019,7 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms this.splitContainer2.Panel2.Controls.Add(this.pbLoading); this.splitContainer2.Panel2.Controls.Add(this.dgvActProduct); this.splitContainer2.Panel2.Padding = new System.Windows.Forms.Padding(0, 0, 4, 0); - this.splitContainer2.Size = new System.Drawing.Size(1571, 372); + this.splitContainer2.Size = new System.Drawing.Size(1507, 372); this.splitContainer2.SplitterDistance = 326; this.splitContainer2.TabIndex = 0; // @@ -1014,19 +1039,19 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms // this.dgvShop.AllowUserToAddRows = false; this.dgvShop.AllowUserToDeleteRows = false; - dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; - this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + dataGridViewCellStyle9.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle9; this.dgvShop.AutoRowNumber = true; this.dgvShop.BackgroundColor = System.Drawing.Color.White; this.dgvShop.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); - dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle10.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle10.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle10.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle10.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle10.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle10.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle10; this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.colSelect, @@ -1167,7 +1192,7 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms // txtTest20981 // this.txtTest20981.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.txtTest20981.Location = new System.Drawing.Point(1018, 30); + this.txtTest20981.Location = new System.Drawing.Point(954, 30); this.txtTest20981.Margin = new System.Windows.Forms.Padding(0, 2, 0, 2); this.txtTest20981.Name = "txtTest20981"; this.txtTest20981.Size = new System.Drawing.Size(127, 23); @@ -1180,7 +1205,7 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms this.btnTest20981.CanvasColor = System.Drawing.SystemColors.Control; this.btnTest20981.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.btnTest20981.DisabledBackColor = System.Drawing.Color.Empty; - this.btnTest20981.Location = new System.Drawing.Point(1149, 30); + this.btnTest20981.Location = new System.Drawing.Point(1085, 30); this.btnTest20981.Margin = new System.Windows.Forms.Padding(4, 2, 2, 2); this.btnTest20981.Name = "btnTest20981"; this.btnTest20981.Size = new System.Drawing.Size(84, 23); @@ -1219,7 +1244,7 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms // this.pbLoading.Anchor = System.Windows.Forms.AnchorStyles.None; this.pbLoading.Image = global::TemuKJD.Properties.Resources.loading_blue; - this.pbLoading.Location = new System.Drawing.Point(595, 161); + this.pbLoading.Location = new System.Drawing.Point(563, 161); this.pbLoading.Name = "pbLoading"; this.pbLoading.Size = new System.Drawing.Size(50, 50); this.pbLoading.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; @@ -1231,19 +1256,19 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms // this.dgvActProduct.AllowUserToAddRows = false; this.dgvActProduct.AllowUserToDeleteRows = false; - dataGridViewCellStyle3.BackColor = System.Drawing.Color.WhiteSmoke; - this.dgvActProduct.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle3; + dataGridViewCellStyle11.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvActProduct.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle11; this.dgvActProduct.AutoRowNumber = true; this.dgvActProduct.BackgroundColor = System.Drawing.Color.White; this.dgvActProduct.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); - dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle4.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.dgvActProduct.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle4; + dataGridViewCellStyle12.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle12.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle12.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle12.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle12.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle12.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle12.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvActProduct.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle12; this.dgvActProduct.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dgvActProduct.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.colCheck, @@ -1268,7 +1293,7 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms this.dgvActProduct.Name = "dgvActProduct"; this.dgvActProduct.ReadOnly = true; this.dgvActProduct.RowTemplate.Height = 23; - this.dgvActProduct.Size = new System.Drawing.Size(1237, 372); + this.dgvActProduct.Size = new System.Drawing.Size(1173, 372); this.dgvActProduct.TabIndex = 187; this.dgvActProduct.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvSelectProduct_CellContentClick); this.dgvActProduct.Scroll += new System.Windows.Forms.ScrollEventHandler(this.dgvSelectProduct_Scroll); @@ -1292,8 +1317,8 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms // // colSupplierName // - dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.colSupplierName.DefaultCellStyle = dataGridViewCellStyle5; + dataGridViewCellStyle13.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.colSupplierName.DefaultCellStyle = dataGridViewCellStyle13; this.colSupplierName.Frozen = true; this.colSupplierName.HeaderText = "店铺名称"; this.colSupplierName.Name = "colSupplierName"; @@ -1348,8 +1373,8 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms // // colProductName // - dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.colProductName.DefaultCellStyle = dataGridViewCellStyle6; + dataGridViewCellStyle14.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.colProductName.DefaultCellStyle = dataGridViewCellStyle14; this.colProductName.HeaderText = "商品标题"; this.colProductName.Name = "colProductName"; this.colProductName.ReadOnly = true; @@ -1376,8 +1401,8 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms // // colUpdateTime // - dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.colUpdateTime.DefaultCellStyle = dataGridViewCellStyle7; + dataGridViewCellStyle15.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.colUpdateTime.DefaultCellStyle = dataGridViewCellStyle15; this.colUpdateTime.FillWeight = 80F; this.colUpdateTime.HeaderText = "上架时间"; this.colUpdateTime.Name = "colUpdateTime"; @@ -1393,8 +1418,8 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms // // colOpResult // - dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.colOpResult.DefaultCellStyle = dataGridViewCellStyle8; + dataGridViewCellStyle16.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.colOpResult.DefaultCellStyle = dataGridViewCellStyle16; this.colOpResult.HeaderText = "操作结果"; this.colOpResult.Name = "colOpResult"; this.colOpResult.ReadOnly = true; @@ -1415,8 +1440,8 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms // this.splitContainer4.Panel2.Controls.Add(this.btnClear); this.splitContainer4.Panel2.Controls.Add(this.panelEx1); - this.splitContainer4.Size = new System.Drawing.Size(1571, 26); - this.splitContainer4.SplitterDistance = 880; + this.splitContainer4.Size = new System.Drawing.Size(1507, 26); + this.splitContainer4.SplitterDistance = 816; this.splitContainer4.TabIndex = 3; // // statusBar @@ -1427,7 +1452,7 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms this.statusBar.Location = new System.Drawing.Point(0, 0); this.statusBar.Margin = new System.Windows.Forms.Padding(0); this.statusBar.Name = "statusBar"; - this.statusBar.Size = new System.Drawing.Size(880, 26); + this.statusBar.Size = new System.Drawing.Size(816, 26); this.statusBar.TabIndex = 2; // // btnClear @@ -1487,7 +1512,7 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms | System.Windows.Forms.AnchorStyles.Right))); this.panel1.Location = new System.Drawing.Point(699, 552); this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(881, 86); + this.panel1.Size = new System.Drawing.Size(838, 86); this.panel1.TabIndex = 189; this.panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint); // @@ -1495,7 +1520,7 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms // this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.BackColor = System.Drawing.Color.White; - this.ClientSize = new System.Drawing.Size(1583, 641); + this.ClientSize = new System.Drawing.Size(1540, 641); this.Controls.Add(this.splitContainer1); this.Controls.Add(this.panel1); this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); @@ -1636,5 +1661,7 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms private System.Windows.Forms.Label label5; private System.Windows.Forms.Label label3; private System.Windows.Forms.TextBox txtSleepTime; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox txtMultiCnt; } } \ No newline at end of file diff --git a/TEMUKJD/PDDForms/ProductForms/ActivityForms/PDDAddActivityForm.cs b/TEMUKJD/PDDForms/ProductForms/ActivityForms/PDDAddActivityForm.cs index 7ce458e..877755b 100644 --- a/TEMUKJD/PDDForms/ProductForms/ActivityForms/PDDAddActivityForm.cs +++ b/TEMUKJD/PDDForms/ProductForms/ActivityForms/PDDAddActivityForm.cs @@ -376,201 +376,266 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms /// /// /// - public string SignActivity(ShopLoginInfo shop, PDDProductUploadParam prodParam, bool sign22347 = true, bool sign20981 = true, bool sign21365 = true, + public string SignActivity(ShopLoginInfo shop, List prodParams, bool sign22347 = true, bool sign20981 = true, bool sign21365 = true, bool sign15996 = true, bool sign23513 = true, bool sign23730 = true, bool sign23456 = true) { string activityErr = ""; + List failList = new List(); // 21365 限量7折100件 // 活动2 if (1 == 1 && sign21365) { - activityErr += SignActivity21365(shop, prodParam); + activityErr = SignActivity21365(shop, prodParams); + var errStr = JsonHelper.SerializeObject(JsonHelper.JObjectParse(activityErr)["fail_list"]); + failList.AddRange(JsonHelper.DeserializeJsonToList(errStr)); } // 20981 长期活动 // 活动1 //放在活动2后面报,否则活动2无法报名 if (1 == 1 && sign20981) { - activityErr += SignActivity20981(shop, prodParam); + activityErr = SignActivity20981(shop, prodParams); + var errStr = JsonHelper.SerializeObject(JsonHelper.JObjectParse(activityErr)["fail_list"]); + failList.AddRange(JsonHelper.DeserializeJsonToList(errStr)); } // 15996 9块9 (价格要求低于29.9元) // 活动3 - if (1 == 1 && sign15996 && !prodParam.skus.Any(s => s.multi_price > 2990)) + if (1 == 2 && sign15996 && !prodParams.FirstOrDefault().skus.Any(s => s.multi_price > 2990)) { - activityErr += SignActivity15996(shop, prodParam); + activityErr = SignActivity15996(shop, prodParams.FirstOrDefault()); + var errStr = JsonHelper.SerializeObject(JsonHelper.JObjectParse(activityErr)["fail_list"]); + failList.AddRange(JsonHelper.DeserializeJsonToList(errStr)); } // 22347 直通车加权 if (1 == 1 && sign22347) { - activityErr += SignActivity22347(shop, prodParam); + activityErr = SignActivity22347(shop, prodParams); + var errStr = JsonHelper.SerializeObject(JsonHelper.JObjectParse(activityErr)["fail_list"]); + failList.AddRange(JsonHelper.DeserializeJsonToList(errStr)); } - // 23513 补贴多人团频道 需要设置营销电话,暂时作废 + // 23513 补贴多人团频道 需要设置营销电话活动图片等(未完成),暂时作废 if (1==2 && sign23513) { - activityErr += SignActivity23513(shop, prodParam); + activityErr = SignActivity23513(shop, prodParams.FirstOrDefault()); } // 超级晚8 单件折扣 if (1 == 1 && sign23730) { - activityErr += SignActivity23730(shop, prodParam); + activityErr = SignActivity23730(shop, prodParams); + var errStr = JsonHelper.SerializeObject(JsonHelper.JObjectParse(activityErr)["fail_list"]); + failList.AddRange(JsonHelper.DeserializeJsonToList(errStr)); } // 月卡会员折扣 if (1 == 1 && sign23456) { - activityErr += SignActivity23456(shop, prodParam); + activityErr = SignActivity23456(shop, prodParams); + var errStr = JsonHelper.SerializeObject(JsonHelper.JObjectParse(activityErr)["fail_list"]); + failList.AddRange(JsonHelper.DeserializeJsonToList(errStr)); } // 23620 临时活动 活动已结束,停止操作 // 活动4 if (1 == 2) { - activityErr += SignActivity23620(shop, prodParam); + activityErr += SignActivity23620(shop, prodParams.FirstOrDefault()); } // 18586 百万爆款 必须上架一天以上的sku才能报名暂时注释 // 活动5 if (1 == 2) { - activityErr += SignActivity18586(shop, prodParam); + activityErr += SignActivity18586(shop, prodParams.FirstOrDefault()); } - return activityErr; + return JsonHelper.SerializeObject(failList); } - string SignActivity21365(ShopLoginInfo shop, PDDProductUploadParam prodParam) + string SignActivity21365(ShopLoginInfo shop, List prodParams) { + PDDActivitySuggestPriceInfo pddActivitiPriceInfo = null; + var prodParamsTmp = JsonHelper.DeserializeJsonToList(JsonHelper.SerializeObject(prodParams)); + List addActivityFailLst = new List(); string activityErr = ""; - var activityRst2 = activity_goods_price_rule(shop, prodParam.goods_id.ParseToString(), 21365, 27); + var activityRst2 = ""; Thread.Sleep(Randomx.GetId(500, 1500)); Thread.Sleep(Randomx.GetId(500, 1500)); Thread.Sleep((moreSleepTime * 1000).ParseToInt()); - for (int i = 0; i < 5 && !activityRst2.Contains("\"success\":true"); i++) - { - activity_goods_price_rule(shop, prodParam.goods_id.ParseToString(), 21365, 27); - Thread.Sleep(Randomx.GetId(1000, 2000)); - Thread.Sleep(Randomx.GetId(1000, 2000)); - Thread.Sleep(Randomx.GetId(1000, 2000)); - Thread.Sleep((moreSleepTime * 1000).ParseToInt()); - } - if (!activityRst2.Contains("\"success\":true")) - { - var error = BaseRegex.GetStringJson(ref activityRst2, "error_msg"); - if (string.IsNullOrEmpty(error)) - error = activityRst2; - activityErr += "\r\n报名错误 365查询失败 " + error; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - return activityErr; - } try { - var jObj = JObject.Parse(activityRst2); - var jStr = JsonHelper.SerializeObject(jObj["result"]); - var pddActivitiPriceInfo = JsonHelper.DeserializeJsonToObject(jStr); - var pddActivitiPriceProd = pddActivitiPriceInfo.enroll_goods_rule_vos.FirstOrDefault(); + while (prodParamsTmp.Count > 0) + { + activityRst2 = ""; + var prodParamsTmpTmp = prodParamsTmp.Take(5).ToList(); + prodParamsTmp.RemoveAll(p => prodParamsTmpTmp.Contains(p)); - if (pddActivitiPriceProd == null) - { - activityErr += "\r\n报名错误 365查询/新建失败 商品未提交成功或不满足参加活动条件"; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - return activityErr; - } - foreach (var activitySkuInfo in pddActivitiPriceProd.enroll_rule_param.enroll_goods_big_sale_price.sku_info_list) - { - if (activitySkuInfo.spec_info_str.Contains("福利款")) + for (int i = 0; i < 3 && !activityRst2.Contains("\"success\":true"); i++) { + activityRst2 = activity_goods_price_rule(shop, string.Join(",", prodParamsTmpTmp.Select(p => p.goods_id.ParseToString()).ToList()), 22365, 27); + if (!activityRst2.Contains("\"success\":true")) + { + Thread.Sleep(Randomx.GetId(1000, 2000)); + Thread.Sleep(Randomx.GetId(1000, 2000)); + Thread.Sleep(Randomx.GetId(1000, 2000)); + Thread.Sleep((moreSleepTime * 1000).ParseToInt()); + } } - var sku = prodParam.skus.FirstOrDefault(sk => string.Join(",", sk.spec.Select(s => s.spec_name)) == activitySkuInfo.spec_info_str); - if (sku != null && sku.multi_price == activitySkuInfo.require_price + 1) - sku.multi_price -= 1; - if (sku == null || sku.multi_price > activitySkuInfo.require_price) + if (!activityRst2.Contains("\"success\":true")) { - activityErr += "\r\n报名错误 365价格低于产品价 " + activitySkuInfo.require_price + " < " + sku.multi_price; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - return activityErr; + var error = BaseRegex.GetStringJson(ref activityRst2, "error_msg"); + if (string.IsNullOrEmpty(error)) + error = activityRst2; + activityErr = "报名错误 365查询失败 " + error; + foreach (var prodParam in prodParams) + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + return "{\"success\":false,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; + } + + var jObj = JObject.Parse(activityRst2); + var jStr = JsonHelper.SerializeObject(jObj["result"]); + if (pddActivitiPriceInfo == null) + pddActivitiPriceInfo = JsonHelper.DeserializeJsonToObject(jStr); + else + { + var pddActivitiPriceInfoTmp = JsonHelper.DeserializeJsonToObject(jStr); + pddActivitiPriceInfo.goods_id_list.AddRange(pddActivitiPriceInfoTmp.goods_id_list); + pddActivitiPriceInfo.enroll_goods_rule_vos.AddRange(pddActivitiPriceInfoTmp.enroll_goods_rule_vos); } } - var quantity = prodParam.skus.Sum(s => s.quantity_delta); PDDActivitySubmitParam actSubmitParam = new PDDActivitySubmitParam(); actSubmitParam.activity_id = pddActivitiPriceInfo.activity_id; actSubmitParam.enroll_source_ctx.enroll_type = 3; actSubmitParam.enroll_source_ctx.scene_full_coverage = "mmsActBatchEnrollV1"; actSubmitParam.enroll_source_ctx.source_type = "MMSActicon"; actSubmitParam.enroll_source_ctx.scene_type = "ActivityCard"; - - var goods_vo_item = new goods_vo_param(); - goods_vo_item.goods_id = prodParam.goods_id; - var skuSamePrice = prodParam.skus.Max(s => s.multi_price); - foreach (var activitySkuInfo in pddActivitiPriceProd.enroll_rule_param.enroll_goods_big_sale_price.sku_info_list) - { - var sku = prodParam.skus.FirstOrDefault(sk => string.Join(",", sk.spec.Select(s => s.spec_name)) == activitySkuInfo.spec_info_str); - if (sku == null) - { - activityErr += "\r\n报名错误 365价格sku未找到"; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - return activityErr; - } - - create_sku_vo_param sku_vo_item = new create_sku_vo_param(); - sku_vo_item.sku_id = activitySkuInfo.sku_id; - sku_vo_item.sku_activity_price = sku.multi_price; - sku_vo_item.sku_front_ctx_vo = new sku_front_ctx_vo_param() - { - filling_sku_price = sku.multi_price, - gear_rule = activitySkuInfo.gear_rule, - require_price = sku.multi_price, - filling_sku_price_gear_rule = activitySkuInfo.filling_sku_price_gear_rule, - }; - goods_vo_item.create_activity_price_vo.create_sku_vos.Add(sku_vo_item); - } - goods_vo_item.create_activity_price_vo.create_quantity_vo.goods_activity_quantity = - Math.Min(quantity.ParseToInt(), 300); // 7折活动库存上限300 - actSubmitParam.goods_volist.Add(goods_vo_item); actSubmitParam.create_protocol_vo.need_create_cost_template = true; - var addActivityRst = add_activity_goods(shop, actSubmitParam, prodParam.goods_id.ParseToString(), 21365, 27); - for (int i = 0; i < 3 && addActivityRst.Contains("频繁"); i++) + foreach (var prodParam in prodParams) + { + var pddActivitiPriceProd = pddActivitiPriceInfo.enroll_goods_rule_vos.FirstOrDefault(g => g.goods_id == prodParam.goods_id); + if (pddActivitiPriceProd == null) + { + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = "报名错误 365查询/新建失败 商品未提交成功或不满足参加活动条件" }); + continue; + } + + foreach (var activitySkuInfo in pddActivitiPriceProd.enroll_rule_param.enroll_goods_big_sale_price.sku_info_list) + { + if (activitySkuInfo.spec_info_str.Contains("福利款")) + { + } + var sku = prodParam.skus.FirstOrDefault(sk => string.Join(",", sk.spec.Select(s => s.spec_name)) == activitySkuInfo.spec_info_str); + if (sku != null && sku.multi_price == activitySkuInfo.require_price + 1) + sku.multi_price -= 1; + if (sku == null || sku.multi_price > activitySkuInfo.require_price) + { + activityErr = "报名错误 365价格低于产品价 " + activitySkuInfo.require_price + " < " + sku.multi_price; + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + break; + } + } + if (addActivityFailLst.Any(aa => aa.goods_id == prodParam.goods_id)) + continue; + + var quantity = prodParam.skus.Sum(s => s.quantity_delta); + var goods_vo_item = new goods_vo_param(); + goods_vo_item.goods_id = prodParam.goods_id; + var skuSamePrice = prodParam.skus.Max(s => s.multi_price); + foreach (var activitySkuInfo in pddActivitiPriceProd.enroll_rule_param.enroll_goods_big_sale_price.sku_info_list) + { + var sku = prodParam.skus.FirstOrDefault(sk => string.Join(",", sk.spec.Select(s => s.spec_name)) == activitySkuInfo.spec_info_str); + if (sku == null) + { + activityErr = "报名错误 365价格sku未找到"; + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + break; + } + + create_sku_vo_param sku_vo_item = new create_sku_vo_param(); + sku_vo_item.sku_id = activitySkuInfo.sku_id; + sku_vo_item.sku_activity_price = sku.multi_price; + sku_vo_item.sku_front_ctx_vo = new sku_front_ctx_vo_param() + { + filling_sku_price = sku.multi_price, + gear_rule = activitySkuInfo.gear_rule, + require_price = sku.multi_price, + filling_sku_price_gear_rule = activitySkuInfo.filling_sku_price_gear_rule, + }; + goods_vo_item.create_activity_price_vo.create_sku_vos.Add(sku_vo_item); + } + if (addActivityFailLst.Any(aa => aa.goods_id == prodParam.goods_id)) + continue; + + goods_vo_item.create_activity_price_vo.create_quantity_vo.goods_activity_quantity = + Math.Min(quantity.ParseToInt(), 300); // 7折活动库存上限300 + + actSubmitParam.goods_volist.Add(goods_vo_item); + } + + var addActivityRst = ""; + for (int i = 0; i < 3 && (addActivityRst.IsNullOrEmpty() || addActivityRst.Contains("频繁")); i++) { Thread.Sleep(Randomx.GetId(3000, 7000)); - addActivityRst = add_activity_goods(shop, actSubmitParam, prodParam.goods_id.ParseToString(), 21365, 27); + addActivityRst = add_activity_goods(shop, actSubmitParam, "0", 21365, 27); } - var err_msg = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); - if (!addActivityRst.Contains("\"success\":true") || !string.IsNullOrEmpty(err_msg)) + if (!addActivityRst.Contains("\"success\":true")) { var error = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); if (string.IsNullOrEmpty(error)) error = addActivityRst; - activityErr += "\r\n报名错误 365新建失败 " + error; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - return activityErr; + activityErr = "报名错误 365新建失败 " + error; + foreach (var prodParam in prodParams) + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + return "{\"success\":false,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; + } + var err_msg = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); + if (!string.IsNullOrEmpty(err_msg) && addActivityRst.Contains("enroll_fail_goods_list")) + { + var failStr = JsonHelper.SerializeObject(JsonHelper.JObjectParse(addActivityRst)["result"]["enroll_fail_goods_list"]); + var failLstTmp = JsonHelper.DeserializeJsonToList(failStr); + foreach (var failTmp in failLstTmp) + { + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = failTmp.goods_id, error_msg = "报名错误 365新建失败 " + failTmp.error_msg }); + } + } + if (addActivityRst.Contains("enroll_success_goods_list")) + { + var successStr = JsonHelper.SerializeObject(JsonHelper.JObjectParse(addActivityRst)["result"]["enroll_success_goods_list"]); + var successLstTmp = JsonHelper.DeserializeJsonToList(successStr); + foreach (var successTmp in successLstTmp) + { + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = successTmp.goods_id, error_msg = "365报名成功" }); + } } } catch (Exception ex) { - activityErr += "\r\n报名错误 365查询/新建失败 " + ex.Message; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - return activityErr; + activityErr = "报名错误 365查询/新建失败 " + ex.Message; + foreach (var prodParam in prodParams) + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + return "{\"success\":false,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; } - activityErr = "\r\n365报名成功"; - return activityErr; + activityErr = "365报名成功"; + //foreach(var prodParam in prodParams) + //{ + // if (!addActivityFailLst.Any(aa => aa.goods_id == prodParam.goods_id)) + // addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + //} + return "{\"success\":true,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; } - string CheckActivity20981(ShopLoginInfo shop, PDDProductUploadParam prodParam) + string CheckActivity20981(ShopLoginInfo shop, List prodParams) { + List addActivityFailLst = new List(); string activityErr = ""; - var activityRst1 = activity_goods_info(shop, prodParam.goods_id.ParseToString(), "20981"); + var activityRst1 = "频繁"; Thread.Sleep(Randomx.GetId(500, 1500)); Thread.Sleep((moreSleepTime * 1000).ParseToInt()); - for (int i = 0; i < 5 && !activityRst1.Contains("\"success\":true"); i++) + for (int i = 0; i < 5 && activityRst1.Contains("频繁"); i++) { - activityRst1 = activity_goods_info(shop, prodParam.goods_id.ParseToString(), "20981"); + activityRst1 = activity_goods_info(shop, prodParams.Select(p => p.goods_id.ParseToString()).ToList(), "20981"); + //activityRst1 = activity_goods_price_rule(shop, string.Join(",", prodParams.Select(p => p.goods_id.ParseToString()).ToList()), 20981, 27); Thread.Sleep(Randomx.GetId(1000, 2000)); Thread.Sleep((moreSleepTime * 1000).ParseToInt()); } @@ -581,110 +646,95 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms var error = BaseRegex.GetStringJson(ref activityRst1, "error_msg"); if (string.IsNullOrEmpty(error)) error = activityRst1; - activityErr += "校验失败 981查询失败 " + error; - return activityErr; + activityErr = "校验失败 活动查询失败 " + error.Replace("\"", """); + foreach (var prodParam in prodParams) + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + return "{\"success\":false,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; } try { var jObj = JObject.Parse(activityRst1); var jStr = JsonHelper.SerializeObject(jObj["result"]["result"]); - var pddActivitiInfo = (JsonHelper.DeserializeJsonToObject(jStr)?.theme_activity_quick_enroll_goods_render_form_list).FirstOrDefault(); + var queryActivityInfoRstLst = (JsonHelper.DeserializeJsonToObject(jStr)?.theme_activity_quick_enroll_goods_render_form_list).ToList(); + if (queryActivityInfoRstLst == null) + queryActivityInfoRstLst = new List(); - if (pddActivitiInfo == null) + foreach (var prodParam in prodParams) { - activityErr += "校验失败 981查询/新建失败 商品未提交成功或不满足参加活动条件"; - return activityErr; - } - foreach (var activitySku in pddActivitiInfo.activity_price_render.sku_activity_price_render_dtolist) - { - var sku = prodParam.skus.FirstOrDefault(sk => string.Join(",", sk.spec.Select(s => s.spec_name)) == activitySku.sku_name); - if (sku == null) + var pddActivitiInfo = queryActivityInfoRstLst.FirstOrDefault(act => act.goods_id == prodParam.goods_id); + if (pddActivitiInfo == null) { - activityErr += "校验失败 981sku丢失 " + activitySku.sku_name; - return activityErr; + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = "校验失败 981查询/新建失败 商品未提交成功或不满足参加活动条件" }); + continue; } - //if (sku.multi_price > activitySku.suggest_price && sku.multi_price == activitySku.suggest_price + 1) - //{ - // sku.multi_price = activitySku.suggest_price + 1; - //} - if (sku.multi_price > activitySku.suggest_price) + foreach (var activitySku in pddActivitiInfo.activity_price_render.sku_activity_price_render_dtolist) { - // 此处临时用sku69_code记录一下需要改动库存的sku,库存为0的也记录后面再处理 - //if (sku.quantity_delta > 0) - sku.sku69_code = "yes"; - sku.multi_price = activitySku.suggest_price; + var sku = prodParam.skus.FirstOrDefault(sk => string.Join(",", sk.spec.Select(s => s.spec_name)) == activitySku.sku_name); + if (sku == null) + { + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = "校验失败 981sku丢失 " + activitySku.sku_name }); + break; + } + if (sku.multi_price > activitySku.suggest_price) + { + // 此处临时用sku69_code记录一下需要改动库存的sku,库存为0的也记录后面再处理 + sku.sku69_code = "yes"; + sku.multi_price = activitySku.suggest_price; + } + } + if (prodParam.skus.All(s => s.sku69_code == "yes")) + { + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = "校验失败 所有活动报价均低于产品期望价格" }); } - } - if (prodParam.skus.All(s => s.sku69_code == "yes")) - { - activityErr += "校验失败 所有活动报价均低于产品期望价格"; - return activityErr; } } catch (Exception ex) { - activityErr += "校验失败 981查询/新建失败 解析错误 " + ex.Message; - return activityErr; + activityErr = "校验失败 活动查询/新建失败 解析错误 " + ex.Message; + foreach (var prodParam in prodParams) + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + return "{\"success\":false,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; } - activityErr = "981校验成功"; - return activityErr; + activityErr = "活动校验成功"; + return "{\"success\":true,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; } - string SignActivity20981(ShopLoginInfo shop, PDDProductUploadParam prodParam) + string SignActivity20981(ShopLoginInfo shop, List prodParams) { + List addActivityFailLst = new List(); string activityErr = ""; - var activityRst1 = activity_goods_info(shop, prodParam.goods_id.ParseToString(), "20981"); + var activityRst1 = "频繁"; Thread.Sleep(Randomx.GetId(500, 1500)); Thread.Sleep((moreSleepTime * 1000).ParseToInt()); - for (int i = 0; i < 5 && !activityRst1.Contains("\"success\":true"); i++) + for (int i = 0; i < 5 && activityRst1.Contains("频繁"); i++) { - activityRst1 = activity_goods_info(shop, prodParam.goods_id.ParseToString(), "20981"); + activityRst1 = activity_goods_info(shop, prodParams.Select(p => p.goods_id.ParseToString()).ToList(), "20981"); + //activityRst1 = activity_goods_price_rule(shop, string.Join(",", prodParams.Select(p => p.goods_id.ParseToString()).ToList()), 20981, 27); Thread.Sleep(Randomx.GetId(1000, 2000)); Thread.Sleep((moreSleepTime * 1000).ParseToInt()); } if (!activityRst1.Contains("\"success\":true")) { + PDDShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); + var error = BaseRegex.GetStringJson(ref activityRst1, "error_msg"); if (string.IsNullOrEmpty(error)) error = activityRst1; - activityErr += "\r\n报名错误 981查询失败 " + error; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - //goto restoreSkuImg1; - return activityErr; + activityErr = "报名错误 981查询失败 " + error.Replace("\"", """); + foreach(var prodParam in prodParams) + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + return "{\"success\":false,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; } try { var jObj = JObject.Parse(activityRst1); var jStr = JsonHelper.SerializeObject(jObj["result"]["result"]); - var pddActivitiInfo = (JsonHelper.DeserializeJsonToObject(jStr)?.theme_activity_quick_enroll_goods_render_form_list).FirstOrDefault(); - - if (pddActivitiInfo == null) - { - activityErr += "\r\n报名错误 981查询/新建失败 商品未提交成功或不满足参加活动条件"; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - //goto restoreSkuImg1; - return activityErr; - } - foreach (var activitySku in pddActivitiInfo.activity_price_render.sku_activity_price_render_dtolist) - { - //var sku = prodParam.skus.FirstOrDefault(s => s.sku_id == activitySku.sku_id); - var sku = prodParam.skus.FirstOrDefault(sk => string.Join(",", sk.spec.Select(s => s.spec_name)) == activitySku.sku_name); - if (sku != null && sku.multi_price == activitySku.suggest_price + 1) - sku.multi_price -= 1; - if (sku == null || sku.multi_price > activitySku.suggest_price) - { - activityErr += "\r\n报名错误 981价格低于产品价 " + activitySku.suggest_price + " < " + sku.multi_price; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - //goto restoreSkuImg1; - return activityErr; - } - } + var queryActivityInfoRstLst = (JsonHelper.DeserializeJsonToObject(jStr)?.theme_activity_quick_enroll_goods_render_form_list).ToList(); + if (queryActivityInfoRstLst == null) + queryActivityInfoRstLst = new List(); PDDActivitySubmitParam actSubmitParam = new PDDActivitySubmitParam(); - actSubmitParam.activity_id = pddActivitiInfo.activity_id; + actSubmitParam.activity_id = 20981; actSubmitParam.enroll_source_ctx.enroll_type = 34; //入口1 //actSubmitParam.enroll_source_ctx.enroll_type = 3; //入口2 actSubmitParam.enroll_source_ctx.scene_full_coverage = "mmsActQuickEnrollMultiActivityRealTableV1"; //入口1 @@ -693,83 +743,134 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms //actSubmitParam.enroll_source_ctx.source_type = "MMSActicon"; //入口2 actSubmitParam.enroll_source_ctx.scene_type = null; //入口1 //actSubmitParam.enroll_source_ctx.scene_type = "ActivityCard"; //入口2 - - var goods_vo_item = new goods_vo_param(); - goods_vo_item.goods_id = prodParam.goods_id; - var skuSamePrice = prodParam.skus.Max(s => s.multi_price); - foreach (var activitySku in pddActivitiInfo.activity_price_render.sku_activity_price_render_dtolist) - { - //var sku = prodParam.skus.FirstOrDefault(s => s.sku_id == activitySku.sku_id); - var sku = prodParam.skus.FirstOrDefault(sk => string.Join(",", sk.spec.Select(s => s.spec_name)) == activitySku.sku_name); - if (sku == null) - { - activityErr += "\r\n报名错误 981价格sku未找到"; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - //goto restoreSkuImg1; - return activityErr; - } - - create_sku_vo_param sku_vo_item = new create_sku_vo_param(); - sku_vo_item.sku_id = activitySku.sku_id; - sku_vo_item.sku_activity_price = sku.multi_price; //skuSamePrice; //sku.multi_price; //activitySku.suggest_price; - sku_vo_item.sku_front_ctx_vo = new sku_front_ctx_vo_param() - { - filling_sku_price = sku.multi_price, //skuSamePrice, //sku.multi_price, //activitySku.suggest_price, - gear_rule = activitySku.gear_rule, - require_price = sku.multi_price, //skuSamePrice, //sku.multi_price, //activitySku.suggest_price, - }; - goods_vo_item.create_activity_price_vo.create_sku_vos.Add(sku_vo_item); - } - actSubmitParam.goods_volist.Add(goods_vo_item); actSubmitParam.create_protocol_vo.need_create_cost_template = true; - if (pddActivitiInfo.need_goods_activity_price == true) - actSubmitParam.goods_volist.FirstOrDefault().view_confirmed_goods_protocol_vo.confirm_hit_cut_price = true; - - //var addActivityRst = add_activity_goods(shop, actSubmitParam, prodParam.goods_id.ParseToString(), 20981, 0); - var addActivityRst = add_activity_goods(shop, actSubmitParam, prodParam.goods_id.ParseToString(), 20981, 27); - var err_msg = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); - if (err_msg.ParseToString().Contains("报名该活动需要签署降价补差协议,立即前往链接签署")) + foreach (var prodParam in prodParams) { - Invoke(new Action(() => + var pddActivitiInfo = queryActivityInfoRstLst.FirstOrDefault(act => act.goods_id == prodParam.goods_id); + if (pddActivitiInfo == null) { - PDDShopLoginForm loginForm = new PDDShopLoginForm(shop); - loginForm.openType = EnumOpenType.manage; - loginForm.InitUrl = err_msg.Substring(err_msg.IndexOf("https://")); //"https://mms.pinduoduo.com/mallcenter/signProtocol/21"; - loginForm.ShowDialog(); - })); - addActivityRst = add_activity_goods(shop, actSubmitParam, prodParam.goods_id.ParseToString(), 20981, 27); - err_msg = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = "报名错误 981查询/新建失败 商品未提交成功或不满足参加活动条件" }); + continue; + } + foreach (var activitySku in pddActivitiInfo.activity_price_render.sku_activity_price_render_dtolist) + { + //var sku = prodParam.skus.FirstOrDefault(s => s.sku_id == activitySku.sku_id); + var sku = prodParam.skus.FirstOrDefault(sk => string.Join(",", sk.spec.Select(s => s.spec_name)) == activitySku.sku_name); + if (sku != null && sku.multi_price == activitySku.suggest_price + 1) + sku.multi_price -= 1; + if (sku == null || sku.multi_price > activitySku.suggest_price) + { + activityErr = "报名错误 981价格低于产品价 " + activitySku.suggest_price + " < " + sku.multi_price; + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + break; + } + } + if (addActivityFailLst.Any(aa => aa.goods_id == prodParam.goods_id)) + continue; + + var goods_vo_item = new goods_vo_param(); + goods_vo_item.goods_id = prodParam.goods_id; + var skuSamePrice = prodParam.skus.Max(s => s.multi_price); + foreach (var activitySku in pddActivitiInfo.activity_price_render.sku_activity_price_render_dtolist) + { + //var sku = prodParam.skus.FirstOrDefault(s => s.sku_id == activitySku.sku_id); + var sku = prodParam.skus.FirstOrDefault(sk => string.Join(",", sk.spec.Select(s => s.spec_name)) == activitySku.sku_name); + if (sku == null) + { + activityErr = "报名错误 981价格sku未找到"; + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + break; + } + + create_sku_vo_param sku_vo_item = new create_sku_vo_param(); + sku_vo_item.sku_id = activitySku.sku_id; + sku_vo_item.sku_activity_price = sku.multi_price; //skuSamePrice; //sku.multi_price; //activitySku.suggest_price; + sku_vo_item.sku_front_ctx_vo = new sku_front_ctx_vo_param() + { + filling_sku_price = sku.multi_price, //skuSamePrice, //sku.multi_price, //activitySku.suggest_price, + gear_rule = activitySku.gear_rule, + require_price = sku.multi_price, //skuSamePrice, //sku.multi_price, //activitySku.suggest_price, + }; + goods_vo_item.create_activity_price_vo.create_sku_vos.Add(sku_vo_item); + } + if (addActivityFailLst.Any(aa => aa.goods_id == prodParam.goods_id)) + continue; + + if (pddActivitiInfo.need_goods_activity_price == true) + goods_vo_item.view_confirmed_goods_protocol_vo.confirm_hit_cut_price = true; + + actSubmitParam.goods_volist.Add(goods_vo_item); } - for (int i = 0; i < 3 && (!addActivityRst.Contains("\"success\":true") || !string.IsNullOrEmpty(err_msg)); i++) + if (actSubmitParam.goods_volist.Count == 0) { - Thread.Sleep(Randomx.GetId(2000, 5000)); - addActivityRst = add_activity_goods(shop, actSubmitParam, prodParam.goods_id.ParseToString(), 20981, 27); + return "{\"success\":true,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; } - err_msg = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); - if (!addActivityRst.Contains("\"success\":true") || !string.IsNullOrEmpty(err_msg)) + var addActivityRst = ""; + var err_msg = ""; + for (int i = 0; i < 3 && !addActivityRst.Contains("\"success\":true"); i++) + { + err_msg = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); + if (err_msg.ParseToString().Contains("报名该活动需要签署降价补差协议,立即前往链接签署")) + { + Invoke(new Action(() => + { + PDDShopLoginForm loginForm = new PDDShopLoginForm(shop); + loginForm.openType = EnumOpenType.manage; + loginForm.InitUrl = err_msg.Substring(err_msg.IndexOf("https://")); //"https://mms.pinduoduo.com/mallcenter/signProtocol/21"; + loginForm.ShowDialog(); + })); + } + + Thread.Sleep(Randomx.GetId(2000, 5000)); + addActivityRst = add_activity_goods(shop, actSubmitParam, "0", 20981, 27); + //{"success":true,"error_code":1000000,"error_msg":null,"result":{"enroll_fail_goods_list":[{"goods_id":935055850626,"need_retry":false,"error_code":30001,"error_msg":"商品的建议价有更新,您提报的价格高于建议价,系统已刷新建议价,请重新提报。"},{"goods_id":939857649372,"need_retry":false,"error_code":30001,"error_msg":"商品的建议价有更新,您提报的价格高于建议价,系统已刷新建议价,请重新提报。"},{"goods_id":933564880168,"need_retry":false,"error_code":30001,"error_msg":"商品的建议价有更新,您提报的价格高于建议价,系统已刷新建议价,请重新提报。"}],"enroll_success_goods_list":[{"goods_id":935055877956,"activity_goods_id":11278050703428},{"goods_id":935055563227,"activity_goods_id":11278042020059}]}} + } + if (!addActivityRst.Contains("\"success\":true")) { var error = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); if (string.IsNullOrEmpty(error)) error = addActivityRst; - activityErr += "\r\n报名错误 981新建失败 " + error; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - //goto restoreSkuImg1; - return activityErr; + activityErr = "报名错误 981新建失败 " + error; + foreach (var prodParam in prodParams) + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + return "{\"success\":false,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; } - } // 活动1 + // 分析每个商品的错误 + err_msg = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); + if (!string.IsNullOrEmpty(err_msg) && addActivityRst.Contains("enroll_fail_goods_list")) + { + var failStr = JsonHelper.SerializeObject(JsonHelper.JObjectParse(addActivityRst)["result"]["enroll_fail_goods_list"]); + var failLstTmp = JsonHelper.DeserializeJsonToList(failStr); + foreach(var failTmp in failLstTmp) + { + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = failTmp.goods_id, error_msg = "报名错误 981新建失败 " + failTmp.error_msg }); + } + } + if (addActivityRst.Contains("enroll_success_goods_list")) + { + var successStr = JsonHelper.SerializeObject(JsonHelper.JObjectParse(addActivityRst)["result"]["enroll_success_goods_list"]); + var successLstTmp = JsonHelper.DeserializeJsonToList(successStr); + foreach (var successTmp in successLstTmp) + { + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = successTmp.goods_id, error_msg = "981报名成功" }); + } + } + } catch (Exception ex) { - activityErr += "\r\n报名错误 981查询/新建失败 " + ex.Message; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - //goto restoreSkuImg1; - return activityErr; + activityErr = "报名错误 981查询/新建失败 " + ex.Message; + foreach (var prodParam in prodParams) + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + return "{\"success\":false,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; } - activityErr = "\r\n981报名成功"; - return activityErr; + activityErr = "981报名成功"; + //foreach (var prodParam in prodParams) + //{ + // if (!addActivityFailLst.Any(aa => aa.goods_id == prodParam.goods_id)) + // addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + //} + return "{\"success\":true,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; } string SignActivity15996(ShopLoginInfo shop, PDDProductUploadParam prodParam) @@ -876,58 +977,55 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms return activityErr; } - string SignActivity22347(ShopLoginInfo shop, PDDProductUploadParam prodParam) + string SignActivity22347(ShopLoginInfo shop, List prodParams) { + PDDActivitySuggestPriceInfo pddActivitiPriceInfo = null; + var prodParamsTmp = JsonHelper.DeserializeJsonToList(JsonHelper.SerializeObject(prodParams)); + List addActivityFailLst = new List(); string activityErr = ""; - var activityRst2 = activity_goods_price_rule(shop, prodParam.goods_id.ParseToString(), 22347, 27); + var activityRst2 = ""; Thread.Sleep(Randomx.GetId(500, 1500)); Thread.Sleep(Randomx.GetId(500, 1500)); Thread.Sleep((moreSleepTime * 1000).ParseToInt()); - if (!activityRst2.Contains("\"success\":true")) - { - activity_goods_price_rule(shop, prodParam.goods_id.ParseToString(), 22347, 27); - Thread.Sleep(Randomx.GetId(1000, 2000)); - Thread.Sleep(Randomx.GetId(1000, 2000)); - Thread.Sleep(Randomx.GetId(1000, 2000)); - Thread.Sleep((moreSleepTime * 1000).ParseToInt()); - } - if (!activityRst2.Contains("\"success\":true")) - { - var error = BaseRegex.GetStringJson(ref activityRst2, "error_msg"); - if (string.IsNullOrEmpty(error)) - error = activityRst2; - activityErr += "\r\n报名错误 347查询失败 " + error; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - //goto restoreSkuImg1; - return activityErr; - } try { - var jObj = JObject.Parse(activityRst2); - var jStr = JsonHelper.SerializeObject(jObj["result"]); - var pddActivitiPriceInfo = JsonHelper.DeserializeJsonToObject(jStr); - var pddActivitiPriceProd = pddActivitiPriceInfo.enroll_goods_rule_vos.FirstOrDefault(); + while (prodParamsTmp.Count > 0) + { + activityRst2 = ""; + var prodParamsTmpTmp = prodParamsTmp.Take(5).ToList(); + prodParamsTmp.RemoveAll(p => prodParamsTmpTmp.Contains(p)); - if (pddActivitiPriceProd == null) - { - activityErr += "\r\n报名错误 347查询/新建失败 商品未提交成功或不满足参加活动条件"; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - //goto restoreSkuImg1; - return activityErr; - } - foreach (var activitySkuInfo in pddActivitiPriceProd.enroll_rule_param.enroll_goods_big_sale_price.sku_info_list) - { - //var sku = prodParam.skus.FirstOrDefault(s => s.sku_id == activitySku.sku_id); - var sku = prodParam.skus.FirstOrDefault(sk => string.Join(",", sk.spec.Select(s => s.spec_name)) == activitySkuInfo.spec_info_str); - if (sku == null || sku.multi_price > activitySkuInfo.require_price) + for (int i = 0; i< 3 && !activityRst2.Contains("\"success\":true"); i++) { - activityErr += "\r\n报名错误 347价格低于产品价 " + activitySkuInfo.require_price + " < " + sku.multi_price; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - //goto restoreSkuImg1; - return activityErr; + activityRst2 = activity_goods_price_rule(shop, string.Join(",", prodParamsTmpTmp.Select(p => p.goods_id.ParseToString()).ToList()), 22347, 27); + if (!activityRst2.Contains("\"success\":true")) + { + Thread.Sleep(Randomx.GetId(1000, 2000)); + Thread.Sleep(Randomx.GetId(1000, 2000)); + Thread.Sleep(Randomx.GetId(1000, 2000)); + Thread.Sleep((moreSleepTime * 1000).ParseToInt()); + } + } + if (!activityRst2.Contains("\"success\":true")) + { + var error = BaseRegex.GetStringJson(ref activityRst2, "error_msg"); + if (string.IsNullOrEmpty(error)) + error = activityRst2; + activityErr = "报名错误 347查询失败 " + error; + foreach (var prodParam in prodParams) + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + return "{\"success\":false,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; + } + + var jObj = JObject.Parse(activityRst2); + var jStr = JsonHelper.SerializeObject(jObj["result"]); + if (pddActivitiPriceInfo == null) + pddActivitiPriceInfo = JsonHelper.DeserializeJsonToObject(jStr); + else + { + var pddActivitiPriceInfoTmp = JsonHelper.DeserializeJsonToObject(jStr); + pddActivitiPriceInfo.goods_id_list.AddRange(pddActivitiPriceInfoTmp.goods_id_list); + pddActivitiPriceInfo.enroll_goods_rule_vos.AddRange(pddActivitiPriceInfoTmp.enroll_goods_rule_vos); } } @@ -937,83 +1035,129 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms actSubmitParam.enroll_source_ctx.scene_full_coverage = "mmsActBatchEnrollV1"; actSubmitParam.enroll_source_ctx.source_type = null; actSubmitParam.enroll_source_ctx.scene_type = null; - - var goods_vo_item = new goods_vo_param(); - goods_vo_item.goods_id = prodParam.goods_id; - var skuSamePrice = prodParam.skus.Max(s => s.multi_price); - foreach (var activitySkuInfo in pddActivitiPriceProd.enroll_rule_param.enroll_goods_big_sale_price.sku_info_list) - { - //var sku = prodParam.skus.FirstOrDefault(s => s.sku_id == activitySku.sku_id); - var sku = prodParam.skus.FirstOrDefault(sk => string.Join(",", sk.spec.Select(s => s.spec_name)) == activitySkuInfo.spec_info_str); - if (sku == null) - { - activityErr += "\r\n报名错误 347价格sku未找到"; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - //goto restoreSkuImg1; - return activityErr; - } - - create_sku_vo_param sku_vo_item = new create_sku_vo_param(); - sku_vo_item.sku_id = activitySkuInfo.sku_id; - sku_vo_item.sku_activity_price = sku.multi_price; //skuSamePrice; //sku.multi_price; //activitySku.suggest_price; - sku_vo_item.sku_front_ctx_vo = new sku_front_ctx_vo_param() - { - filling_sku_price = sku.multi_price, - gear_rule = activitySkuInfo.gear_rule, - require_price = sku.multi_price, - filling_sku_price_gear_rule = activitySkuInfo.filling_sku_price_gear_rule, - }; - goods_vo_item.create_activity_price_vo.create_sku_vos.Add(sku_vo_item); - } - actSubmitParam.goods_volist.Add(goods_vo_item); actSubmitParam.create_protocol_vo.need_create_cost_template = true; - //if (pddActivitiInfo.need_goods_activity_price == true) - actSubmitParam.goods_volist.FirstOrDefault().view_confirmed_goods_protocol_vo.confirm_hit_cut_price = true; - - var addActivityRst = add_activity_goods(shop, actSubmitParam, prodParam.goods_id.ParseToString(), 22347, 27); - var err_msg = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); - if (err_msg.ParseToString().Contains("报名该活动需要签署降价补差协议,立即前往链接签署")) + foreach (var prodParam in prodParams) { - Invoke(new Action(() => + var pddActivitiPriceProd = pddActivitiPriceInfo.enroll_goods_rule_vos.FirstOrDefault(p => p.goods_id == prodParam.goods_id); + if (pddActivitiPriceProd == null) { - PDDShopLoginForm loginForm = new PDDShopLoginForm(shop); - loginForm.openType = EnumOpenType.manage; - loginForm.InitUrl = err_msg.Substring(err_msg.IndexOf("https://")); //"https://mms.pinduoduo.com/mallcenter/signProtocol/21"; - loginForm.ShowDialog(); - })); - addActivityRst = add_activity_goods(shop, actSubmitParam, prodParam.goods_id.ParseToString(), 22347, 27); - err_msg = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); + activityErr = "报名错误 347查询/新建失败 商品未提交成功或不满足参加活动条件"; + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + continue; + } + + foreach (var activitySkuInfo in pddActivitiPriceProd.enroll_rule_param.enroll_goods_big_sale_price.sku_info_list) + { + //var sku = prodParam.skus.FirstOrDefault(s => s.sku_id == activitySku.sku_id); + var sku = prodParam.skus.FirstOrDefault(sk => string.Join(",", sk.spec.Select(s => s.spec_name)) == activitySkuInfo.spec_info_str); + if (sku == null || sku.multi_price > activitySkuInfo.require_price) + { + activityErr = "报名错误 347价格低于产品价 " + activitySkuInfo.require_price + " < " + sku.multi_price; + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + break; + } + } + if (addActivityFailLst.Any(aa => aa.goods_id == prodParam.goods_id)) + continue; + + var goods_vo_item = new goods_vo_param(); + goods_vo_item.goods_id = prodParam.goods_id; + var skuSamePrice = prodParam.skus.Max(s => s.multi_price); + foreach (var activitySkuInfo in pddActivitiPriceProd.enroll_rule_param.enroll_goods_big_sale_price.sku_info_list) + { + //var sku = prodParam.skus.FirstOrDefault(s => s.sku_id == activitySku.sku_id); + var sku = prodParam.skus.FirstOrDefault(sk => string.Join(",", sk.spec.Select(s => s.spec_name)) == activitySkuInfo.spec_info_str); + if (sku == null) + { + activityErr = "报名错误 347价格sku未找到"; + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + break; + } + + create_sku_vo_param sku_vo_item = new create_sku_vo_param(); + sku_vo_item.sku_id = activitySkuInfo.sku_id; + sku_vo_item.sku_activity_price = sku.multi_price; //skuSamePrice; //sku.multi_price; //activitySku.suggest_price; + sku_vo_item.sku_front_ctx_vo = new sku_front_ctx_vo_param() + { + filling_sku_price = sku.multi_price, + gear_rule = activitySkuInfo.gear_rule, + require_price = sku.multi_price, + filling_sku_price_gear_rule = activitySkuInfo.filling_sku_price_gear_rule, + }; + goods_vo_item.create_activity_price_vo.create_sku_vos.Add(sku_vo_item); + } + if (addActivityFailLst.Any(aa => aa.goods_id == prodParam.goods_id)) + continue; + + //if (pddActivitiInfo.need_goods_activity_price == true) + goods_vo_item.view_confirmed_goods_protocol_vo.confirm_hit_cut_price = true; + + actSubmitParam.goods_volist.Add(goods_vo_item); } + + var addActivityRst = ""; + var err_msg = ""; for (int i = 0; i < 3 && !addActivityRst.Contains("\"success\":true"); i++) { + err_msg = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); + if (err_msg.ParseToString().Contains("报名该活动需要签署降价补差协议,立即前往链接签署")) + { + Invoke(new Action(() => + { + PDDShopLoginForm loginForm = new PDDShopLoginForm(shop); + loginForm.openType = EnumOpenType.manage; + loginForm.InitUrl = err_msg.Substring(err_msg.IndexOf("https://")); //"https://mms.pinduoduo.com/mallcenter/signProtocol/21"; + loginForm.ShowDialog(); + })); + } Thread.Sleep(Randomx.GetId(2000, 5000)); - addActivityRst = add_activity_goods(shop, actSubmitParam, prodParam.goods_id.ParseToString(), 22347, 27); + addActivityRst = add_activity_goods(shop, actSubmitParam, "0", 22347, 27); } - err_msg = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); - if (!addActivityRst.Contains("\"success\":true") || !string.IsNullOrEmpty(err_msg)) + if (!addActivityRst.Contains("\"success\":true")) { var error = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); if (string.IsNullOrEmpty(error)) error = addActivityRst; - activityErr += "\r\n报名错误 347新建失败 " + error; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - //goto restoreSkuImg1; - return activityErr; + activityErr = "报名错误 347新建失败 " + error; + foreach (var prodParam in prodParams) + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + return "{\"success\":false,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; } - } // 活动1 + err_msg = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); + if (!string.IsNullOrEmpty(err_msg) && addActivityRst.Contains("enroll_fail_goods_list")) + { + var failStr = JsonHelper.SerializeObject(JsonHelper.JObjectParse(addActivityRst)["result"]["enroll_fail_goods_list"]); + var failLstTmp = JsonHelper.DeserializeJsonToList(failStr); + foreach (var failTmp in failLstTmp) + { + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = failTmp.goods_id, error_msg = "报名错误 347新建失败 " + failTmp.error_msg }); + } + } + if (addActivityRst.Contains("enroll_success_goods_list")) + { + var successStr = JsonHelper.SerializeObject(JsonHelper.JObjectParse(addActivityRst)["result"]["enroll_success_goods_list"]); + var successLstTmp = JsonHelper.DeserializeJsonToList(successStr); + foreach (var successTmp in successLstTmp) + { + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = successTmp.goods_id, error_msg = "347报名成功" }); + } + } + } catch (Exception ex) { - activityErr += "\r\n报名错误 347查询/新建失败 " + ex.Message; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - //goto restoreSkuImg1; - return activityErr; + activityErr = "报名错误 347查询/新建失败 " + ex.Message; + foreach (var prodParam in prodParams) + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + return "{\"success\":false,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; } - activityErr = "\r\n347报名成功"; - return activityErr; + activityErr = "347报名成功"; + //foreach (var prodParam in prodParams) + //{ + // if (!addActivityFailLst.Any(aa => aa.goods_id == prodParam.goods_id)) + // addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + //} + return "{\"success\":true,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; } string SignActivity23513(ShopLoginInfo shop, PDDProductUploadParam prodParam) @@ -1162,69 +1306,49 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms /// /// 超级晚8 单件折扣 /// - string SignActivity23730(ShopLoginInfo shop, PDDProductUploadParam prodParam) + string SignActivity23730(ShopLoginInfo shop, List prodParams) { + List actEnrollV3GoodsRuleInfoLst = new List(); + var prodParamsTmp = JsonHelper.DeserializeJsonToList(JsonHelper.SerializeObject(prodParams)); + List addActivityFailLst = new List(); string activityErr = ""; - var activityRst3 = activity_goods_price_rule3(shop, prodParam.goods_id.ParseToString(), 23730, 424); + var activityRst3 = "频繁"; Thread.Sleep(Randomx.GetId(500, 1500)); Thread.Sleep(Randomx.GetId(500, 1500)); Thread.Sleep((moreSleepTime * 1000).ParseToInt()); - for (int i = 0; i < 5 && activityRst3.Contains("频繁"); i++) - { - activity_goods_price_rule3(shop, prodParam.goods_id.ParseToString(), 23730, 424); - Thread.Sleep(Randomx.GetId(1000, 2000)); - Thread.Sleep(Randomx.GetId(1000, 2000)); - Thread.Sleep(Randomx.GetId(1000, 2000)); - Thread.Sleep((moreSleepTime * 1000).ParseToInt()); - } - if (!activityRst3.Contains("\"success\":true")) - { - var error = BaseRegex.GetStringJson(ref activityRst3, "error_msg"); - if (string.IsNullOrEmpty(error)) - error = activityRst3; - activityErr += "\r\n报名错误 730查询失败 " + error; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - //goto restoreSkuImg1; - return activityErr; - } try { - var jObj = JObject.Parse(activityRst3); - var jStr = JsonHelper.SerializeObject(jObj["result"]["enroll_goods_rule_vos"]); - var actEnrollV3GoodsRuleInfoLst = JsonHelper.DeserializeJsonToList(jStr); - var actEnrollV3GoodsRuleInfo = actEnrollV3GoodsRuleInfoLst.FirstOrDefault(); - var mmsEnrollParamsInfo = - actEnrollV3GoodsRuleInfo.enroll_rule_param.enroll_goods_promotion_event.supply_tool_mms_enroll_form_goods_param_item_list.FirstOrDefault().MmsEnrollParamsInfo; + while (prodParamsTmp.Count > 0) + { + var prodParamsTmpTmp = prodParamsTmp.Take(5).ToList(); + prodParamsTmp.RemoveAll(p => prodParamsTmpTmp.Contains(p)); - if (mmsEnrollParamsInfo == null) - { - activityErr += "\r\n报名错误 730查询/新建失败 商品未提交成功或不满足参加活动条件"; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - //goto restoreSkuImg1; - return activityErr; - } - var mmsEnrollParamsInfoStr = JsonHelper.SerializeObject(mmsEnrollParamsInfo); - - if (mmsEnrollParamsInfo.max_discount_threshold.ParseToInt() < 98) - { - activityErr += "\r\n放弃报名 730 最大折扣 " + mmsEnrollParamsInfo.max_discount_threshold + " 折低于 98 折 "; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - return activityErr; - } - foreach (var activitySkuInfo in mmsEnrollParamsInfo.sku_best_activity_price_map) - { - var sku = prodParam.skus.FirstOrDefault(s => s.sku_id.ParseToString() == activitySkuInfo.Key); - //var sku = prodParam.skus.FirstOrDefault(sk => string.Join(",", sk.spec.Select(s => s.spec_name)) == activitySkuInfo.spec_info_str); - if (sku == null || sku.multi_price > activitySkuInfo.Value) + for (int i = 0; i < 5 && activityRst3.Contains("频繁"); i++) { - activityErr += "\r\n报名错误 730价格低于产品价 " + (activitySkuInfo.Value * mmsEnrollParamsInfo.max_discount_threshold.ParseToInt() / 100) + " < " + sku?.multi_price; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - return activityErr; + activityRst3 = activity_goods_price_rule3(shop, string.Join(",", prodParams.Select(p => p.goods_id.ParseToString())), 23730, 424); + if (activityRst3.Contains("频繁")) + { + Thread.Sleep(Randomx.GetId(1000, 2000)); + Thread.Sleep(Randomx.GetId(1000, 2000)); + Thread.Sleep(Randomx.GetId(1000, 2000)); + Thread.Sleep((moreSleepTime * 1000).ParseToInt()); + } } + if (!activityRst3.Contains("\"success\":true")) + { + var error = BaseRegex.GetStringJson(ref activityRst3, "error_msg"); + if (string.IsNullOrEmpty(error)) + error = activityRst3; + activityErr = "报名错误 730查询失败 " + error; + foreach (var prodParam in prodParams) + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + return "{\"success\":false,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; + } + + + var jObj = JObject.Parse(activityRst3); + var jStr = JsonHelper.SerializeObject(jObj["result"]["enroll_goods_rule_vos"]); + actEnrollV3GoodsRuleInfoLst.AddRange(JsonHelper.DeserializeJsonToList(jStr)); } PDDActivitySubmitParamV2 actSubmitParamV2 = new PDDActivitySubmitParamV2(); @@ -1233,70 +1357,123 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms actSubmitParamV2.enroll_source_ctx.scene_full_coverage = "mmsActBatchEnrollV1"; actSubmitParamV2.enroll_source_ctx.source_type = "MMSActicon"; actSubmitParamV2.enroll_source_ctx.scene_type = "ActivityCard"; - actSubmitParamV2.goods_volist = new List(); - goods_vo_param_v2 goods_vo_param = new goods_vo_param_v2(); - actSubmitParamV2.goods_volist.Add(goods_vo_param); - goods_vo_param.goods_id = prodParam.goods_id; - goods_vo_param.create_goods_promotion_event_vo = new create_goods_promotion_event_vo_param(); - goods_vo_param.create_goods_promotion_event_vo.item_volist.Add(new item_volist_param() - { - tool_supply_type = actEnrollV3GoodsRuleInfo.enroll_rule_param.enroll_goods_promotion_event.supply_tool_mms_enroll_form_goods_param_item_list.FirstOrDefault().tool_supply_type, - tool_supply_sn = actEnrollV3GoodsRuleInfo.enroll_rule_param.enroll_goods_promotion_event.supply_tool_mms_enroll_form_goods_param_item_list.FirstOrDefault().tool_supply_sn, - mms_enroll_params = "{\"discount\":\"" + mmsEnrollParamsInfo.max_discount_threshold + "\"}", - }); - actSubmitParamV2.create_protocol_vo.view_confirmed_supply_tool_introduction_volist.Add(new view_confirmed_supply_tool_introduction_volist_param() - { - supply_tool_type = actEnrollV3GoodsRuleInfo.enroll_rule_param.enroll_goods_promotion_event.supply_tool_mms_enroll_form_goods_param_item_list.FirstOrDefault().tool_supply_type, - supply_tool_sn = actEnrollV3GoodsRuleInfo.enroll_rule_param.enroll_goods_promotion_event.supply_tool_mms_enroll_form_goods_param_item_list.FirstOrDefault().tool_supply_sn, - merchant_confirm_outer_ratio = true - }); - var addActivityRst = add_activity_goods(shop, actSubmitParamV2, prodParam.goods_id.ParseToString(), 23730, 424); - for (int i = 0; i < 3 && !addActivityRst.Contains("\"success\":true"); i++) + foreach (var prodParam in prodParams) + { + var actEnrollV3GoodsRuleInfo = actEnrollV3GoodsRuleInfoLst.FirstOrDefault(a => a.goods_id == prodParam.goods_id); + var mmsEnrollParamsInfo = + actEnrollV3GoodsRuleInfo?.enroll_rule_param.enroll_goods_promotion_event?.supply_tool_mms_enroll_form_goods_param_item_list?.FirstOrDefault()?.MmsEnrollParamsInfo; + + if (actEnrollV3GoodsRuleInfo == null || mmsEnrollParamsInfo == null) + { + activityErr = "报名错误 730查询/新建失败 商品未提交成功或不满足参加活动条件"; + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + continue; + } + + var mmsEnrollParamsInfoStr = JsonHelper.SerializeObject(mmsEnrollParamsInfo); + if (mmsEnrollParamsInfo.max_discount_threshold.ParseToInt() < 98) + { + activityErr = "放弃报名 730最大折扣 " + mmsEnrollParamsInfo.max_discount_threshold + " 折低于 98 折 "; + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + continue; + } + + foreach (var activitySkuInfo in mmsEnrollParamsInfo.sku_best_activity_price_map) + { + var sku = prodParam.skus.FirstOrDefault(s => s.sku_id.ParseToString() == activitySkuInfo.Key); + //var sku = prodParam.skus.FirstOrDefault(sk => string.Join(",", sk.spec.Select(s => s.spec_name)) == activitySkuInfo.spec_info_str); + if (sku == null || sku.multi_price > activitySkuInfo.Value) + { + activityErr = "报名错误 730价格低于产品价 " + (activitySkuInfo.Value * mmsEnrollParamsInfo.max_discount_threshold.ParseToInt() / 100) + " < " + sku?.multi_price; + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + break; + } + } + if (addActivityFailLst.Any(aa => aa.goods_id == prodParam.goods_id)) + continue; + + goods_vo_param_v2 goods_vo_param = new goods_vo_param_v2(); + actSubmitParamV2.goods_volist.Add(goods_vo_param); + goods_vo_param.goods_id = prodParam.goods_id; + goods_vo_param.create_goods_promotion_event_vo = new create_goods_promotion_event_vo_param(); + goods_vo_param.create_goods_promotion_event_vo.item_volist.Add(new item_volist_param() + { + tool_supply_type = actEnrollV3GoodsRuleInfo.enroll_rule_param.enroll_goods_promotion_event.supply_tool_mms_enroll_form_goods_param_item_list.FirstOrDefault().tool_supply_type, + tool_supply_sn = actEnrollV3GoodsRuleInfo.enroll_rule_param.enroll_goods_promotion_event.supply_tool_mms_enroll_form_goods_param_item_list.FirstOrDefault().tool_supply_sn, + mms_enroll_params = "{\"discount\":\"" + mmsEnrollParamsInfo.max_discount_threshold + "\"}", + }); + actSubmitParamV2.create_protocol_vo.view_confirmed_supply_tool_introduction_volist.Add(new view_confirmed_supply_tool_introduction_volist_param() + { + supply_tool_type = actEnrollV3GoodsRuleInfo.enroll_rule_param.enroll_goods_promotion_event.supply_tool_mms_enroll_form_goods_param_item_list.FirstOrDefault().tool_supply_type, + supply_tool_sn = actEnrollV3GoodsRuleInfo.enroll_rule_param.enroll_goods_promotion_event.supply_tool_mms_enroll_form_goods_param_item_list.FirstOrDefault().tool_supply_sn, + merchant_confirm_outer_ratio = true + }); + } + + var addActivityRst = "频繁"; + for (int i = 0; i < 3 && addActivityRst.Contains("频繁"); i++) { Thread.Sleep(Randomx.GetId(2000, 5000)); - addActivityRst = add_activity_goods(shop, actSubmitParamV2, prodParam.goods_id.ParseToString(), 23730, 424); + addActivityRst = add_activity_goods(shop, actSubmitParamV2, "0", 23730, 424); + //{"success":true,"error_code":1000000,"error_msg":null,"result":{"enroll_fail_goods_list":[],"enroll_success_goods_list":[{"goods_id":939959837537,"activity_goods_id":11278102151265},{"goods_id":939958451500,"activity_goods_id":11278068868140},{"goods_id":939958936804,"activity_goods_id":11278114440420},{"goods_id":939958823706,"activity_goods_id":11278085253146},{"goods_id":939958300485,"activity_goods_id":11278098034757}]}} } - var err_msg = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); - if (!addActivityRst.Contains("\"success\":true") || !string.IsNullOrEmpty(err_msg)) + if (!addActivityRst.Contains("\"success\":true")) { var error = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); if (string.IsNullOrEmpty(error)) error = addActivityRst; - activityErr += "\r\n报名错误 730新建失败 " + error; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - //goto restoreSkuImg1; - return activityErr; + activityErr = "报名错误 730新建失败 " + error; + foreach (var prodParam in prodParams) + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + return "{\"success\":false,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; + } + var err_msg = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); + if (!string.IsNullOrEmpty(err_msg) && addActivityRst.Contains("enroll_fail_goods_list")) + { + var failStr = JsonHelper.SerializeObject(JsonHelper.JObjectParse(addActivityRst)["result"]["enroll_fail_goods_list"]); + var failLstTmp = JsonHelper.DeserializeJsonToList(failStr); + foreach (var failTmp in failLstTmp) + { + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = failTmp.goods_id, error_msg = "报名错误 730新建失败 " + failTmp.error_msg }); + } + } + if (addActivityRst.Contains("enroll_success_goods_list")) + { + var successStr = JsonHelper.SerializeObject(JsonHelper.JObjectParse(addActivityRst)["result"]["enroll_success_goods_list"]); + var successLstTmp = JsonHelper.DeserializeJsonToList(successStr); + foreach (var successTmp in successLstTmp) + { + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = successTmp.goods_id, error_msg = "730报名成功" }); + } } } // 活动 23730 超级晚8 catch (Exception ex) { - activityErr += "\r\n报名错误 730查询/新建失败 " + ex.Message; - if (BaseClass.SaLevel != 1 && 1 != 1) - activityErr = "报名错误"; - //goto restoreSkuImg1; - return activityErr; + activityErr = "报名错误 730查询/新建失败 " + ex.Message; + foreach (var prodParam in prodParams) + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + return "{\"success\":false,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; } - activityErr = "\r\n730报名成功"; - return activityErr; + activityErr = "730报名成功"; + return "{\"success\":true,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; } /// /// 月卡会员折扣 /// - string SignActivity23456(ShopLoginInfo shop, PDDProductUploadParam prodParam) + string SignActivity23456Old(ShopLoginInfo shop, PDDProductUploadParam prodParam) { string activityErr = ""; - var activityRst3 = activity_goods_price_rule3(shop, prodParam.goods_id.ParseToString(), 23456, 422); + var activityRst3 = "频繁"; Thread.Sleep(Randomx.GetId(500, 1500)); Thread.Sleep(Randomx.GetId(500, 1500)); Thread.Sleep((moreSleepTime * 1000).ParseToInt()); for (int i = 1; i < 5 && activityRst3.Contains("频繁"); i++) { - activity_goods_price_rule3(shop, prodParam.goods_id.ParseToString(), 23456, 422); + activityRst3 = activity_goods_price_rule3(shop, prodParam.goods_id.ParseToString(), 23456, 422); Thread.Sleep(Randomx.GetId(1000, 2000)); Thread.Sleep(Randomx.GetId(1000, 2000)); Thread.Sleep(Randomx.GetId(1000, 2000)); @@ -1307,7 +1484,7 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms var error = BaseRegex.GetStringJson(ref activityRst3, "error_msg"); if (string.IsNullOrEmpty(error)) error = activityRst3; - activityErr += "\r\n报名错误 456查询失败 " + error; + activityErr = "\r\n报名错误 456查询失败 " + error; if (BaseClass.SaLevel != 1 && 1 != 1) activityErr = "报名错误"; //goto restoreSkuImg1; @@ -1324,17 +1501,17 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms if (mmsEnrollParamsInfo == null) { - activityErr += "\r\n报名错误 456查询/新建失败 商品未提交成功或不满足参加活动条件"; + activityErr = "\r\n报名错误 456查询/新建失败 商品未提交成功或不满足参加活动条件"; if (BaseClass.SaLevel != 1 && 1 != 1) activityErr = "报名错误"; //goto restoreSkuImg1; return activityErr; } - var mmsEnrollParamsInfoStr = JsonHelper.SerializeObject(mmsEnrollParamsInfo); + //var mmsEnrollParamsInfoStr = JsonHelper.SerializeObject(mmsEnrollParamsInfo); if (mmsEnrollParamsInfo.max_discount_threshold.ParseToInt() < 95) { - activityErr += "\r\n放弃报名 456最大折扣 " + mmsEnrollParamsInfo.max_discount_threshold + " 折低于 95 折 "; + activityErr = "\r\n放弃报名 456最大折扣 " + mmsEnrollParamsInfo.max_discount_threshold + " 折低于 95 折 "; if (BaseClass.SaLevel != 1 && 1 != 1) activityErr = "报名错误"; return activityErr; @@ -1345,7 +1522,7 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms //var sku = prodParam.skus.FirstOrDefault(sk => string.Join(",", sk.spec.Select(s => s.spec_name)) == activitySkuInfo.spec_info_str); if (sku == null || sku.multi_price > activitySkuInfo.Value) { - activityErr += "\r\n报名错误 456价格低于产品价 " + (activitySkuInfo.Value * mmsEnrollParamsInfo.max_discount_threshold.ParseToInt() / 100) + " < " + sku?.multi_price; + activityErr = "\r\n报名错误 456价格低于产品价 " + (activitySkuInfo.Value * mmsEnrollParamsInfo.max_discount_threshold.ParseToInt() / 100) + " < " + sku?.multi_price; if (BaseClass.SaLevel != 1 && 1 != 1) activityErr = "报名错误"; return activityErr; @@ -1389,7 +1566,7 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms var error = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); if (string.IsNullOrEmpty(error)) error = addActivityRst; - activityErr += "\r\n报名错误 456新建失败 " + error; + activityErr = "\r\n报名错误 456新建失败 " + error; if (BaseClass.SaLevel != 1 && 1 != 1) activityErr = "报名错误"; //goto restoreSkuImg1; @@ -1398,7 +1575,7 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms } // 活动 23456 月卡会员折扣 catch (Exception ex) { - activityErr += "\r\n报名错误 456查询/新建失败 " + ex.Message; + activityErr = "\r\n报名错误 456查询/新建失败 " + ex.Message; if (BaseClass.SaLevel != 1 && 1 != 1) activityErr = "报名错误"; //goto restoreSkuImg1; @@ -1408,6 +1585,162 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms return activityErr; } + /// + /// 月卡会员折扣 + /// + string SignActivity23456(ShopLoginInfo shop, List prodParams) + { + List actEnrollV3GoodsRuleInfoLst = new List(); + var prodParamsTmp = JsonHelper.DeserializeJsonToList(JsonHelper.SerializeObject(prodParams)); + List addActivityFailLst = new List(); + string activityErr = ""; + var activityRst3 = "频繁"; + Thread.Sleep(Randomx.GetId(500, 1500)); + Thread.Sleep(Randomx.GetId(500, 1500)); + Thread.Sleep((moreSleepTime * 1000).ParseToInt()); + try + { + while (prodParamsTmp.Count > 0) + { + var prodParamsTmpTmp = prodParamsTmp.Take(5).ToList(); + prodParamsTmp.RemoveAll(p => prodParamsTmpTmp.Contains(p)); + + for (int i = 0; i < 5 && activityRst3.Contains("频繁"); i++) + { + activityRst3 = activity_goods_price_rule3(shop, string.Join(",", prodParams.Select(p => p.goods_id.ParseToString())), 23456, 422); + if (activityRst3.Contains("频繁")) + { + Thread.Sleep(Randomx.GetId(1000, 2000)); + Thread.Sleep(Randomx.GetId(1000, 2000)); + Thread.Sleep(Randomx.GetId(1000, 2000)); + Thread.Sleep((moreSleepTime * 1000).ParseToInt()); + } + } + if (!activityRst3.Contains("\"success\":true")) + { + var error = BaseRegex.GetStringJson(ref activityRst3, "error_msg"); + if (string.IsNullOrEmpty(error)) + error = activityRst3; + activityErr = "报名错误 456查询失败 " + error; + foreach (var prodParam in prodParams) + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + return "{\"success\":false,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; + } + + var jObj = JObject.Parse(activityRst3); + var jStr = JsonHelper.SerializeObject(jObj["result"]["enroll_goods_rule_vos"]); + actEnrollV3GoodsRuleInfoLst.AddRange(JsonHelper.DeserializeJsonToList(jStr)); + } + + PDDActivitySubmitParamV2 actSubmitParamV2 = new PDDActivitySubmitParamV2(); + actSubmitParamV2.activity_id = 23456; + actSubmitParamV2.enroll_source_ctx.enroll_type = 3; + actSubmitParamV2.enroll_source_ctx.scene_full_coverage = "mmsActBatchEnrollV1"; + actSubmitParamV2.enroll_source_ctx.source_type = "MMSActicon"; + actSubmitParamV2.enroll_source_ctx.scene_type = "ActivityCard"; + actSubmitParamV2.goods_volist = new List(); + + foreach (var prodParam in prodParams) + { + var actEnrollV3GoodsRuleInfo = actEnrollV3GoodsRuleInfoLst.FirstOrDefault(a => a.goods_id == prodParam.goods_id); + var mmsEnrollParamsInfo = + actEnrollV3GoodsRuleInfo?.enroll_rule_param.enroll_goods_promotion_event?.supply_tool_mms_enroll_form_goods_param_item_list?.FirstOrDefault()?.MmsEnrollParamsInfo; + + if (actEnrollV3GoodsRuleInfo == null || mmsEnrollParamsInfo == null) + { + activityErr = "报名错误 456查询/新建失败 商品未提交成功或不满足参加活动条件"; + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + continue; + } + + var mmsEnrollParamsInfoStr = JsonHelper.SerializeObject(mmsEnrollParamsInfo); + if (mmsEnrollParamsInfo.max_discount_threshold.ParseToInt() < 95) + { + activityErr = "放弃报名 456最大折扣 " + mmsEnrollParamsInfo.max_discount_threshold + " 折低于 95 折 "; + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + continue; + } + + foreach (var activitySkuInfo in mmsEnrollParamsInfo.sku_best_activity_price_map) + { + var sku = prodParam.skus.FirstOrDefault(s => s.sku_id.ParseToString() == activitySkuInfo.Key); + //var sku = prodParam.skus.FirstOrDefault(sk => string.Join(",", sk.spec.Select(s => s.spec_name)) == activitySkuInfo.spec_info_str); + if (sku == null || sku.multi_price > activitySkuInfo.Value) + { + activityErr = "报名错误 456价格低于产品价 " + (activitySkuInfo.Value * mmsEnrollParamsInfo.max_discount_threshold.ParseToInt() / 100) + " < " + sku?.multi_price; + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + break; + } + } + if (addActivityFailLst.Any(aa => aa.goods_id == prodParam.goods_id)) + continue; + + goods_vo_param_v2 goods_vo_param = new goods_vo_param_v2(); + actSubmitParamV2.goods_volist.Add(goods_vo_param); + goods_vo_param.goods_id = prodParam.goods_id; + goods_vo_param.create_goods_promotion_event_vo = new create_goods_promotion_event_vo_param(); + goods_vo_param.create_goods_promotion_event_vo.item_volist.Add(new item_volist_param() + { + tool_supply_type = actEnrollV3GoodsRuleInfo.enroll_rule_param.enroll_goods_promotion_event.supply_tool_mms_enroll_form_goods_param_item_list.FirstOrDefault().tool_supply_type, + tool_supply_sn = actEnrollV3GoodsRuleInfo.enroll_rule_param.enroll_goods_promotion_event.supply_tool_mms_enroll_form_goods_param_item_list.FirstOrDefault().tool_supply_sn, + mms_enroll_params = "{\"discount\":\"" + mmsEnrollParamsInfo.max_discount_threshold + "\"}", + }); + actSubmitParamV2.create_protocol_vo.view_confirmed_supply_tool_introduction_volist.Add(new view_confirmed_supply_tool_introduction_volist_param() + { + supply_tool_type = actEnrollV3GoodsRuleInfo.enroll_rule_param.enroll_goods_promotion_event.supply_tool_mms_enroll_form_goods_param_item_list.FirstOrDefault().tool_supply_type, + supply_tool_sn = actEnrollV3GoodsRuleInfo.enroll_rule_param.enroll_goods_promotion_event.supply_tool_mms_enroll_form_goods_param_item_list.FirstOrDefault().tool_supply_sn, + merchant_confirm_outer_ratio = true + }); + } + + var addActivityRst = "频繁"; + for (int i = 0; i < 3 && addActivityRst.Contains("频繁"); i++) + { + Thread.Sleep(Randomx.GetId(2000, 5000)); + addActivityRst = add_activity_goods(shop, actSubmitParamV2, "0", 23456, 422); + //{"success":true,"error_code":1000000,"error_msg":null,"result":{"enroll_fail_goods_list":[],"enroll_success_goods_list":[{"goods_id":939959837537,"activity_goods_id":11278102151265},{"goods_id":939958451500,"activity_goods_id":11278068868140},{"goods_id":939958936804,"activity_goods_id":11278114440420},{"goods_id":939958823706,"activity_goods_id":11278085253146},{"goods_id":939958300485,"activity_goods_id":11278098034757}]}} + } + if (!addActivityRst.Contains("\"success\":true")) + { + var error = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); + if (string.IsNullOrEmpty(error)) + error = addActivityRst; + activityErr = "报名错误 456新建失败 " + error; + foreach (var prodParam in prodParams) + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + return "{\"success\":false,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; + } + var err_msg = BaseRegex.GetStringJson(ref addActivityRst, "error_msg"); + if (!string.IsNullOrEmpty(err_msg) && addActivityRst.Contains("enroll_fail_goods_list")) + { + var failStr = JsonHelper.SerializeObject(JsonHelper.JObjectParse(addActivityRst)["result"]["enroll_fail_goods_list"]); + var failLstTmp = JsonHelper.DeserializeJsonToList(failStr); + foreach (var failTmp in failLstTmp) + { + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = failTmp.goods_id, error_msg = "报名错误 456新建失败 " + failTmp.error_msg }); + } + } + if (addActivityRst.Contains("enroll_success_goods_list")) + { + var successStr = JsonHelper.SerializeObject(JsonHelper.JObjectParse(addActivityRst)["result"]["enroll_success_goods_list"]); + var successLstTmp = JsonHelper.DeserializeJsonToList(successStr); + foreach (var successTmp in successLstTmp) + { + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = successTmp.goods_id, error_msg = "456报名成功" }); + } + } + } // 活动 23456 月卡会员折扣 + catch (Exception ex) + { + activityErr = "报名错误 456查询/新建失败 " + ex.Message; + foreach (var prodParam in prodParams) + addActivityFailLst.Add(new AddActivityFailInfo { goods_id = prodParam.goods_id, error_msg = activityErr }); + return "{\"success\":false,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; + } + activityErr = "456报名成功"; + return "{\"success\":true,\"msg\":\"" + activityErr + "\",\"fail_list\":" + JsonHelper.SerializeObject(addActivityFailLst) + "}"; + } + string SignActivity23620(ShopLoginInfo shop, PDDProductUploadParam prodParam) { string activityErr = ""; @@ -1755,13 +2088,13 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms /// /// /// - private string activity_goods_info(ShopLoginInfo shop, string prodId, string activityId = "20981") + private string activity_goods_info(ShopLoginInfo shop, List prodId, string activityId = "20981") { var anti = shop.AntiContents.LastOrDefault().ParseToString(); if (shop.AntiContents.Count > 0) anti = shop.AntiContents[Randomx.GetId(shop.AntiContents.Count)]; string url = "https://mms.pinduoduo.com/leekmms/quick_enroll/multi_activity/real_form_info"; - string body = @"{""activity_id"":" + activityId + @",""page_number"":1,""page_size"":10,""goods_id_list"":[" + prodId + @"],""source_type"":""PROMO-OwnHome""}"; + string body = @"{""activity_id"":" + activityId + @",""page_number"":1,""page_size"":10,""goods_id_list"":[" + string.Join(",", prodId) + @"],""source_type"":""PROMO-OwnHome""}"; string refere = "https://mms.pinduoduo.com/act/multi-act-enroll?activityId=" + activityId + "&SourceType=PROMO-OwnHome"; @@ -1788,15 +2121,16 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms /// /// /// - private string activity_goods_price_rule(ShopLoginInfo shop, string prodId, int activityId = 15996, int activityType=18) + private string activity_goods_price_rule(ShopLoginInfo shop, string prodIds, int activityId = 15996, int activityType=18) { var anti = shop.AntiContents.LastOrDefault().ParseToString(); if (shop.AntiContents.Count > 0) anti = shop.AntiContents[Randomx.GetId(shop.AntiContents.Count)]; string url = "https://mms.pinduoduo.com/leekmms/activity/query/enroll/rule_suggest_price"; - string body = @"{""activity_id"":" + activityId + @",""goods_id_list"":[" + prodId + + string body = @"{""activity_id"":" + activityId + @",""goods_id_list"":[" + prodIds + @"],""source_type"":""MMSActicon"",""behavior_collection_v1_cas_boost_factor"":""dXlyaGxldXItNDkwOTQzMTM0LTE3NTg2OTQxNjYyNjM=""}"; + //"https://mms.pinduoduo.com/act/goods_price/confirm?activityId=20981&activityType=27&from=chooseGoods&SourceType=MMSActicon&SceneType=ActivityCard"; string refere = "https://mms.pinduoduo.com/act/goods_price/confirm?activityId=" + activityId + "&activityType=" + activityType + "&from=chooseGoods&SourceType=MMSActicon&SceneType=ActivityCard"; if (activityId == 22347) @@ -2361,6 +2695,19 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms private void btnApiUpload_Click(object sender, EventArgs e) { + bool sign22347 = chk22347.Checked && chk22347.Visible; + bool sign20981 = chk20981.Checked && chk20981.Visible; + bool sign21365 = chk21365.Checked && chk21365.Visible; + bool sign15996 = chk15996.Checked && chk15996.Visible; + bool sign23513 = chk23513.Checked && chk23513.Visible; + bool sign23730 = chk23730.Checked && chk23730.Visible; + bool sign23456 = chk23456.Checked && chk23456.Visible; + if ((sign22347 || sign20981 || sign21365 || sign15996 || sign23513 || sign23730 || sign23456) == false) + { + BaseMsgForm.ShowError("请选择报名活动"); + return; + } + var dgvRows = dgvActProduct.Rows.Cast().Where(r => r.Cells["colCheck"].Value.ParseToBool() == true).ToList(); if (dgvRows.Count == 0) { @@ -2385,322 +2732,356 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms cancellationTokenSource = new CancellationTokenSource(); Task.Run(() => { - foreach (var row in rowLst) + while (rowLst.Count > 0) { if (cancellationTokenSource.IsCancellationRequested) break; - Invoke(new Action(() => + var shopId = rowLst.FirstOrDefault().Cells["colSupplierId"].Value.ParseToString(); + + var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == shopId); + if (shop == null) { - row.Cells["colOpResult"].Value = "正在报名活动"; - })); + Invoke(new Action(() => + { + var row1 = rowLst.FirstOrDefault(); + row1.Cells["colOpResult"].Value = "店铺不存在"; + rowLst.RemoveAt(0); + })); + continue; + } + + #region 检测登录 + //if (shop.LoginStatus == "登录成功") + //{ + // PDDShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); + //} + if (shop.LoginStatus != "登录成功") + { + Invoke(new Action(() => + { + var rows = this.dgvShop.Rows.Cast().Where(r => r.Cells["colShopLoginName"].Value.ToString() == shop.LoginName); + foreach (var rw in rows) + { + rw.Cells["colMessage"].Value = "店铺掉线"; + rw.Cells["colLoginStatus"].Value = "掉线"; + rw.Cells["colCanUse"].Value = false; + } + foreach (var row in rowLst) + row.Cells["colOpResult"].Value = "店铺掉线"; + })); + continue; + } + #endregion + + #region 获取anti_content; + GetToken(shop); + #endregion + + int sendActProdCount = 5; // 以多少个商品为一组报名,最多50个。 + sendActProdCount = txtMultiCnt.Text.Trim().ParseToInt(); + if (sendActProdCount < 1) + sendActProdCount = 1; + if (sendActProdCount > 10) + sendActProdCount = 10; + var rowOperateLst = rowLst.Where(s => s.Cells["colSupplierId"].Value.ParseToString() == shop.ShopId).ToList().Take(sendActProdCount).ToList(); + rowLst.RemoveAll(r => rowOperateLst.Contains(r)); try { - var shopId = row.Cells["colSupplierId"].Value.ParseToString(); - var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == shopId); - if (shop == null) + List prodParamLst = new List(); + foreach (var row in rowOperateLst) { Invoke(new Action(() => { - row.Cells["colOpResult"].Value = "店铺不存在"; + row.Cells["colOpResult"].Value = "正在初始化活动报名"; })); - continue; - } - var actProd = lstActListProdInfo.FirstOrDefault(a => a.goods_id == row.Cells["colSpuId"].Value.ParseToLong()); - if (actProd == null || (actProd.lstPInfo?.out_goods_sn).IsNullOrEmpty()) - { - Invoke(new Action(() => - { - if (actProd == null) - row.Cells["colOpResult"].Value = "商品不存在"; - else - row.Cells["colOpResult"].Value = "源商品不存在"; - })); - continue; - } - - #region 检测登录 - //if (shop.LoginStatus == "登录成功") - //{ - // PDDShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false); - //} - if (shop.LoginStatus != "登录成功") - { - Invoke(new Action(() => - { - var rows = this.dgvShop.Rows.Cast().Where(r => r.Cells["colShopLoginName"].Value.ToString() == shop.LoginName); - foreach (var rw in rows) - { - rw.Cells["colMessage"].Value = "店铺掉线"; - rw.Cells["colLoginStatus"].Value = "掉线"; - rw.Cells["colCanUse"].Value = false; - } - row.Cells["colOpResult"].Value = "店铺掉线"; - })); - continue; - } - #endregion - - #region 获取anti_content; - GetToken(shop); - #endregion - - #region 获取数据库商品详情 - Thread.Sleep(Randomx.GetId(5000, 10000)); - var dbProds = GetProductDetailByExtCode(actProd.lstPInfo.out_goods_sn); - if (dbProds.Count == 0 || dbProds.Count > 1) - { - Invoke(new Action(() => - { - if (dbProds.Count == 0) - row.Cells["colOpResult"].Value = "未匹配到源商品,跳过"; - else - row.Cells["colOpResult"].Value = "匹配到多个同货号源商品无法确定,跳过"; - })); - continue; - } - var dbProd = dbProds.FirstOrDefault(); - #region 将聚水潭产品数据格式进行转换成pdd格式统一上传,匹配加密的spuCode和skuCoke - if (dbProd.product_get_type_text == "厂商直采" && dbProd.sku_secret_json != null && dbProd.sku_secret_json.Contains("goodsId")) - { - string convertRst = ""; - var pProd = new PDDProdFormConverter().JstPddProdToPddConvert(out convertRst, dbProd); - if (!string.IsNullOrEmpty(convertRst)) + Thread.Sleep(Randomx.GetId(200, 800)); + var actProd = lstActListProdInfo.FirstOrDefault(a => a.goods_id == row.Cells["colSpuId"].Value.ParseToLong()); + if (actProd == null || (actProd.lstPInfo?.out_goods_sn).IsNullOrEmpty()) { Invoke(new Action(() => { - row.Cells["colOpResult"].Value = "商品查询错误 " + convertRst; + if (actProd == null) + row.Cells["colOpResult"].Value = "商品不存在"; + else + row.Cells["colOpResult"].Value = "源商品不存在"; })); continue; } - } - #endregion - PDDProductInfo prodInfo = null; - try - { - prodInfo = JsonHelper.DeserializeJsonToObject(dbProd.product_json); - actProd.productInfo = prodInfo; - } - catch (Exception ex) - { + #region 获取数据库商品详情 Invoke(new Action(() => { - row.Cells["colOpResult"].Value = "商品格式化错误 " + ex.Message; + row.Cells["colOpResult"].Value = "正在获取详情"; })); - continue; - } - - actProd.dbProduct = dbProd; - #endregion - - #region 厂商直采获取推单运费模板,计算运费加价。 - var shippingTemplateJson = ""; - var shipPrice = 0; - - if (dbProd.product_get_type_text == "厂商直采" && dbProd.wx_cat_leaf != null) - { - var urlShipping = BaseClass.BuildWXObjString("product/wx_get_shipping_template"); - var dataShipping = Work.UserLogin.GetSignaturex() + - "&coid=" + dbProd.skc_id; - var htmlShipping = GetHtml.PostUtf8(urlShipping, dataShipping); - if (string.IsNullOrEmpty(htmlShipping) || !htmlShipping.Contains("\"code\":200")) - htmlShipping = GetHtml.PostUtf8(urlShipping, dataShipping); - if (string.IsNullOrEmpty(htmlShipping) || !htmlShipping.Contains("\"code\":200")) + //Thread.Sleep(Randomx.GetId(5000, 10000)); + Thread.Sleep(Randomx.GetId(200, 800)); + var dbProds = GetProductDetailByExtCode(actProd.lstPInfo.out_goods_sn); + if (dbProds.Count == 0 || dbProds.Count > 1) { + Invoke(new Action(() => + { + if (dbProds.Count == 0) + row.Cells["colOpResult"].Value = "未匹配到源商品,跳过"; + else + row.Cells["colOpResult"].Value = "匹配到多个同货号源商品无法确定,跳过"; + })); + continue; } - else + var dbProd = dbProds.FirstOrDefault(); + #region 将聚水潭产品数据格式进行转换成pdd格式统一上传,匹配加密的spuCode和skuCoke + if (dbProd.product_get_type_text == "厂商直采" && dbProd.sku_secret_json != null && dbProd.sku_secret_json.Contains("goodsId")) { - if (htmlShipping.Contains("\"data\":\"\"")) + string convertRst = ""; + var pProd = new PDDProdFormConverter().JstPddProdToPddConvert(out convertRst, dbProd); + if (!string.IsNullOrEmpty(convertRst)) + { + Invoke(new Action(() => + { + row.Cells["colOpResult"].Value = "商品查询错误 " + convertRst; + })); + continue; + } + } + #endregion + + PDDProductInfo prodInfo = null; + try + { + prodInfo = JsonHelper.DeserializeJsonToObject(dbProd.product_json); + actProd.productInfo = prodInfo; + } + catch (Exception ex) + { + Invoke(new Action(() => + { + row.Cells["colOpResult"].Value = "商品格式化错误 " + ex.Message; + })); + continue; + } + + actProd.dbProduct = dbProd; + #endregion + + #region 厂商直采获取推单运费模板,计算运费加价。 + var shippingTemplateJson = ""; + var shipPrice = 0; + Invoke(new Action(() => + { + row.Cells["colOpResult"].Value = "正在获取详情模板"; + })); + Thread.Sleep(Randomx.GetId(200, 800)); + if (dbProd.product_get_type_text == "厂商直采" && dbProd.wx_cat_leaf != null) + { + var urlShipping = BaseClass.BuildWXObjString("product/wx_get_shipping_template"); + var dataShipping = Work.UserLogin.GetSignaturex() + + "&coid=" + dbProd.skc_id; + var htmlShipping = GetHtml.PostUtf8(urlShipping, dataShipping); + if (string.IsNullOrEmpty(htmlShipping) || !htmlShipping.Contains("\"code\":200")) + htmlShipping = GetHtml.PostUtf8(urlShipping, dataShipping); + if (string.IsNullOrEmpty(htmlShipping) || !htmlShipping.Contains("\"code\":200")) { } else + { + if (htmlShipping.Contains("\"data\":\"\"")) + { + } + else + { + try + { + shippingTemplateJson = JsonHelper.SerializeObject(JsonHelper.JObjectParse(htmlShipping)["data"]); + } + catch + { + + } + } + } + + if (string.IsNullOrEmpty(shippingTemplateJson)) + { + // 获取运费模板 + var urlShip = BaseClass.BuildWXObjString("product/e57_get_freight_template"); + var dataShip = Work.UserLogin.GetSignaturex() + "&coid=" + dbProd.skc_id; + var shipRst = GetHtml.PostUtf8(urlShip, dataShip); + if (string.IsNullOrEmpty(shipRst) || !shipRst.Contains("\"code\":0")) + shipRst = GetHtml.PostUtf8(urlShipping, dataShipping); + if (!shipRst.Contains("\"code\":0")) + { + var errMsg = BaseRegex.GetStringJson(ref shipRst, "msg"); + if (string.IsNullOrEmpty(errMsg)) + errMsg = shipRst; + Invoke(new Action(() => + { + row.Cells["colOpResult"].Value = "运费模板获取失败 " + errMsg; + })); + continue; + } + try + { + //[{"id":"204","warehouseNum":"15016108","freightType":0,"provinces":"香港特别行政区,台湾省,澳门特别行政区","freightPrice":9999900,"createBy":"vmslin","createTime":"2026-01-30T16:45:03+08:00","updateBy":"vmslin","updateTime":"2026-01-30T16:45:03+08:00"},{"id":"205","warehouseNum":"15016108","freightType":3,"provinces":"海南省,新疆维吾尔自治区,西藏自治区,内蒙古自治区","freightPrice":1530,"createBy":"vmslin","createTime":"2026-01-30T16:45:51+08:00","updateBy":"vmslin","updateTime":"2026-01-30T16:45:51+08:00"},{"id":"206","warehouseNum":"15016108","freightType":1,"provinces":"北京市,上海市","freightPrice":410,"createBy":"vmslin","createTime":"2026-01-30T16:46:04+08:00","updateBy":"vmslin","updateTime":"2026-01-30T16:46:04+08:00"},{"id":"207","warehouseNum":"15016108","freightType":1,"provinces":"安徽省,重庆市,福建省,广东省,甘肃省,广西壮族自治区,贵州省,河北省,湖北省,黑龙江省,河南省,湖南省,吉林省,江苏省,江西省,辽宁省,宁夏回族自治区,青海省,四川省,山东省,山西省,陕西省,天津市,云南省,浙江省","freightPrice":310,"createBy":"vmslin","createTime":"2026-01-30T16:46:17+08:00","updateBy":"vmslin","updateTime":"2026-01-30T16:46:17+08:00"}] + shippingTemplateJson = JsonHelper.SerializeObject(JsonHelper.JObjectParse(shipRst)["data"]); + if (shipRst.Contains("\"code\":0") && !string.IsNullOrEmpty(shippingTemplateJson)) + { + urlShipping = BaseClass.BuildWXObjString("product/wx_add_mdy_shipping_template"); + dataShipping = Work.UserLogin.GetSignaturex() + + "&coid=" + dbProd.skc_id + + "&shipping_template_json=" + shippingTemplateJson; + htmlShipping = GetHtml.PostUtf8(urlShipping, dataShipping); + if (string.IsNullOrEmpty(htmlShipping) || !htmlShipping.Contains("\"code\":200")) + htmlShipping = GetHtml.PostUtf8(urlShipping, dataShipping); + } + } + catch (Exception ex) + { + } + } + + if (!string.IsNullOrEmpty(shippingTemplateJson)) { try { - shippingTemplateJson = JsonHelper.SerializeObject(JsonHelper.JObjectParse(htmlShipping)["data"]); - } - catch - { - - } - } - } - - if (string.IsNullOrEmpty(shippingTemplateJson)) - { - // 获取运费模板 - var urlShip = BaseClass.BuildWXObjString("product/e57_get_freight_template"); - var dataShip = Work.UserLogin.GetSignaturex() + "&coid=" + dbProd.skc_id; - var shipRst = GetHtml.PostUtf8(urlShip, dataShip); - if (string.IsNullOrEmpty(shipRst) || !shipRst.Contains("\"code\":0")) - shipRst = GetHtml.PostUtf8(urlShipping, dataShipping); - if (!shipRst.Contains("\"code\":0")) - { - var errMsg = BaseRegex.GetStringJson(ref shipRst, "msg"); - if (string.IsNullOrEmpty(errMsg)) - errMsg = shipRst; - Invoke(new Action(() => - { - row.Cells["colOpResult"].Value = "运费模板获取失败 " + errMsg; - })); - continue; - } - try - { - //[{"id":"204","warehouseNum":"15016108","freightType":0,"provinces":"香港特别行政区,台湾省,澳门特别行政区","freightPrice":9999900,"createBy":"vmslin","createTime":"2026-01-30T16:45:03+08:00","updateBy":"vmslin","updateTime":"2026-01-30T16:45:03+08:00"},{"id":"205","warehouseNum":"15016108","freightType":3,"provinces":"海南省,新疆维吾尔自治区,西藏自治区,内蒙古自治区","freightPrice":1530,"createBy":"vmslin","createTime":"2026-01-30T16:45:51+08:00","updateBy":"vmslin","updateTime":"2026-01-30T16:45:51+08:00"},{"id":"206","warehouseNum":"15016108","freightType":1,"provinces":"北京市,上海市","freightPrice":410,"createBy":"vmslin","createTime":"2026-01-30T16:46:04+08:00","updateBy":"vmslin","updateTime":"2026-01-30T16:46:04+08:00"},{"id":"207","warehouseNum":"15016108","freightType":1,"provinces":"安徽省,重庆市,福建省,广东省,甘肃省,广西壮族自治区,贵州省,河北省,湖北省,黑龙江省,河南省,湖南省,吉林省,江苏省,江西省,辽宁省,宁夏回族自治区,青海省,四川省,山东省,山西省,陕西省,天津市,云南省,浙江省","freightPrice":310,"createBy":"vmslin","createTime":"2026-01-30T16:46:17+08:00","updateBy":"vmslin","updateTime":"2026-01-30T16:46:17+08:00"}] - shippingTemplateJson = JsonHelper.SerializeObject(JsonHelper.JObjectParse(shipRst)["data"]); - if (shipRst.Contains("\"code\":0") && !string.IsNullOrEmpty(shippingTemplateJson)) - { - urlShipping = BaseClass.BuildWXObjString("product/wx_add_mdy_shipping_template"); - dataShipping = Work.UserLogin.GetSignaturex() + - "&coid=" + dbProd.skc_id + - "&shipping_template_json=" + shippingTemplateJson; - htmlShipping = GetHtml.PostUtf8(urlShipping, dataShipping); - if (string.IsNullOrEmpty(htmlShipping) || !htmlShipping.Contains("\"code\":200")) - htmlShipping = GetHtml.PostUtf8(urlShipping, dataShipping); - } - } - catch (Exception ex) - { - } - } - - if (!string.IsNullOrEmpty(shippingTemplateJson)) - { - try - { - int count = 0; - var shipObjs = JArray.Parse(shippingTemplateJson); - foreach (var shipObj in shipObjs) - { - var provincesStr = shipObj["provinces"].ParseToString(); - if (provincesStr.Split(',').Length > count) + int count = 0; + var shipObjs = JArray.Parse(shippingTemplateJson); + foreach (var shipObj in shipObjs) { - count = provincesStr.Split(',').Length; - shipPrice = shipObj["freightPrice"].ParseToInt(); + var provincesStr = shipObj["provinces"].ParseToString(); + if (provincesStr.Split(',').Length > count) + { + count = provincesStr.Split(',').Length; + shipPrice = shipObj["freightPrice"].ParseToInt(); + } } } + catch (Exception ex) + { + Invoke(new Action(() => + { + row.Cells["colOpResult"].Value = "运费模板获取失败 " + ex.Message; + })); + continue; + } } - catch (Exception ex) + if (shipPrice <= 0) { Invoke(new Action(() => { - row.Cells["colOpResult"].Value = "运费模板获取失败 " + ex.Message; + row.Cells["colOpResult"].Value = "运费模板获取失败 未获取到"; })); continue; } } - if (shipPrice <= 0) + #endregion + + #region 生成一组正常加价后的sku + List addPriceSkuInfoLst = new List(); + int marketPrice = prodInfo.detail.market_price.ParseToInt(); { - Invoke(new Action(() => + foreach (var sku in prodInfo.detail.sku) { - row.Cells["colOpResult"].Value = "运费模板获取失败 未获取到"; - })); - continue; - } - } - #endregion + var skuInfo = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(sku)); + skuInfo.is_onsale = skuInfo.is_onsale != null ? skuInfo.is_onsale : 1; + skuInfo.limit_quantity = 999; // 只入参999 - #region 生成一组正常加价后的sku - List addPriceSkuInfoLst = new List(); - int marketPrice = prodInfo.detail.market_price.ParseToInt(); - { - foreach (var sku in prodInfo.detail.sku) - { - var skuInfo = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(sku)); - skuInfo.is_onsale = skuInfo.is_onsale != null ? skuInfo.is_onsale : 1; - skuInfo.limit_quantity = 999; // 只入参999 + // 厂商直采的上家缺货则保持缺货。 + if (skuInfo.quantity != 0) + skuInfo.quantity = txtStockNum.Text.Trim().ParseToInt(); - // 厂商直采的上家缺货则保持缺货。 - if (skuInfo.quantity != 0) - skuInfo.quantity = txtStockNum.Text.Trim().ParseToInt(); - - var new_multi_price = sku.multi_price + (shipPrice * defaultAddPriceRule.AddShippingFeeTimes).ParseToInt(); - // 使用货号价格做基础价 - if (chkUseExtCodePrice.Checked && dbProd.ext_code_price > 0) - { - new_multi_price = dbProd.ext_code_price + (shipPrice * defaultAddPriceRule.AddShippingFeeTimes).ParseToInt(); - } - - skuInfo.multi_price = (new_multi_price * this.txtAddTimes.Text.Trim().ParseToDecimal() + this.txtAddMorePrice.Text.Trim().ParseToDecimal() * 100).ParseToInt(); - //skuInfo.price = (sku.price * this.txtAddTimes.Text.Trim().ParseToDecimal() + this.txtAddMorePrice.Text.Trim().ParseToDecimal() * 100).ParseToInt(); - if (defaultAddPriceRule.AddMorePriceFirst) // 先加后乘 - skuInfo.multi_price = ((new_multi_price + this.txtAddMorePrice.Text.Trim().ParseToDecimal() * 100) * this.txtAddTimes.Text.Trim().ParseToDecimal()).ParseToInt(); - skuInfo.price = skuInfo.multi_price + Math.Max(100, this.txtSinglePriceAdd.Text.Trim().ParseToDecimal() * 100).ParseToInt(); - - // 阶梯式加价,如果命中则按阶梯式加价进行 - if (isStepAddPrice) - { - foreach (var addPrice in lstAddPriceRule) + var new_multi_price = sku.multi_price + (shipPrice * defaultAddPriceRule.AddShippingFeeTimes).ParseToInt(); + // 使用货号价格做基础价 + if (chkUseExtCodePrice.Checked && dbProd.ext_code_price > 0) { - if (new_multi_price > addPrice.MoreThanPrice * 100 && new_multi_price <= addPrice.LessThanPrice * 100) + new_multi_price = dbProd.ext_code_price + (shipPrice * defaultAddPriceRule.AddShippingFeeTimes).ParseToInt(); + } + + skuInfo.multi_price = (new_multi_price * this.txtAddTimes.Text.Trim().ParseToDecimal() + this.txtAddMorePrice.Text.Trim().ParseToDecimal() * 100).ParseToInt(); + //skuInfo.price = (sku.price * this.txtAddTimes.Text.Trim().ParseToDecimal() + this.txtAddMorePrice.Text.Trim().ParseToDecimal() * 100).ParseToInt(); + if (defaultAddPriceRule.AddMorePriceFirst) // 先加后乘 + skuInfo.multi_price = ((new_multi_price + this.txtAddMorePrice.Text.Trim().ParseToDecimal() * 100) * this.txtAddTimes.Text.Trim().ParseToDecimal()).ParseToInt(); + skuInfo.price = skuInfo.multi_price + Math.Max(100, this.txtSinglePriceAdd.Text.Trim().ParseToDecimal() * 100).ParseToInt(); + + // 阶梯式加价,如果命中则按阶梯式加价进行 + if (isStepAddPrice) + { + foreach (var addPrice in lstAddPriceRule) { - if (defaultAddPriceRule.AddMorePriceFirst) // 先加后乘 - skuInfo.multi_price = ((new_multi_price + addPrice.AddMorePrice * 100) * addPrice.AddPriceTimes).ParseToInt(); - else - skuInfo.multi_price = (new_multi_price * addPrice.AddPriceTimes + addPrice.AddMorePrice * 100).ParseToInt(); - skuInfo.price = skuInfo.multi_price + Math.Max(100, addPrice.SinglePriceAdd * 100).ParseToInt(); ; - break; + if (new_multi_price > addPrice.MoreThanPrice * 100 && new_multi_price <= addPrice.LessThanPrice * 100) + { + if (defaultAddPriceRule.AddMorePriceFirst) // 先加后乘 + skuInfo.multi_price = ((new_multi_price + addPrice.AddMorePrice * 100) * addPrice.AddPriceTimes).ParseToInt(); + else + skuInfo.multi_price = (new_multi_price * addPrice.AddPriceTimes + addPrice.AddMorePrice * 100).ParseToInt(); + skuInfo.price = skuInfo.multi_price + Math.Max(100, addPrice.SinglePriceAdd * 100).ParseToInt(); ; + break; + } } } - } - // 聚水潭商品 加邮费×倍率 放前面 - //skuInfo.multi_price += (shipPrice * defaultAddPriceRule.AddShippingFeeTimes).ParseToInt(); - //skuInfo.price += (shipPrice * defaultAddPriceRule.AddShippingFeeTimes).ParseToInt(); + // 聚水潭商品 加邮费×倍率 放前面 + //skuInfo.multi_price += (shipPrice * defaultAddPriceRule.AddShippingFeeTimes).ParseToInt(); + //skuInfo.price += (shipPrice * defaultAddPriceRule.AddShippingFeeTimes).ParseToInt(); - if (marketPrice < skuInfo.price + 1000) + if (marketPrice < skuInfo.price + 1000) + { + marketPrice = skuInfo.price.ParseToInt() + 1000; + //pddApi.Data["market_price"] = marketPrice; + } + + addPriceSkuInfoLst.Add(skuInfo); + } + } + #endregion + + PDDProductUploadParam prodParam = new PDDProductUploadParam(); + prodParam.goods_id = actProd.goods_id; + prodParam.gallery = JsonHelper.DeserializeJsonToList(JsonHelper.SerializeObject(actProd.productInfo.detail.galleries)); + + // 生成正常加价的sku列表 + int index = -1; + prodParam.skus = new List(); + foreach (var skuGetRstInfo in actProd.lstPInfo.sku_list) + { + index++; + var skuInfo = addPriceSkuInfoLst.FirstOrDefault(s => s.out_sku_sn == skuGetRstInfo.outSkuSn); + if (skuInfo == null) + skuInfo = addPriceSkuInfoLst[index]; + + //var skuParam = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(skuGetRstInfo)); + var skuParam = new sku_param(); + skuParam.sku_id = skuGetRstInfo.skuId; + skuParam.thumb_url = skuGetRstInfo.skuThumbUrl; + skuParam.quantity_delta = skuGetRstInfo.skuQuantity; + skuParam.spec = new List(); + List spStrLst = skuGetRstInfo.newSpec.Split(',').ToList(); + int specIndex = -1; + foreach (var spId in skuGetRstInfo.specIdList) { - marketPrice = skuInfo.price.ParseToInt() + 1000; - //pddApi.Data["market_price"] = marketPrice; + specIndex++; + skuParam.spec.Add(new spec_param() { spec_id = spId, spec_name = spStrLst[specIndex] }); } - addPriceSkuInfoLst.Add(skuInfo); + skuParam.multi_price = skuInfo.multi_price; + skuParam.multi_price_in_yuan = skuInfo.multi_price_in_yuan.ParseToString(); + skuParam.price = skuInfo.price; + skuParam.price_in_yuan = skuInfo.price_in_yuan.ParseToString(); + + if (prodParam.market_price < skuParam.price + 1000) + { + prodParam.market_price = skuParam.price + 1000; + prodParam.market_price_in_yuan = (prodParam.market_price * 0.01).ParseToString(); + } + prodParam.skus.Add(skuParam); } - } - #endregion - - PDDProductUploadParam prodParam = new PDDProductUploadParam(); - prodParam.goods_id = actProd.goods_id; - prodParam.gallery = JsonHelper.DeserializeJsonToList(JsonHelper.SerializeObject(actProd.productInfo.detail.galleries)); - - // 生成正常加价的sku列表 - int index = -1; - prodParam.skus = new List(); - foreach (var skuGetRstInfo in actProd.lstPInfo.sku_list) - { - index++; - var skuInfo = addPriceSkuInfoLst.FirstOrDefault(s => s.out_sku_sn == skuGetRstInfo.outSkuSn); - if (skuInfo == null) - skuInfo = addPriceSkuInfoLst[index]; - - //var skuParam = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(skuGetRstInfo)); - var skuParam = new sku_param(); - skuParam.sku_id = skuGetRstInfo.skuId; - skuParam.thumb_url = skuGetRstInfo.skuThumbUrl; - skuParam.quantity_delta = skuGetRstInfo.skuQuantity; - skuParam.spec = new List(); - List spStrLst = skuGetRstInfo.newSpec.Split(',').ToList(); - int specIndex = -1; - foreach (var spId in skuGetRstInfo.specIdList) + prodParamLst.Add(prodParam); + Invoke(new Action(() => { - specIndex++; - skuParam.spec.Add(new spec_param() { spec_id = spId, spec_name = spStrLst[specIndex] }); - } - - skuParam.multi_price = skuInfo.multi_price; - skuParam.multi_price_in_yuan = skuInfo.multi_price_in_yuan.ParseToString(); - skuParam.price = skuInfo.price; - skuParam.price_in_yuan = skuInfo.price_in_yuan.ParseToString(); - - if (prodParam.market_price < skuParam.price + 1000) - { - prodParam.market_price = skuParam.price + 1000; - prodParam.market_price_in_yuan = (prodParam.market_price * 0.01).ParseToString(); - } - prodParam.skus.Add(skuParam); + row.Cells["colOpResult"].Value = "正在等待批量提交"; + })); } + // 筛除初始化不符合报名条件的商品所在列表行 + rowOperateLst = rowOperateLst.Where(r => prodParamLst.Any(p => p.goods_id == r.Cells["colSpuId"].Value.ParseToLong())).ToList(); bool sign22347 = chk22347.Checked && chk22347.Visible; bool sign20981 = chk20981.Checked && chk20981.Visible; @@ -2714,116 +3095,181 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms { Invoke(new Action(() => { - row.Cells["colOpResult"].Value = "未选择报名活动"; + foreach (var row in rowOperateLst) + row.Cells["colOpResult"].Value = "未选择报名活动"; })); break; } - string checkActivityRst = CheckActivity20981(shop, prodParam); - if (!checkActivityRst.Contains("校验成功")) + // 检测是否可以报名活动 + string checkActivityRst = "{\"success\":true,\"msg\":\"活动校验成功\",\"fail_list\":[]}"; + checkActivityRst = CheckActivity20981(shop, prodParamLst); + + // 完全失败直接返回 + if (!checkActivityRst.Contains("\"success\":true")) { Invoke(new Action(() => { - row.Cells["colOpResult"].Value = checkActivityRst; + foreach (var row in rowOperateLst) + row.Cells["colOpResult"].Value = BaseRegex.GetStringJson(ref checkActivityRst, "msg"); })); - if (checkActivityRst.Contains("所有活动报价均低于产品期望价格") && chkDownNoPrice.Checked) - { - // 处理下架 - var downProdRst = PDDProductUpDownForm.down_goods(shop, actProd.goods_id.ParseToString()); - for (int i = 0; i < 5 && !downProdRst.Contains("\"success\":true"); i++) - { - Thread.Sleep(Randomx.GetId(500, 1500)); - downProdRst = PDDProductUpDownForm.down_goods(shop, actProd.goods_id.ParseToString()); - } - if (!downProdRst.Contains("\"success\":true")) - { - Invoke(new Action(() => - { - var error = BaseRegex.GetStringJson(ref downProdRst, "errorMsg"); - if (string.IsNullOrEmpty(error)) - error = downProdRst; - row.Cells["colOpResult"].Value = checkActivityRst + " 尝试下架失败 " + error; - })); - } - else - { - Invoke(new Action(() => - { - row.Cells["colOpResult"].Value = checkActivityRst + " 下架成功"; - })); - } - } continue; } - if (prodParam.skus.Any(s => s.sku69_code == "yes" && s.quantity_delta > 0)) + var failStr = JsonHelper.SerializeObject(JsonHelper.JObjectParse(checkActivityRst)["fail_list"]); + var failList = JsonHelper.DeserializeJsonToList(failStr); + if (failList == null) + failList = new List(); + + if (1 == 1) { - PddEditProdStockQuantity prodQuantity = new PddEditProdStockQuantity(); - prodQuantity.data = new List(); - foreach (var sku in prodParam.skus) + foreach (var row in rowOperateLst) { - if (sku.sku69_code == "yes" && sku.quantity_delta > 0) + var fails = failList.Where(f => row.Cells["colSpuId"].Value.ParseToLong() == f.goods_id).ToList(); + if (fails.Count > 0) { - prodQuantity.data.Add(new quantityData() + Invoke(new Action(() => { - beforeQuantity = sku.quantity_delta, - goodsId = prodParam.goods_id, - quantity = -sku.quantity_delta, - skuId = sku.sku_id, - }); + row.Cells["colOpResult"].Value = string.Join("\r\n", fails.Select(f => f.error_msg)); + })); } } - var mdyQuantityRst = increase_prod_stock_quantity(shop, prodQuantity); - for (int i = 0; i < 5 && !mdyQuantityRst.Contains("\"success\":true"); i++) - { - Thread.Sleep(Randomx.GetId(500, 1500)); - mdyQuantityRst = increase_prod_stock_quantity(shop, prodQuantity); - } - if (!mdyQuantityRst.Contains("\"success\":true")) - { - var error = BaseRegex.GetStringJson(ref mdyQuantityRst, "error_msg"); - if (string.IsNullOrEmpty(error)) - error = mdyQuantityRst; - Invoke(new Action(() => - { - row.Cells["colOpResult"].Value = "商品编辑失败 " + error; - })); - continue; - } - else + // 删除校验未通过的商品 + var goodsIds = failList.Select(f => f.goods_id).ToList(); + prodParamLst.RemoveAll(p => goodsIds.Contains(p.goods_id)); + // 筛除校验未通过的商品所在的列表行 + rowOperateLst = rowOperateLst.Where(r => prodParamLst.Any(p => p.goods_id == r.Cells["colSpuId"].Value.ParseToLong())).ToList(); + + // 处理因报价低,需要下架的商品 + goodsIds = failList.Where(f => f.error_msg.Contains("所有活动报价均低于产品期望价格")).Select(f => f.goods_id).ToList(); + if (chkDownNoPrice.Checked) { - foreach (var sku in prodParam.skus) + if (goodsIds.Count > 0) { - if (sku.sku69_code == "yes" && sku.quantity_delta > 0) + var rws = dgvActProduct.Rows.Cast().Where(r => goodsIds.Contains(r.Cells["colSpuId"].Value.ParseToLong())).ToList(); + var downProdRst = ""; + for (int i = 0; i < 5 && !downProdRst.Contains("\"success\":true"); i++) { - sku.quantity_delta = 0; + Thread.Sleep(Randomx.GetId(500, 1500)); + downProdRst = PDDProductUpDownForm.down_goods(shop, string.Join(",", goodsIds)); + } + if (!downProdRst.Contains("\"success\":true")) + { + Invoke(new Action(() => + { + var error = BaseRegex.GetStringJson(ref downProdRst, "errorMsg"); + if (string.IsNullOrEmpty(error)) + error = downProdRst; + foreach (var rw in rws) + rw.Cells["colOpResult"].Value += " 尝试下架失败 " + error; + })); + } + else + { + Invoke(new Action(() => + { + foreach (var rw in rws) + rw.Cells["colOpResult"].Value += " 下架成功"; + })); } } } + + goodsIds = new List(); + // 编辑部分sku价格不可报价商品 + foreach (var prodParam in prodParamLst) + { + if (prodParam.skus.Any(s => s.sku69_code == "yes" && s.quantity_delta > 0)) + { + var rws = rowOperateLst.Where(r => prodParam.goods_id == r.Cells["colSpuId"].Value.ParseToLong()).ToList(); + Invoke(new Action(() => + { + foreach (var rw in rws) + rw.Cells["colOpResult"].Value += " 正在优化商品以报名活动"; + })); + Thread.Sleep(Randomx.GetId(3000, 5000)); + + PddEditProdStockQuantity prodQuantity = new PddEditProdStockQuantity(); + prodQuantity.data = new List(); + foreach (var sku in prodParam.skus) + { + if (sku.sku69_code == "yes" && sku.quantity_delta > 0) + { + prodQuantity.data.Add(new quantityData() + { + beforeQuantity = sku.quantity_delta, + goodsId = prodParam.goods_id, + quantity = -sku.quantity_delta, + skuId = sku.sku_id, + }); + } + } + var mdyQuantityRst = increase_prod_stock_quantity(shop, prodQuantity); + for (int i = 0; i < 5 && !mdyQuantityRst.Contains("\"success\":true"); i++) + { + Thread.Sleep(Randomx.GetId(500, 1500)); + mdyQuantityRst = increase_prod_stock_quantity(shop, prodQuantity); + } + if (!mdyQuantityRst.Contains("\"success\":true")) + { + goodsIds.Add(prodParam.goods_id); + var error = BaseRegex.GetStringJson(ref mdyQuantityRst, "error_msg"); + if (string.IsNullOrEmpty(error)) + error = mdyQuantityRst; + + Invoke(new Action(() => + { + foreach (var rw in rws) + rw.Cells["colOpResult"].Value = rw.Cells["colOpResult"].Value.ParseToString().Replace("正在优化商品以报名活动", "商品优化失败 " + error); + })); + continue; + } + else + { + foreach (var sku in prodParam.skus) + { + if (sku.sku69_code == "yes" && sku.quantity_delta > 0) + { + sku.quantity_delta = 0; + } + } + } + } + } + prodParamLst.RemoveAll(p => goodsIds.Contains(p.goods_id)); + // 筛除修改未给价sku失败的商品所在的列表行 + rowOperateLst = rowOperateLst.Where(r => prodParamLst.Any(p => p.goods_id == r.Cells["colSpuId"].Value.ParseToLong())).ToList(); } - string activityRsts = SignActivity(shop, prodParam, sign22347, sign20981, sign21365, sign15996, sign23513, sign23730, sign23456); - var activityRstArr = activityRsts.Split(new string[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); - var actSuccessStr = ""; - var actFailStr = ""; - foreach (var actRst in activityRstArr) + string activityRsts = SignActivity(shop, prodParamLst, sign22347, sign20981, sign21365, sign15996, sign23513, sign23730, sign23456); + failList = JsonHelper.DeserializeJsonToList(activityRsts); + foreach (var prodParam in prodParamLst) { - if (actRst.Contains("报名成功")) - actSuccessStr += " " + actRst; - else - actFailStr += "\r\n" + actRst; + var prodActRsts = failList.Where(f => f.goods_id == prodParam.goods_id); + var actSuccessStr = ""; + var actFailStr = ""; + foreach (var actRst in prodActRsts) + { + if (actRst.error_msg.Contains("报名成功")) + actSuccessStr += " " + actRst.error_msg; + else + actFailStr += "\r\n" + actRst.error_msg; + } + Invoke(new Action(() => + { + var rws = rowOperateLst.Where(r => prodParam.goods_id == r.Cells["colSpuId"].Value.ParseToLong()).ToList(); + foreach (var rw in rws) + rw.Cells["colOpResult"].Value = (actSuccessStr + actFailStr).Trim('\r', '\n', ' '); + })); } - Invoke(new Action(() => - { - row.Cells["colOpResult"].Value = (actSuccessStr + actFailStr).Trim('\r', '\n', ' '); - })); } catch (Exception ex) { Invoke(new Action(() => { - row.Cells["colOpResult"].Value = "发生错误 " + ex.Message; + foreach (var rw in rowOperateLst) + rw.Cells["colOpResult"].Value = "发生错误 " + ex.Message; })); } } @@ -2928,8 +3374,13 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms private void txtSleepTime_TextChanged(object sender, EventArgs e) { moreSleepTime = txtSleepTime.Text.Trim().ParseToDecimal(); - if (moreSleepTime < 5) - moreSleepTime = 5; + if (moreSleepTime < 0) + moreSleepTime = 0; + } + + private void txtMultiCnt_TextChanged(object sender, EventArgs e) + { + } } @@ -2962,4 +3413,10 @@ namespace TemuKJD.PDDForms.ProductForms.ActivityForms /// public bool sign23456 { get; set; } } + + public class AddActivityFailInfo + { + public long? goods_id { get; set; } + public string error_msg { get; set; } + } } diff --git a/TEMUKJD/PDDForms/ProductForms/PDDProductUpDownForm.cs b/TEMUKJD/PDDForms/ProductForms/PDDProductUpDownForm.cs index c71f298..5d25d72 100644 --- a/TEMUKJD/PDDForms/ProductForms/PDDProductUpDownForm.cs +++ b/TEMUKJD/PDDForms/ProductForms/PDDProductUpDownForm.cs @@ -512,7 +512,7 @@ namespace TemuKJD.PDDForms.ProductForms { Thread.Sleep(Randomx.GetId(500, 1500)); anti = shop.AntiContents[Randomx.GetId(shop.AntiContents.Count)]; - body = @"{""goodsIds"":" + prodIds + @",""crawlerInfo"":""" + anti + @"""}"; + body = @"{""goodsIds"":[" + prodIds + @"],""crawlerInfo"":""" + anti + @"""}"; result = HttpResponseBLL.PDDPostResponse(shop, url, body.Replace("0asAntiContent", anti), refere, anti); } } diff --git a/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdUserSelectForm.cs b/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdUserSelectForm.cs index 2f597d1..6ae2cd0 100644 --- a/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdUserSelectForm.cs +++ b/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdUserSelectForm.cs @@ -7269,6 +7269,8 @@ Content-Type: image/jpeg } KJDDBProduct dbProd = selectProd.kjdDbProduct; + if (dbProd == null) + dbProd = GetProductDetail(selectProd.out_product_Id.ToString()); if (dbProd == null) dbProd = GetProductDetail(selectProd.out_product_Id.ToString()); if (!string.IsNullOrEmpty(dbProd.secret_spu_id)) diff --git a/TEMUKJD/WXForms/ProductForms/WXUserProdListForm.Designer.cs b/TEMUKJD/WXForms/ProductForms/WXUserProdListForm.Designer.cs index 8fe73a0..fa314c7 100644 --- a/TEMUKJD/WXForms/ProductForms/WXUserProdListForm.Designer.cs +++ b/TEMUKJD/WXForms/ProductForms/WXUserProdListForm.Designer.cs @@ -420,7 +420,7 @@ namespace TemuKJD.WXForms.ProductForms this.cmbCat3.DropDownWidth = 1; this.cmbCat3.FormattingEnabled = true; this.cmbCat3.IntegralHeight = false; - this.cmbCat3.Location = new System.Drawing.Point(718, 5); + this.cmbCat3.Location = new System.Drawing.Point(718, 7); this.cmbCat3.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3); this.cmbCat3.Name = "cmbCat3"; this.cmbCat3.Size = new System.Drawing.Size(146, 25); @@ -448,7 +448,7 @@ namespace TemuKJD.WXForms.ProductForms this.cmbCat2.DropDownWidth = 1; this.cmbCat2.FormattingEnabled = true; this.cmbCat2.IntegralHeight = false; - this.cmbCat2.Location = new System.Drawing.Point(515, 5); + this.cmbCat2.Location = new System.Drawing.Point(515, 7); this.cmbCat2.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3); this.cmbCat2.Name = "cmbCat2"; this.cmbCat2.Size = new System.Drawing.Size(146, 25); @@ -476,7 +476,7 @@ namespace TemuKJD.WXForms.ProductForms this.cmbCat1.DropDownWidth = 1; this.cmbCat1.FormattingEnabled = true; this.cmbCat1.IntegralHeight = false; - this.cmbCat1.Location = new System.Drawing.Point(293, 7); + this.cmbCat1.Location = new System.Drawing.Point(293, 5); this.cmbCat1.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3); this.cmbCat1.Name = "cmbCat1"; this.cmbCat1.Size = new System.Drawing.Size(146, 25); @@ -536,7 +536,7 @@ namespace TemuKJD.WXForms.ProductForms "安全+未校验", "安全商品", "未校验"}); - this.cmbWxSafe.Location = new System.Drawing.Point(71, 42); + this.cmbWxSafe.Location = new System.Drawing.Point(71, 40); this.cmbWxSafe.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3); this.cmbWxSafe.Name = "cmbWxSafe"; this.cmbWxSafe.Size = new System.Drawing.Size(146, 25); @@ -559,7 +559,7 @@ namespace TemuKJD.WXForms.ProductForms // this.cmbGroupFilter.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); this.cmbGroupFilter.FormattingEnabled = true; - this.cmbGroupFilter.Location = new System.Drawing.Point(938, 5); + this.cmbGroupFilter.Location = new System.Drawing.Point(938, 7); this.cmbGroupFilter.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3); this.cmbGroupFilter.Name = "cmbGroupFilter"; this.cmbGroupFilter.Size = new System.Drawing.Size(146, 25); @@ -580,7 +580,7 @@ namespace TemuKJD.WXForms.ProductForms "机会商品", "以图搜品", "外部数据"}); - this.cmbSourceType.Location = new System.Drawing.Point(718, 40); + this.cmbSourceType.Location = new System.Drawing.Point(718, 42); this.cmbSourceType.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3); this.cmbSourceType.Name = "cmbSourceType"; this.cmbSourceType.Size = new System.Drawing.Size(146, 25); @@ -610,7 +610,7 @@ namespace TemuKJD.WXForms.ProductForms "", "是", "否"}); - this.cmbRelation.Location = new System.Drawing.Point(938, 40); + this.cmbRelation.Location = new System.Drawing.Point(938, 42); this.cmbRelation.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3); this.cmbRelation.Name = "cmbRelation"; this.cmbRelation.Size = new System.Drawing.Size(146, 25); diff --git a/TEMUKJD/WXForms/TalkForms/BuyerOrderListForm.Designer.cs b/TEMUKJD/WXForms/TalkForms/BuyerOrderListForm.Designer.cs index 4ca7935..e2086a8 100644 --- a/TEMUKJD/WXForms/TalkForms/BuyerOrderListForm.Designer.cs +++ b/TEMUKJD/WXForms/TalkForms/BuyerOrderListForm.Designer.cs @@ -44,10 +44,10 @@ namespace TemuKJD.WXForms.TalkForms System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BuyerOrderListForm)); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.btnStopStop = new DevComponents.DotNetBar.PanelEx(); this.chkPause = new TemuKJD.UserComponent.UcCheckBox(this.components); this.btnCheck = new DevComponents.DotNetBar.PanelEx(); this.btnRefresh = new DevComponents.DotNetBar.PanelEx(); - this.btnStopStop = new DevComponents.DotNetBar.PanelEx(); this.btnSearch = new DevComponents.DotNetBar.PanelEx(); this.btnAddBuyler = new DevComponents.DotNetBar.PanelEx(); this.btnDel = new DevComponents.DotNetBar.PanelEx(); @@ -80,6 +80,7 @@ namespace TemuKJD.WXForms.TalkForms this.panelEx2 = new DevComponents.DotNetBar.PanelEx(); this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); this.panel2 = new System.Windows.Forms.Panel(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.lblMsg = new System.Windows.Forms.Label(); this.btnRestore = new DevComponents.DotNetBar.PanelEx(); this.txtOrderSnFilter = new System.Windows.Forms.TextBox(); @@ -99,6 +100,7 @@ namespace TemuKJD.WXForms.TalkForms this.colOExpressId = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.colOMsg = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.colSend = new System.Windows.Forms.DataGridViewLinkColumn(); + this.colAfterSale = new System.Windows.Forms.DataGridViewLinkColumn(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.btnFilter = new DevComponents.DotNetBar.PanelEx(); this.label3 = new System.Windows.Forms.Label(); @@ -113,6 +115,7 @@ namespace TemuKJD.WXForms.TalkForms this.chkOnlyShowCurrentShop = new TemuKJD.UserComponent.UcCheckBox(this.components); this.lblCurrentShop = new System.Windows.Forms.Label(); this.statusBar = new TemuKJD.UserControls.StatusBarUserControl(); + this.chkAutoAfterSale = new TemuKJD.UserComponent.UcCheckBox(this.components); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); this.splitContainer1.Panel1.SuspendLayout(); this.splitContainer1.Panel2.SuspendLayout(); @@ -129,6 +132,7 @@ namespace TemuKJD.WXForms.TalkForms this.splitContainer3.Panel2.SuspendLayout(); this.splitContainer3.SuspendLayout(); this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dgvPddBuyerOrder)).BeginInit(); this.tableLayoutPanel1.SuspendLayout(); this.SuspendLayout(); @@ -144,10 +148,11 @@ namespace TemuKJD.WXForms.TalkForms // // splitContainer1.Panel1 // + this.splitContainer1.Panel1.Controls.Add(this.chkAutoAfterSale); + this.splitContainer1.Panel1.Controls.Add(this.btnStopStop); this.splitContainer1.Panel1.Controls.Add(this.chkPause); this.splitContainer1.Panel1.Controls.Add(this.btnCheck); this.splitContainer1.Panel1.Controls.Add(this.btnRefresh); - this.splitContainer1.Panel1.Controls.Add(this.btnStopStop); this.splitContainer1.Panel1.Controls.Add(this.btnSearch); this.splitContainer1.Panel1.Controls.Add(this.btnAddBuyler); this.splitContainer1.Panel1.Controls.Add(this.btnDel); @@ -157,14 +162,38 @@ namespace TemuKJD.WXForms.TalkForms this.splitContainer1.Panel2.Controls.Add(this.pbLoading); this.splitContainer1.Panel2.Controls.Add(this.dgvWxOrder); this.splitContainer1.Panel2.Controls.Add(this.dgvBuyer); - this.splitContainer1.Size = new System.Drawing.Size(372, 657); - this.splitContainer1.SplitterDistance = 78; + this.splitContainer1.Size = new System.Drawing.Size(364, 657); + this.splitContainer1.SplitterDistance = 90; this.splitContainer1.TabIndex = 1; // + // btnStopStop + // + this.btnStopStop.CanvasColor = System.Drawing.SystemColors.Control; + this.btnStopStop.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnStopStop.DisabledBackColor = System.Drawing.Color.Empty; + this.btnStopStop.Location = new System.Drawing.Point(286, 38); + this.btnStopStop.Name = "btnStopStop"; + this.btnStopStop.Size = new System.Drawing.Size(67, 25); + this.btnStopStop.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopStop.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopStop.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); + this.btnStopStop.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnStopStop.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopStop.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.btnStopStop.Style.GradientAngle = 90; + this.btnStopStop.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopStop.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnStopStop.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopStop.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnStopStop.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.btnStopStop.TabIndex = 878; + this.btnStopStop.Text = "停止查询"; + this.btnStopStop.Click += new System.EventHandler(this.btnStopStop_Click); + // // chkPause // this.chkPause.AutoSize = true; - this.chkPause.Location = new System.Drawing.Point(246, 41); + this.chkPause.Location = new System.Drawing.Point(242, 40); this.chkPause.Name = "chkPause"; this.chkPause.Size = new System.Drawing.Size(51, 21); this.chkPause.TabIndex = 937; @@ -178,7 +207,7 @@ namespace TemuKJD.WXForms.TalkForms this.btnCheck.Cursor = System.Windows.Forms.Cursors.Hand; this.btnCheck.DisabledBackColor = System.Drawing.Color.Empty; this.btnCheck.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnCheck.Location = new System.Drawing.Point(126, 39); + this.btnCheck.Location = new System.Drawing.Point(126, 51); this.btnCheck.Name = "btnCheck"; this.btnCheck.Size = new System.Drawing.Size(98, 25); this.btnCheck.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -202,7 +231,7 @@ namespace TemuKJD.WXForms.TalkForms this.btnRefresh.Cursor = System.Windows.Forms.Cursors.Hand; this.btnRefresh.DisabledBackColor = System.Drawing.Color.Empty; this.btnRefresh.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnRefresh.Location = new System.Drawing.Point(126, 10); + this.btnRefresh.Location = new System.Drawing.Point(126, 13); this.btnRefresh.Name = "btnRefresh"; this.btnRefresh.Size = new System.Drawing.Size(98, 25); this.btnRefresh.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -220,39 +249,15 @@ namespace TemuKJD.WXForms.TalkForms this.btnRefresh.Text = "刷新买手号"; this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click); // - // btnStopStop - // - this.btnStopStop.CanvasColor = System.Drawing.SystemColors.Control; - this.btnStopStop.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; - this.btnStopStop.DisabledBackColor = System.Drawing.Color.Empty; - this.btnStopStop.Location = new System.Drawing.Point(297, 39); - this.btnStopStop.Name = "btnStopStop"; - this.btnStopStop.Size = new System.Drawing.Size(67, 25); - this.btnStopStop.Style.Alignment = System.Drawing.StringAlignment.Center; - this.btnStopStop.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); - this.btnStopStop.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(185)))), ((int)(((byte)(215)))), ((int)(((byte)(255))))); - this.btnStopStop.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; - this.btnStopStop.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); - this.btnStopStop.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; - this.btnStopStop.Style.GradientAngle = 90; - this.btnStopStop.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; - this.btnStopStop.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; - this.btnStopStop.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); - this.btnStopStop.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); - this.btnStopStop.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; - this.btnStopStop.TabIndex = 878; - this.btnStopStop.Text = "停止查询"; - this.btnStopStop.Click += new System.EventHandler(this.btnStopStop_Click); - // // btnSearch // this.btnSearch.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.btnSearch.Cursor = System.Windows.Forms.Cursors.Hand; this.btnSearch.DisabledBackColor = System.Drawing.Color.Empty; this.btnSearch.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnSearch.Location = new System.Drawing.Point(246, 10); + this.btnSearch.Location = new System.Drawing.Point(242, 8); this.btnSearch.Name = "btnSearch"; - this.btnSearch.Size = new System.Drawing.Size(118, 25); + this.btnSearch.Size = new System.Drawing.Size(111, 25); this.btnSearch.Style.Alignment = System.Drawing.StringAlignment.Center; this.btnSearch.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); this.btnSearch.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); @@ -274,7 +279,7 @@ namespace TemuKJD.WXForms.TalkForms this.btnAddBuyler.Cursor = System.Windows.Forms.Cursors.Hand; this.btnAddBuyler.DisabledBackColor = System.Drawing.Color.Empty; this.btnAddBuyler.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnAddBuyler.Location = new System.Drawing.Point(10, 10); + this.btnAddBuyler.Location = new System.Drawing.Point(10, 13); this.btnAddBuyler.Name = "btnAddBuyler"; this.btnAddBuyler.Size = new System.Drawing.Size(98, 25); this.btnAddBuyler.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -298,7 +303,7 @@ namespace TemuKJD.WXForms.TalkForms this.btnDel.Cursor = System.Windows.Forms.Cursors.Hand; this.btnDel.DisabledBackColor = System.Drawing.Color.Empty; this.btnDel.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnDel.Location = new System.Drawing.Point(10, 39); + this.btnDel.Location = new System.Drawing.Point(10, 51); this.btnDel.Name = "btnDel"; this.btnDel.Size = new System.Drawing.Size(98, 25); this.btnDel.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -320,7 +325,7 @@ namespace TemuKJD.WXForms.TalkForms // this.pbLoading.Anchor = System.Windows.Forms.AnchorStyles.None; this.pbLoading.Image = global::TemuKJD.Properties.Resources.loading_blue; - this.pbLoading.Location = new System.Drawing.Point(161, 262); + this.pbLoading.Location = new System.Drawing.Point(157, 256); this.pbLoading.Name = "pbLoading"; this.pbLoading.Size = new System.Drawing.Size(50, 50); this.pbLoading.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; @@ -498,7 +503,7 @@ namespace TemuKJD.WXForms.TalkForms this.dgvBuyer.ReadOnly = true; this.dgvBuyer.RowHeadersWidth = 25; this.dgvBuyer.RowTemplate.Height = 23; - this.dgvBuyer.Size = new System.Drawing.Size(372, 575); + this.dgvBuyer.Size = new System.Drawing.Size(364, 563); this.dgvBuyer.TabIndex = 7; this.dgvBuyer.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); // @@ -608,7 +613,7 @@ namespace TemuKJD.WXForms.TalkForms this.splitContainer3.Panel2.Controls.Add(this.chkOnlyShowCurrentShop); this.splitContainer3.Panel2.Controls.Add(this.lblCurrentShop); this.splitContainer3.Size = new System.Drawing.Size(1430, 657); - this.splitContainer3.SplitterDistance = 372; + this.splitContainer3.SplitterDistance = 364; this.splitContainer3.TabIndex = 8; // // panelEx3 @@ -618,7 +623,7 @@ namespace TemuKJD.WXForms.TalkForms this.panelEx3.Cursor = System.Windows.Forms.Cursors.Hand; this.panelEx3.DisabledBackColor = System.Drawing.Color.Empty; this.panelEx3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.panelEx3.Location = new System.Drawing.Point(497, 638); + this.panelEx3.Location = new System.Drawing.Point(501, 638); this.panelEx3.Name = "panelEx3"; this.panelEx3.Size = new System.Drawing.Size(61, 20); this.panelEx3.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -634,7 +639,7 @@ namespace TemuKJD.WXForms.TalkForms this.panelEx3.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); this.panelEx3.TabIndex = 898; this.panelEx3.Text = "折叠"; - this.panelEx3.Click += new System.EventHandler(this.panelEx3_Click); + this.panelEx3.Click += new System.EventHandler(this.btnClose_Click); // // panelEx2 // @@ -643,7 +648,7 @@ namespace TemuKJD.WXForms.TalkForms this.panelEx2.Cursor = System.Windows.Forms.Cursors.Hand; this.panelEx2.DisabledBackColor = System.Drawing.Color.Empty; this.panelEx2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.panelEx2.Location = new System.Drawing.Point(1030, 624); + this.panelEx2.Location = new System.Drawing.Point(1038, 624); this.panelEx2.Name = "panelEx2"; this.panelEx2.Size = new System.Drawing.Size(24, 25); this.panelEx2.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -669,7 +674,7 @@ namespace TemuKJD.WXForms.TalkForms this.panelEx1.Cursor = System.Windows.Forms.Cursors.Hand; this.panelEx1.DisabledBackColor = System.Drawing.Color.Empty; this.panelEx1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.panelEx1.Location = new System.Drawing.Point(1030, 593); + this.panelEx1.Location = new System.Drawing.Point(1038, 593); this.panelEx1.Name = "panelEx1"; this.panelEx1.Size = new System.Drawing.Size(24, 25); this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -690,6 +695,7 @@ namespace TemuKJD.WXForms.TalkForms // // panel2 // + this.panel2.Controls.Add(this.pictureBox1); this.panel2.Controls.Add(this.lblMsg); this.panel2.Controls.Add(this.btnRestore); this.panel2.Controls.Add(this.txtOrderSnFilter); @@ -698,13 +704,24 @@ namespace TemuKJD.WXForms.TalkForms this.panel2.Dock = System.Windows.Forms.DockStyle.Bottom; this.panel2.Location = new System.Drawing.Point(0, 312); this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(1054, 345); + this.panel2.Size = new System.Drawing.Size(1062, 345); this.panel2.TabIndex = 908; // + // pictureBox1 + // + this.pictureBox1.Anchor = System.Windows.Forms.AnchorStyles.None; + this.pictureBox1.Image = global::TemuKJD.Properties.Resources.loading_blue; + this.pictureBox1.Location = new System.Drawing.Point(506, 147); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(50, 50); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBox1.TabIndex = 921; + this.pictureBox1.TabStop = false; + // // lblMsg // this.lblMsg.AutoSize = true; - this.lblMsg.Location = new System.Drawing.Point(400, 13); + this.lblMsg.Location = new System.Drawing.Point(400, 15); this.lblMsg.Name = "lblMsg"; this.lblMsg.Size = new System.Drawing.Size(48, 17); this.lblMsg.TabIndex = 914; @@ -716,7 +733,7 @@ namespace TemuKJD.WXForms.TalkForms this.btnRestore.CanvasColor = System.Drawing.SystemColors.Control; this.btnRestore.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.btnRestore.DisabledBackColor = System.Drawing.Color.Empty; - this.btnRestore.Location = new System.Drawing.Point(318, 10); + this.btnRestore.Location = new System.Drawing.Point(318, 12); this.btnRestore.Name = "btnRestore"; this.btnRestore.Size = new System.Drawing.Size(61, 23); this.btnRestore.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -737,7 +754,7 @@ namespace TemuKJD.WXForms.TalkForms // // txtOrderSnFilter // - this.txtOrderSnFilter.Location = new System.Drawing.Point(3, 10); + this.txtOrderSnFilter.Location = new System.Drawing.Point(3, 12); this.txtOrderSnFilter.Name = "txtOrderSnFilter"; this.txtOrderSnFilter.Size = new System.Drawing.Size(242, 23); this.txtOrderSnFilter.TabIndex = 903; @@ -748,7 +765,7 @@ namespace TemuKJD.WXForms.TalkForms this.btnFilterOrder.Cursor = System.Windows.Forms.Cursors.Hand; this.btnFilterOrder.DisabledBackColor = System.Drawing.Color.Empty; this.btnFilterOrder.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnFilterOrder.Location = new System.Drawing.Point(251, 10); + this.btnFilterOrder.Location = new System.Drawing.Point(251, 12); this.btnFilterOrder.Name = "btnFilterOrder"; this.btnFilterOrder.Size = new System.Drawing.Size(61, 23); this.btnFilterOrder.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -802,13 +819,14 @@ namespace TemuKJD.WXForms.TalkForms this.colOExpressName, this.colOExpressId, this.colOMsg, - this.colSend}); - this.dgvPddBuyerOrder.Location = new System.Drawing.Point(2, 42); + this.colSend, + this.colAfterSale}); + this.dgvPddBuyerOrder.Location = new System.Drawing.Point(2, 45); this.dgvPddBuyerOrder.MultiSelectCheckBox = true; this.dgvPddBuyerOrder.Name = "dgvPddBuyerOrder"; this.dgvPddBuyerOrder.ReadOnly = true; this.dgvPddBuyerOrder.RowTemplate.Height = 23; - this.dgvPddBuyerOrder.Size = new System.Drawing.Size(1049, 300); + this.dgvPddBuyerOrder.Size = new System.Drawing.Size(1057, 300); this.dgvPddBuyerOrder.TabIndex = 886; this.dgvPddBuyerOrder.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvPddBuyerOrder_CellContentClick); // @@ -917,6 +935,14 @@ namespace TemuKJD.WXForms.TalkForms this.colSend.Resizable = System.Windows.Forms.DataGridViewTriState.True; this.colSend.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; // + // colAfterSale + // + this.colAfterSale.FillWeight = 50F; + this.colAfterSale.HeaderText = "退货"; + this.colAfterSale.Name = "colAfterSale"; + this.colAfterSale.ReadOnly = true; + this.colAfterSale.Visible = false; + // // tableLayoutPanel1 // this.tableLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) @@ -952,7 +978,7 @@ namespace TemuKJD.WXForms.TalkForms this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33444F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33445F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33112F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(888, 105); + this.tableLayoutPanel1.Size = new System.Drawing.Size(896, 105); this.tableLayoutPanel1.TabIndex = 679; this.tableLayoutPanel1.Visible = false; // @@ -963,7 +989,7 @@ namespace TemuKJD.WXForms.TalkForms this.btnFilter.Cursor = System.Windows.Forms.Cursors.Hand; this.btnFilter.DisabledBackColor = System.Drawing.Color.Empty; this.btnFilter.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnFilter.Location = new System.Drawing.Point(815, 40); + this.btnFilter.Location = new System.Drawing.Point(823, 40); this.btnFilter.Name = "btnFilter"; this.btnFilter.Size = new System.Drawing.Size(69, 25); this.btnFilter.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -999,7 +1025,7 @@ namespace TemuKJD.WXForms.TalkForms this.pnlEmpty.CanvasColor = System.Drawing.SystemColors.Control; this.pnlEmpty.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.pnlEmpty.DisabledBackColor = System.Drawing.Color.Empty; - this.pnlEmpty.Location = new System.Drawing.Point(763, 40); + this.pnlEmpty.Location = new System.Drawing.Point(771, 40); this.pnlEmpty.Name = "pnlEmpty"; this.pnlEmpty.Size = new System.Drawing.Size(46, 25); this.pnlEmpty.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -1023,7 +1049,7 @@ namespace TemuKJD.WXForms.TalkForms // this.label17.Anchor = System.Windows.Forms.AnchorStyles.Right; this.label17.AutoSize = true; - this.label17.Location = new System.Drawing.Point(187, 44); + this.label17.Location = new System.Drawing.Point(189, 44); this.label17.Margin = new System.Windows.Forms.Padding(3, 0, 0, 0); this.label17.Name = "label17"; this.label17.Size = new System.Drawing.Size(56, 17); @@ -1034,10 +1060,10 @@ namespace TemuKJD.WXForms.TalkForms // txtMobile // this.txtMobile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.txtMobile.Location = new System.Drawing.Point(243, 41); + this.txtMobile.Location = new System.Drawing.Point(245, 41); this.txtMobile.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3); this.txtMobile.Name = "txtMobile"; - this.txtMobile.Size = new System.Drawing.Size(122, 23); + this.txtMobile.Size = new System.Drawing.Size(124, 23); this.txtMobile.TabIndex = 428; this.txtMobile.Visible = false; // @@ -1047,7 +1073,7 @@ namespace TemuKJD.WXForms.TalkForms this.txtOrderSn.Location = new System.Drawing.Point(59, 41); this.txtOrderSn.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3); this.txtOrderSn.Name = "txtOrderSn"; - this.txtOrderSn.Size = new System.Drawing.Size(122, 23); + this.txtOrderSn.Size = new System.Drawing.Size(124, 23); this.txtOrderSn.TabIndex = 427; this.txtOrderSn.Visible = false; // @@ -1055,7 +1081,7 @@ namespace TemuKJD.WXForms.TalkForms // this.label2.Anchor = System.Windows.Forms.AnchorStyles.Right; this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(371, 44); + this.label2.Location = new System.Drawing.Point(375, 44); this.label2.Margin = new System.Windows.Forms.Padding(3, 0, 0, 0); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(68, 17); @@ -1066,9 +1092,9 @@ namespace TemuKJD.WXForms.TalkForms // dtpStartTime // this.dtpStartTime.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.dtpStartTime.Location = new System.Drawing.Point(442, 41); + this.dtpStartTime.Location = new System.Drawing.Point(446, 41); this.dtpStartTime.Name = "dtpStartTime"; - this.dtpStartTime.Size = new System.Drawing.Size(119, 23); + this.dtpStartTime.Size = new System.Drawing.Size(121, 23); this.dtpStartTime.TabIndex = 812; this.dtpStartTime.Visible = false; // @@ -1076,7 +1102,7 @@ namespace TemuKJD.WXForms.TalkForms // this.label14.Anchor = System.Windows.Forms.AnchorStyles.Right; this.label14.AutoSize = true; - this.label14.Location = new System.Drawing.Point(567, 44); + this.label14.Location = new System.Drawing.Point(573, 44); this.label14.Margin = new System.Windows.Forms.Padding(3, 0, 0, 0); this.label14.Name = "label14"; this.label14.Size = new System.Drawing.Size(68, 17); @@ -1087,9 +1113,9 @@ namespace TemuKJD.WXForms.TalkForms // dtpEndTime // this.dtpEndTime.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.dtpEndTime.Location = new System.Drawing.Point(638, 41); + this.dtpEndTime.Location = new System.Drawing.Point(644, 41); this.dtpEndTime.Name = "dtpEndTime"; - this.dtpEndTime.Size = new System.Drawing.Size(119, 23); + this.dtpEndTime.Size = new System.Drawing.Size(121, 23); this.dtpEndTime.TabIndex = 813; this.dtpEndTime.Visible = false; // @@ -1097,7 +1123,7 @@ namespace TemuKJD.WXForms.TalkForms // this.chkOnlyShowCurrentShop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.chkOnlyShowCurrentShop.AutoSize = true; - this.chkOnlyShowCurrentShop.Location = new System.Drawing.Point(30, 498); + this.chkOnlyShowCurrentShop.Location = new System.Drawing.Point(38, 498); this.chkOnlyShowCurrentShop.Name = "chkOnlyShowCurrentShop"; this.chkOnlyShowCurrentShop.Size = new System.Drawing.Size(135, 21); this.chkOnlyShowCurrentShop.TabIndex = 885; @@ -1110,7 +1136,7 @@ namespace TemuKJD.WXForms.TalkForms this.lblCurrentShop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.lblCurrentShop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.lblCurrentShop.ForeColor = System.Drawing.Color.DarkOrange; - this.lblCurrentShop.Location = new System.Drawing.Point(179, 498); + this.lblCurrentShop.Location = new System.Drawing.Point(187, 498); this.lblCurrentShop.Margin = new System.Windows.Forms.Padding(6, 0, 0, 0); this.lblCurrentShop.Name = "lblCurrentShop"; this.lblCurrentShop.Size = new System.Drawing.Size(214, 17); @@ -1130,6 +1156,16 @@ namespace TemuKJD.WXForms.TalkForms this.statusBar.Size = new System.Drawing.Size(1438, 25); this.statusBar.TabIndex = 5; // + // chkAutoAfterSale + // + this.chkAutoAfterSale.Location = new System.Drawing.Point(242, 64); + this.chkAutoAfterSale.Name = "chkAutoAfterSale"; + this.chkAutoAfterSale.Size = new System.Drawing.Size(113, 21); + this.chkAutoAfterSale.TabIndex = 953; + this.chkAutoAfterSale.Text = "未发货单自动售后"; + this.chkAutoAfterSale.UseVisualStyleBackColor = true; + this.chkAutoAfterSale.CheckedChanged += new System.EventHandler(this.chkAutoAfterSale_CheckedChanged); + // // BuyerOrderListForm // this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; @@ -1166,6 +1202,7 @@ namespace TemuKJD.WXForms.TalkForms this.splitContainer3.ResumeLayout(false); this.panel2.ResumeLayout(false); this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.dgvPddBuyerOrder)).EndInit(); this.tableLayoutPanel1.ResumeLayout(false); this.tableLayoutPanel1.PerformLayout(); @@ -1225,6 +1262,13 @@ namespace TemuKJD.WXForms.TalkForms private DevComponents.DotNetBar.PanelEx panelEx3; private DevComponents.DotNetBar.PanelEx panelEx2; private DevComponents.DotNetBar.PanelEx panelEx1; + private UserComponent.UcCheckBox chkPause; + private System.Windows.Forms.Panel panel2; + private DevComponents.DotNetBar.PanelEx btnRestore; + private System.Windows.Forms.TextBox txtOrderSnFilter; + private DevComponents.DotNetBar.PanelEx btnFilterOrder; + private System.Windows.Forms.Label lblMsg; + private System.Windows.Forms.PictureBox pictureBox1; private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1; private System.Windows.Forms.DataGridViewTextBoxColumn colOBuyerId; private System.Windows.Forms.DataGridViewTextBoxColumn colOBuyerName; @@ -1239,11 +1283,7 @@ namespace TemuKJD.WXForms.TalkForms private System.Windows.Forms.DataGridViewTextBoxColumn colOExpressId; private System.Windows.Forms.DataGridViewTextBoxColumn colOMsg; private System.Windows.Forms.DataGridViewLinkColumn colSend; - private UserComponent.UcCheckBox chkPause; - private System.Windows.Forms.Panel panel2; - private DevComponents.DotNetBar.PanelEx btnRestore; - private System.Windows.Forms.TextBox txtOrderSnFilter; - private DevComponents.DotNetBar.PanelEx btnFilterOrder; - private System.Windows.Forms.Label lblMsg; + private System.Windows.Forms.DataGridViewLinkColumn colAfterSale; + private UserComponent.UcCheckBox chkAutoAfterSale; } } \ No newline at end of file diff --git a/TEMUKJD/WXForms/TalkForms/BuyerOrderListForm.cs b/TEMUKJD/WXForms/TalkForms/BuyerOrderListForm.cs index fd22be4..7e970c5 100644 --- a/TEMUKJD/WXForms/TalkForms/BuyerOrderListForm.cs +++ b/TEMUKJD/WXForms/TalkForms/BuyerOrderListForm.cs @@ -45,9 +45,13 @@ namespace TemuKJD.WXForms.TalkForms ConcurrentList lstPddBuyerOrderInfoLite { get; set; } = new ConcurrentList(); public CancellationTokenSource cancellationTokenSource { get; set; } = new CancellationTokenSource(); public ChromiumWebBrowser cefWebBrowser = null; - public bool loadComplate = false; - public bool firstVisible = false; + public BuyerOrderConfig buyerOrderConfig = new BuyerOrderConfig(); public DateTime nextGetOrderTime = DateTime.MinValue; + public bool isLoadComplate = false; + public bool firstVisible = false; + bool isInitOrder = false; + bool isInitBuyer = false; + bool isReadOrder = false; public BuyerOrderListForm() { @@ -64,31 +68,75 @@ namespace TemuKJD.WXForms.TalkForms InitCef(); - lstPddBuyerOrderInfoLite = NaiBa.Util.Helper.ConfigHelper.LoadConfig> ("pdd_buyer_order"); + buyerOrderConfig = NaiBa.Util.Helper.ConfigHelper.LoadConfig("pdd_buyer_order_config"); + if (buyerOrderConfig == null) + buyerOrderConfig = new BuyerOrderConfig(); + + this.chkPause.Checked = buyerOrderConfig.IsPause; + this.chkAutoAfterSale.Checked = buyerOrderConfig.IsAutoAfterSale; + + lstPddBuyerOrderInfoLite = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("pdd_buyer_order_list"); + if (lstPddBuyerOrderInfoLite == null) + lstPddBuyerOrderInfoLite = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("pdd_buyer_order"); if (lstPddBuyerOrderInfoLite == null) lstPddBuyerOrderInfoLite = new ConcurrentList(); - ShowOrder(); + lstPddBuyerOrderInfoLite.RemoveAll(o => o.order_time < BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddMonths(-1))); GetBuyer(); - AutoGetPddOrder(); - loadComplate = true; + + Task.Run(() => + { + while (isInitBuyer) + { + Thread.Sleep(500); + } + ShowExistOrder(); + + while (isInitOrder) + { + Thread.Sleep(500); + } + AutoGetPddOrder(); + }); + + Task.Run(() => + { + while(true) + { + Thread.Sleep(500); + if (isReadOrder || isInitBuyer || isInitOrder) + { + Invoke(new Action(() => { pictureBox1.Visible = true; })); + } + else + { + Invoke(new Action(() => { pictureBox1.Visible = false; })); + } + } + }); + + isLoadComplate = true; } private void ProductListForm_VisibleChanged(object sender, EventArgs e) { } - void ShowOrder() + void ShowExistOrder() { + isInitOrder = true; Task.Run(() => { - foreach(var order in lstPddBuyerOrderInfoLite) { - Invoke(new Action(() => + if (GlobalConfig.BuyerLoginList.Any(b => b.buyer_id == order.buyerId)) { - ShowOrder(order); - })); + Invoke(new Action(() => + { + ShowOrder(order); + })); + } } + isInitOrder = false; }); } @@ -113,8 +161,9 @@ namespace TemuKJD.WXForms.TalkForms order.order_status_prompt, order.outExpressCompanyName, order.tracking_number, - order.sendStatus, - "发送" + order.sendStatus.IsNullOrEmpty() ? order.refundStatus : order.sendStatus, + "发送", + "退货" ); row = dgvPddBuyerOrder.Rows[rowIndex]; row.Height = 40; @@ -134,7 +183,22 @@ namespace TemuKJD.WXForms.TalkForms row.Cells["dgvOStatus"].Value = order.order_status_prompt; row.Cells["colOExpressName"].Value = order.outExpressCompanyName; row.Cells["colOExpressId"].Value = order.tracking_number; - row.Cells["colOMsg"].Value = order.sendStatus; + row.Cells["colOMsg"].Value = order.sendStatus.IsNullOrEmpty() ? order.refundStatus : order.sendStatus; + } + if (order.order_status_prompt.Contains("交易成功")) + { + row.Cells["colOMsg"].Value = "[完]" + row.Cells["colOMsg"].Value.ParseToString(); + row.Cells["colOMsg"].Style.ForeColor = Color.Green; + } + if (order.order_status_prompt.Contains("退款成功") || order.order_status_prompt.Contains("交易已取消")) + { + row.Cells["colOMsg"].Value = "[退]" + row.Cells["colOMsg"].Value.ParseToString(); + row.Cells["colOMsg"].Style.ForeColor = Color.Gray; + } + else if (order.refundStatus.Contains("待退款") || order.refundStatus.Contains("待退货")) + { + row.Cells["colOMsg"].Value = "[待退]" + row.Cells["colOMsg"].Value.ParseToString(); + row.Cells["colOMsg"].Style.ForeColor = Color.Red; } } @@ -249,7 +313,7 @@ namespace TemuKJD.WXForms.TalkForms { Invoke(new Action(() => { - lblMsg.Text = "获取空商品列表,退出自动滑动 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + lblMsg.Text = buyer.buyer_name + " 获取到空订单列表,退出自动滑动 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); })); currentReadBuyer = ""; return; @@ -261,6 +325,12 @@ namespace TemuKJD.WXForms.TalkForms return; } + + Invoke(new Action(() => + { + lblMsg.Text = buyer.buyer_name + " 正在获取订单列表 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + })); + var list = JsonHelper.DeserializeJsonToList(JsonHelper.JObjectParse(data)["orders"].ParseToString()); foreach (var o in list) { @@ -313,7 +383,7 @@ namespace TemuKJD.WXForms.TalkForms ShowOrder(order); })); } - NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order", lstPddBuyerOrderInfoLite); + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); } private bool RequestHandler_BeforeResourceLoad(object sender, string url, string postData, IRequest request) @@ -346,56 +416,65 @@ namespace TemuKJD.WXForms.TalkForms void GetBuyer() { + isInitBuyer = true; + var ids = dgvBuyer.Rows.Cast().Where(r => r.Cells["colSelect"].Value.ParseToBool() == true).Select(s => s.Cells["colBuyerId"].Value.ParseToString()).ToList(); Invoke(new Action(() => { pbLoading.Visible = true; })); Task.Run(() => { - var url = BaseClass.BuildPDDObjString("user/get_buyer"); - var data = UserLogin.GetSignaturex(); - data += "&page_size=200"; - - var result = GetHtml.PostUtf8(url, data); - if (string.IsNullOrEmpty(result) || !result.Contains("\"code\":200")) - result = GetHtml.PostUtf8(url, data); - - if (result.Contains("\"code\":200")) + try { - List loginInfoLst = JsonHelper.DeserializeJsonToList(JsonHelper.JObjectParse(result)["data"].ParseToString()); - GlobalConfig.BuyerLoginList.RemoveAll(bu => !loginInfoLst.Any(b => b.buyer_id == bu.buyer_id)); - foreach (var b in loginInfoLst) + var url = BaseClass.BuildPDDObjString("user/get_buyer"); + var data = UserLogin.GetSignaturex(); + data += "&page_size=200"; + + var result = GetHtml.PostUtf8(url, data); + if (string.IsNullOrEmpty(result) || !result.Contains("\"code\":200")) + result = GetHtml.PostUtf8(url, data); + + if (result.Contains("\"code\":200")) { - var buyer = GlobalConfig.BuyerLoginList.FirstOrDefault(bu => bu.buyer_id == b.buyer_id); - if (buyer == null) - GlobalConfig.BuyerLoginList.Add(b); - else + List loginInfoLst = JsonHelper.DeserializeJsonToList(JsonHelper.JObjectParse(result)["data"].ParseToString()); + GlobalConfig.BuyerLoginList.RemoveAll(bu => !loginInfoLst.Any(b => b.buyer_id == bu.buyer_id)); + foreach (var b in loginInfoLst) { - buyer.add_time = b.add_time; - buyer.buyer_id = b.buyer_id; - buyer.buyer_name = b.buyer_name; - buyer.buyer_nick = b.buyer_nick; - buyer.cookie = b.cookie; - buyer.mdy_time = b.mdy_time; - buyer.notes = b.notes; - buyer.status = b.status; - buyer.user_name = b.user_name; + var buyer = GlobalConfig.BuyerLoginList.FirstOrDefault(bu => bu.buyer_id == b.buyer_id); + if (buyer == null) + GlobalConfig.BuyerLoginList.Add(b); + else + { + buyer.add_time = b.add_time; + buyer.buyer_id = b.buyer_id; + buyer.buyer_name = b.buyer_name; + buyer.buyer_nick = b.buyer_nick; + buyer.cookie = b.cookie; + buyer.mdy_time = b.mdy_time; + buyer.notes = b.notes; + buyer.status = b.status; + buyer.user_name = b.user_name; + } + } + + Invoke(new Action(() => + { + dgvBuyer.Rows.Clear(); + })); + + foreach (var buyer in GlobalConfig.BuyerLoginList) + { + Invoke(new Action(() => + { + BindBuyer(buyer, "", ids); + })); } } - - Invoke(new Action(() => - { - dgvBuyer.Rows.Clear(); - })); - - foreach (var buyer in GlobalConfig.BuyerLoginList) - { - Invoke(new Action(() => - { - BindBuyer(buyer, "", ids); - })); - } + } + catch + { } + isInitBuyer = false; Invoke(new Action(() => { pbLoading.Visible = false; @@ -477,6 +556,7 @@ namespace TemuKJD.WXForms.TalkForms { nextGetOrderTime = DateTime.Now.AddMinutes(30); GetPddOrder(); + MakeAfterSales(); } Thread.Sleep(1000); Invoke(new Action(() => @@ -490,9 +570,12 @@ namespace TemuKJD.WXForms.TalkForms void GetPddOrder() { + isReadOrder = true; + if (cancellationTokenSource != null) cancellationTokenSource.Cancel(); cancellationTokenSource = new CancellationTokenSource(); + Task.Run(() => { currentReadBuyer = ""; @@ -525,18 +608,25 @@ namespace TemuKJD.WXForms.TalkForms cefWebBrowser.Load("https://mobile.yangkeduo.com/orders.html?type=2"); Thread.Sleep(Randomx.GetId(2000, 3000)); + int top = 0; while (currentReadBuyer == readBuyer) { if (cancellationTokenSource.IsCancellationRequested) break; Thread.Sleep(Randomx.GetId(100,300)); + top += Randomx.GetId(400, 500); var jsStr = @"window.scroll({ top: document.body.scrollHeight, left: 0, behavior: 'smooth' // 可选,使滚动平滑 });"; + jsStr = @"window.scroll({ + top: " + top + @", + left: 0, + behavior: 'smooth' // 可选,使滚动平滑 + });"; var t1 = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr); t1.Wait(1000); } @@ -547,11 +637,13 @@ namespace TemuKJD.WXForms.TalkForms cefWebBrowser.Load("https://mobile.yangkeduo.com/orders.html?type=3"); Thread.Sleep(Randomx.GetId(2000, 3000)); + top = 0; while (currentReadBuyer == readBuyer) { if (cancellationTokenSource.IsCancellationRequested) break; + top += Randomx.GetId(400, 500); Thread.Sleep(Randomx.GetId(100, 300)); var jsStr = @"window.scroll({ @@ -559,6 +651,11 @@ namespace TemuKJD.WXForms.TalkForms left: 0, behavior: 'smooth' // 可选,使滚动平滑 });"; + jsStr = @"window.scroll({ + top: " + top + @", + left: 0, + behavior: 'smooth' // 可选,使滚动平滑 + });"; var t1 = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr); t1.Wait(1000); } @@ -568,6 +665,7 @@ namespace TemuKJD.WXForms.TalkForms } Thread.Sleep(Randomx.GetId(6000, 8000)); } + isReadOrder = false; }, cancellationTokenSource.Token); } @@ -575,6 +673,7 @@ namespace TemuKJD.WXForms.TalkForms { nextGetOrderTime = DateTime.Now.AddMinutes(30); GetPddOrder(); + MakeAfterSales(); } private void pnlEmpty_Click(object sender, EventArgs e) @@ -882,12 +981,6 @@ namespace TemuKJD.WXForms.TalkForms case "详情": case "编辑/详情": break; - case "发送": - Task.Run(() => - { - SendOrderE57(order, true); - }); - break; case "图片": ShowImgForm imgFrom = new ShowImgForm(dgvPddBuyerOrder.Rows[e.RowIndex].Cells["colImgUrl"].Value.ParseToString().Replace("?imageView2/2/w/90/h/90", "")); imgFrom.ShowDialog(); @@ -896,6 +989,20 @@ namespace TemuKJD.WXForms.TalkForms case "全选": dgvPddBuyerOrder.Rows[e.RowIndex].Cells["colCheck"].Value = !(bool)dgvPddBuyerOrder.Rows[e.RowIndex].Cells["colCheck"].Value; break; + case "发送": + Task.Run(() => + { + SendOrderE57(order, true); + }); + break; + case "退货": + pictureBox1.Visible = true; + Task.Run(() => + { + MakeAfterSale(order); + Invoke(new Action(() => { pictureBox1.Visible = false; })); + }); + break; default: break; } @@ -906,20 +1013,28 @@ namespace TemuKJD.WXForms.TalkForms if (resetSendStatus) order.sendStatus = ""; - if (order.sendStatus == "已发送") - //if (order.sendStatus == "已发货") + //if (order.sendStatus == "已发送") + // return; + //if (order.sendStatus == "已完成/退货") + // return; + if (order.sendStatus.Contains("外采订单已发货")) { return; } // 已发货且没有运单号的属于已退货,不再发送 - if (order.order_status_prompt != "拼单成功,待发货" && order.order_status_prompt != "免拼成功,待发货" && (string.IsNullOrEmpty(order.tracking_number) || string.IsNullOrEmpty(order.outExpressCompanyName))) + if (order.order_status_prompt != "拼单成功,待发货" && order.order_status_prompt != "免拼成功,待发货" && ( + order.order_status_prompt.Contains("交易成功") || + order.order_status_prompt.Contains("退款成功") || + order.order_status_prompt.Contains("交易已取消") || + string.IsNullOrEmpty(order.tracking_number) || + string.IsNullOrEmpty(order.outExpressCompanyName))) { - order.sendStatus = "已发货退货"; + order.refundStatus = "已完成/退货"; Invoke(new Action(() => { ShowOrder(order); })); - NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order", lstPddBuyerOrderInfoLite); + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); return; } @@ -938,20 +1053,20 @@ namespace TemuKJD.WXForms.TalkForms var exportRst = WXHttpResponseBLL.e57PostResponse(url, dataStr, ""); if (exportRst.Contains("发送失败 操作超时")) WXHttpResponseBLL.e57PostResponse(url, dataStr, ""); - if (exportRst.Contains("SUCCESS") || exportRst.Contains("已存在") || exportRst.Contains("同运单号拦截") || exportRst.Contains("订单已绑定外采订单")) + if (exportRst.Contains("SUCCESS") /*|| exportRst.Contains("已存在") || exportRst.Contains("同运单号拦截") || exportRst.Contains("订单已绑定外采订单")*/) { order.sendStatus = "已发送"; - NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order", lstPddBuyerOrderInfoLite); + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); } else if (exportRst != null && exportRst.Contains("") && exportRst.Contains("")) { order.sendStatus = exportRst.Substring(0, exportRst.IndexOf("")).Substring(exportRst.IndexOf("") + 5); - NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order", lstPddBuyerOrderInfoLite); + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); } else { order.sendStatus = "发送失败 " + exportRst; - NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order", lstPddBuyerOrderInfoLite); + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); } Invoke(new Action(() => { @@ -960,7 +1075,127 @@ namespace TemuKJD.WXForms.TalkForms //Thread.Sleep(500); } - private void panelEx3_Click(object sender, EventArgs e) + public void MakeAfterSales() + { + Task.Run(() => + { + while (isReadOrder) + { + Thread.Sleep(500); + //break; + } + + foreach (var buyer in GlobalConfig.BuyerLoginList) + { + //postman request POST 'https://po.e57.cn/prod-api/api/oms-api/external_procurement/hasAfterSsale' \ + //--header 'Content-Type: application/json' \ + //--body '{ "platform": "WEISHOP", "startTime": 1774763836, "endTime": "1776050614" , "userAccount": "闲鱼会开车的鱼2343"}' + + JObject body = new JObject(); + body["platform"] = "WEISHOP"; + body["startTime"] = BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddDays(-7)); + body["endTime"] = BaseClass.DateTimeToTimestampSeconds(DateTime.Now); + body["userAccount"] = buyer.buyer_name; + string url = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/hasAfterSsale"; + var getE57AfterSaleRst = WXHttpResponseBLL.e57PostResponse(url, JsonHelper.SerializeObject(body), ""); + if (getE57AfterSaleRst.ParseToString().Contains("success")) + { + try + { + var rstData = getE57AfterSaleRst.Substring(0, getE57AfterSaleRst.IndexOf("")).Substring(getE57AfterSaleRst.IndexOf("") + "".Length); + + List rstStrLst = rstData.Split(new string[] { "},{" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + foreach (var rstStr in rstStrLst) + { + var rstStrTmp = rstStr; + var outOrderNo = BaseRegex.GetStringJson(ref rstStrTmp, "outOrderNo"); + if (outOrderNo.IsNullOrEmpty()) + continue; + var afterSaleId = BaseRegex.GetStringJson(ref rstStrTmp, "afterSaleId"); + var order = lstPddBuyerOrderInfoLite.FirstOrDefault(o => o.order_sn == outOrderNo); + if (order == null) + continue; + + order.refundStatus = order.order_status_prompt.Contains("待发货") ? "待退款" : "待退货"; + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); + Invoke(new Action(() => + { + ShowOrder(order); + })); + if (chkAutoAfterSale.Checked) + { + MakeAfterSale(order); + } + } + } + catch (Exception ex) + { + } + } + } + }); + } + + public string MakeAfterSale(PddBuyerOrderInfoLite order) + { + //if (isReadOrder) + //{ + // BaseMsgForm.ShowError("正再读取订单,请稍候"); + // return; + //} + //// 订单详情页 + ////https://mobile.yangkeduo.com/order.html?order_sn=260417-318525949581688 + //// 退货详情页 + ////https://mobile.yangkeduo.com/complaint.html?order_sn=260417-357103060621688&after_sales_reason=0&after_sales_type=1&after_sales_code=1001 + + if(!order.order_status_prompt.Contains("待发货")) + { + return "{\"success\":false,\"msg\":\"仅未发货单可以自动退货\"}"; + } + + var buyer = GlobalConfig.BuyerLoginList.FirstOrDefault(b => b.buyer_id == order.buyerId); + var rst = YkdBuyerOrder.GetInitAfterSale(buyer, order.order_sn); + // + var mobile = BaseRegex.GetStringJson(ref rst, "userReceivePhone"); + var applyAmount = BaseRegex.GetIntJson(ref rst, "applyAmount"); + var refundAmount = BaseRegex.GetIntJson(ref rst, "refundAmount"); + var newMaxApplyAmount = BaseRegex.GetIntJson(ref rst, "newMaxApplyAmount"); + var shippingStatus = BaseRegex.GetIntJson(ref rst, "shippingStatus"); + if (shippingStatus == 1 || !rst.Contains("\"shippingStatus\":0,") || !order.order_status_prompt.Contains("待发货")) + { + return "{\"success\":false,\"msg\":\"仅未发货单可以自动退货\"}"; + } + + if (applyAmount == 0) applyAmount = order.order_amount.ParseToInt(); + if (refundAmount == 0) refundAmount = order.order_amount.ParseToInt(); + if (newMaxApplyAmount == 0) newMaxApplyAmount = order.order_amount.ParseToInt(); + if (string.IsNullOrEmpty(mobile)) + { + return "{\"success\":false,\"msg\":\"退货信息获取失败,请检查买手是否掉线\"}"; + } + Thread.Sleep(Randomx.GetId(1000, 2000)); + var afterSaleRst = YkdBuyerOrder.SetOrderAfterSale(buyer, mobile, order.order_sn, applyAmount, refundAmount, newMaxApplyAmount); + if (afterSaleRst.Contains("\"after_sales_status\":1") || afterSaleRst.Contains("该订单已全额退款")) + { + order.refundStatus = "已完成/退货"; + order.order_status_prompt = "退款成功"; + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite); + Invoke(new Action(() => + { + ShowOrder(order); + })); + return "{\"success\":true,\"msg\":\"操作成功\"}"; + } + else + { + var error_msg = BaseRegex.GetStringJson(ref afterSaleRst, "error_msg"); + if (string.IsNullOrEmpty(error_msg)) + error_msg = afterSaleRst; + return "{\"success\":false,\"msg\":\"" + error_msg + "\"}"; + } + } + + private void btnClose_Click(object sender, EventArgs e) { panel2.Visible = !panel2.Visible; if (panel2.Visible == false) @@ -993,6 +1228,8 @@ namespace TemuKJD.WXForms.TalkForms else PauseTick = nextGetOrderTime - DateTime.Now; + buyerOrderConfig.IsPause = chkPause.Checked; + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_config", buyerOrderConfig); } private void btnFilterOrder_Click(object sender, EventArgs e) @@ -1001,6 +1238,8 @@ namespace TemuKJD.WXForms.TalkForms { if (row.Cells["colOPddOrderSn"].Value.ParseToString().Contains(txtOrderSnFilter.Text.Trim())) row.Visible = true; + else if (row.Cells["colOBuyerName"].Value.ParseToString().Contains(txtOrderSnFilter.Text.Trim())) + row.Visible = true; else row.Visible = false; } @@ -1016,11 +1255,37 @@ namespace TemuKJD.WXForms.TalkForms { } + + private void chkAutoAfterSale_CheckedChanged(object sender, EventArgs e) + { + buyerOrderConfig.IsAutoAfterSale = chkAutoAfterSale.Checked; + NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_config", buyerOrderConfig); + } } public class YkdBuyerOrder { + public static string GetInitAfterSale(BuyerLoginInfo buyer, string orderSn) + { + string url = "https://mobile.yangkeduo.com/complaint.html?order_sn=" + orderSn + "&after_sales_reason=0&after_sales_type=1&after_sales_code=1001"; + var rst = YkdHttpResponseBLL.YangkeduoGetPageResponse(buyer, url); + return rst; + } + public static string SetOrderAfterSale(BuyerLoginInfo buyer, string user_phone, string order_sn, int apply_amount, int refund_amount, int new_refund_amount) + { + string url = "https://mobile.yangkeduo.com/proxy/api/after_sales/create?pdduid=" + buyer.buyer_id; + string body = @"{""order_sn"":""260417-318525949581688"",""coupon_return_control_type"":0,""after_sales_type"":1,""user_ship_status"":0,""user_phone"":""17855141112"",""images"":[],""return_coupon_amount"":0,""question_type"":66,""question_desc"":"""",""apply_amount"":1568,""refund_amount"":1568,""new_refund_amount"":1568,""is_lite"":true}"; + body = @"{""order_sn"":""" + order_sn + @""",""coupon_return_control_type"":0,""after_sales_type"":1,""user_ship_status"":0,""user_phone"":""" + user_phone + + @""",""images"":[],""return_coupon_amount"":0,""question_type"":66,""question_desc"":"""",""apply_amount"":" + apply_amount + + @",""refund_amount"":" + refund_amount + @",""new_refund_amount"":" + new_refund_amount + @",""is_lite"":true}"; + + string referer = "https://mobile.yangkeduo.com/complaint.html?order_sn=260417-318525949581688&refer_page_name=order_detail&refer_page_id=10038_1776391960785_p20v9j3op4&refer_page_sn=10038&after_sales_reason=66&after_sales_type=1&after_sales_code=1001"; + referer = "https://mobile.yangkeduo.com/complaint.html?order_sn=" + order_sn + "&refer_page_name=order_detail&&after_sales_reason=66"; + + var rst = YkdHttpResponseBLL.YangkeduoPostResponse(buyer, url, body, referer); + return rst; + } } public class WxOrder @@ -1046,4 +1311,10 @@ namespace TemuKJD.WXForms.TalkForms return result; } } + + public class BuyerOrderConfig + { + public bool IsPause = false; + public bool IsAutoAfterSale = true; + } } diff --git a/TEMUKJD/WXForms/TalkForms/BuyerOrderListForm.resx b/TEMUKJD/WXForms/TalkForms/BuyerOrderListForm.resx index 28ed96d..b719165 100644 --- a/TEMUKJD/WXForms/TalkForms/BuyerOrderListForm.resx +++ b/TEMUKJD/WXForms/TalkForms/BuyerOrderListForm.resx @@ -216,6 +216,9 @@ True + + True +