From 15cea5d4fdf18df7c0b2f5c4b419831207265093 Mon Sep 17 00:00:00 2001 From: wule Date: Fri, 2 Jan 2026 16:03:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96pdd=E4=B8=8A=E8=B4=A7?= =?UTF-8?q?=E5=92=8C=E6=9C=BA=E4=BC=9A=E5=95=86=E5=93=81=E9=87=87=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AllBase/BaseClass.cs | 2 +- .../KJD_WebService/KJD_WebService.csproj.user | 2 +- .../PDDDBProdListForm.Designer.cs | 45 +++- .../ProductSelectForms/PDDDBProdListForm.cs | 73 ++++-- .../PDDDBProdUserSelectForm.cs | 17 +- .../PDDGetChanceProdForm.Designer.cs | 218 ++++++++++-------- .../PDDGetChanceProdForm.cs | 91 +++++++- 7 files changed, 312 insertions(+), 136 deletions(-) diff --git a/AllBase/BaseClass.cs b/AllBase/BaseClass.cs index e19ac57..16d81db 100644 --- a/AllBase/BaseClass.cs +++ b/AllBase/BaseClass.cs @@ -27,7 +27,7 @@ namespace AllBase /// /// 版本ID /// - public static int VersionCount = 772; + public static int VersionCount = 775; //public static int VersionCount = 613; /// diff --git a/KJDService/KJD_WebService/KJD_WebService.csproj.user b/KJDService/KJD_WebService/KJD_WebService.csproj.user index 4bcdc04..1b87364 100644 --- a/KJDService/KJD_WebService/KJD_WebService.csproj.user +++ b/KJDService/KJD_WebService/KJD_WebService.csproj.user @@ -8,7 +8,7 @@ - Release|Any CPU + Debug|Any CPU ShowAllFiles diff --git a/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdListForm.Designer.cs b/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdListForm.Designer.cs index 33f012b..a1175e4 100644 --- a/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdListForm.Designer.cs +++ b/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdListForm.Designer.cs @@ -38,6 +38,9 @@ namespace TemuKJD.PDDForms.ProductSelectForms System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PDDDBProdListForm)); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.label9 = new System.Windows.Forms.Label(); + this.txtMinPrice = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); this.txtReplaceText = new System.Windows.Forms.TextBox(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.label5 = new System.Windows.Forms.Label(); @@ -130,6 +133,9 @@ namespace TemuKJD.PDDForms.ProductSelectForms // // splitContainer1.Panel1 // + this.splitContainer1.Panel1.Controls.Add(this.label9); + this.splitContainer1.Panel1.Controls.Add(this.txtMinPrice); + this.splitContainer1.Panel1.Controls.Add(this.label8); this.splitContainer1.Panel1.Controls.Add(this.txtReplaceText); this.splitContainer1.Panel1.Controls.Add(this.tableLayoutPanel1); this.splitContainer1.Panel1.Controls.Add(this.btnExportTxt); @@ -145,10 +151,42 @@ namespace TemuKJD.PDDForms.ProductSelectForms this.splitContainer1.SplitterDistance = 53; this.splitContainer1.TabIndex = 1; // + // label9 + // + this.label9.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(1268, 31); + this.label9.Margin = new System.Windows.Forms.Padding(3, 0, 0, 0); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(76, 17); + this.label9.TabIndex = 708; + this.label9.Text = "元时跳过sku"; + // + // txtMinPrice + // + this.txtMinPrice.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.txtMinPrice.Location = new System.Drawing.Point(1235, 28); + this.txtMinPrice.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3); + this.txtMinPrice.Name = "txtMinPrice"; + this.txtMinPrice.Size = new System.Drawing.Size(33, 23); + this.txtMinPrice.TabIndex = 707; + this.txtMinPrice.Text = "10"; + // + // label8 + // + this.label8.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(1138, 30); + this.label8.Margin = new System.Windows.Forms.Padding(3, 0, 0, 0); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(104, 17); + this.label8.TabIndex = 706; + this.label8.Text = "导出时价格低于:"; + // // txtReplaceText // this.txtReplaceText.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.txtReplaceText.Location = new System.Drawing.Point(1235, 16); + this.txtReplaceText.Location = new System.Drawing.Point(1235, 4); this.txtReplaceText.Margin = new System.Windows.Forms.Padding(0, 3, 3, 3); this.txtReplaceText.Name = "txtReplaceText"; this.txtReplaceText.Size = new System.Drawing.Size(104, 23); @@ -482,7 +520,7 @@ namespace TemuKJD.PDDForms.ProductSelectForms // this.label7.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(1138, 19); + this.label7.Location = new System.Drawing.Point(1138, 7); this.label7.Margin = new System.Windows.Forms.Padding(3, 0, 0, 0); this.label7.Name = "label7"; this.label7.Size = new System.Drawing.Size(104, 17); @@ -1071,5 +1109,8 @@ namespace TemuKJD.PDDForms.ProductSelectForms private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; private System.Windows.Forms.TextBox txtReplaceText; private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox txtMinPrice; + private System.Windows.Forms.Label label8; } } \ No newline at end of file diff --git a/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdListForm.cs b/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdListForm.cs index 004228b..f6c2f53 100644 --- a/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdListForm.cs +++ b/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdListForm.cs @@ -750,64 +750,87 @@ namespace TemuKJD.PDDForms.ProductSelectForms { foreach (var pId in lstProdId) { - var prod = this.lstTemuDbProduct.FirstOrDefault(p => p.spu_id == pId); - if (string.IsNullOrEmpty(prod.product_json)) + var dbProd = this.lstTemuDbProduct.FirstOrDefault(p => p.spu_id == pId); + if (string.IsNullOrEmpty(dbProd.product_json)) { - prod = PDDDBProdUserSelectForm.GetProductDetail(prod.id.ParseToString()); + dbProd = PDDDBProdUserSelectForm.GetProductDetail(dbProd.id.ParseToString()); Thread.Sleep(200); } - StreamWriter sw = new StreamWriter(Path.Combine(path, prod.spu_id + ".txt"), false, Encoding.UTF8); - - JObject jObj = new JObject(); + JObject prodJObj = new JObject(); try { - jObj = JObject.Parse(prod.product_json); + prodJObj = JObject.Parse(dbProd.product_json); // 过滤标题内指定词语 if (lstTitleReplaceText.Count > 0) { - var goods_name = jObj["detail"]["goods_name"].ParseToString(); + var goods_name = prodJObj["detail"]["goods_name"].ParseToString(); foreach (var txt in lstTitleReplaceText) { goods_name = goods_name.Replace(txt, ""); } - jObj["detail"]["goods_name"] = goods_name; + prodJObj["detail"]["goods_name"] = goods_name; - var tiny_name = jObj["detail"]["tiny_name"].ParseToString(); + var tiny_name = prodJObj["detail"]["tiny_name"].ParseToString(); foreach (var txt in lstTitleReplaceText) { tiny_name = tiny_name.Replace(txt, ""); } - jObj["detail"]["tiny_name"] = tiny_name; + prodJObj["detail"]["tiny_name"] = tiny_name; - var goods_desc = jObj["detail"]["goods_desc"].ParseToString(); + var goods_desc = prodJObj["detail"]["goods_desc"].ParseToString(); foreach (var txt in lstTitleReplaceText) { goods_desc = goods_desc.Replace(txt, ""); } - jObj["detail"]["goods_desc"] = goods_desc; + prodJObj["detail"]["goods_desc"] = goods_desc; - var share_desc = jObj["detail"]["share_desc"].ParseToString(); + var share_desc = prodJObj["detail"]["share_desc"].ParseToString(); foreach (var txt in lstTitleReplaceText) { share_desc = share_desc.Replace(txt, ""); } - jObj["detail"]["share_desc"] = share_desc; + prodJObj["detail"]["share_desc"] = share_desc; } // 替换货号 - if (!string.IsNullOrEmpty(prod.ext_code)) - jObj["detail"]["out_goods_sn"] = prod.ext_code; + if (!string.IsNullOrEmpty(dbProd.ext_code)) + prodJObj["detail"]["out_goods_sn"] = dbProd.ext_code; // 替换编辑过的sku - if (!string.IsNullOrEmpty(prod.sku_edit_json)) - jObj["detail"]["sku"] = JArray.Parse(JsonHelper.SerializeObject(JsonHelper.DeserializeJsonToList(prod.sku_edit_json))); - } - catch (Exception ex) { } + if (!string.IsNullOrEmpty(dbProd.sku_edit_json)) + prodJObj["detail"]["sku"] = JArray.Parse(JsonHelper.SerializeObject(JsonHelper.DeserializeJsonToList(dbProd.sku_edit_json))); + // 过滤低价sku,如果所有sku都不达标,跳过商品 + if (!string.IsNullOrEmpty(txtMinPrice.Text)) + { + var product_json_tmp = JsonHelper.SerializeObject(prodJObj); - string exportData = JsonHelper.SerializeObject(jObj); - //sw.Write(prod.product_json); - sw.Write(exportData); - sw.Close(); + // 移除第一组所有sku + var skuJArr = prodJObj["detail"]["sku"] as JArray; + skuJArr.RemoveAll(); + + // 序列化第二组,从组中挑选符合价格条件的sku往第一组内填写 + var prodJObj2 = JObject.Parse(product_json_tmp); + var skuJArr2 = prodJObj2["detail"]["sku"] as JArray; + foreach (var skuJObj2 in skuJArr2) + { + if (skuJObj2["multi_price"].ParseToInt() >= this.txtMinPrice.Text.Trim().ParseToDecimal() * 100) + skuJArr.Add(skuJObj2); + } + if (skuJArr.Count == 0) + { + continue; + } + } + + string exportData = JsonHelper.SerializeObject(prodJObj); + using (StreamWriter sw = new StreamWriter(Path.Combine(path, dbProd.spu_id + ".txt"), false, Encoding.UTF8)) + { + sw.Write(exportData); + } + } + catch (Exception ex) + { + } Invoke(new Action(() => { diff --git a/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdUserSelectForm.cs b/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdUserSelectForm.cs index 7cf85f8..5d37365 100644 --- a/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdUserSelectForm.cs +++ b/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdUserSelectForm.cs @@ -902,8 +902,17 @@ namespace TemuKJD.PDDForms.ProductSelectForms if (cancellationTokenSource.IsCancellationRequested) break; + //var prodDetailJson = GetHtml.UrlDecode(kjdDbProd.product_json); - result = UploadProduct(shop, kjdDbProd, prod, row.Cells["colOpResult"], startTime); //将商品上传 + //将商品上传 + result = UploadProduct(shop, kjdDbProd, prod, row.Cells["colOpResult"], startTime); + + //额外等待时间(无论失败与否) + var waitTime = 0; + Invoke(new Action(() => { waitTime = txtWaitSeconds.Text.Trim().ParseToInt(); })); + if (waitTime > 0) + Thread.Sleep(Randomx.GetId(waitTime * 1000, (waitTime + 10) * 1000)); + Invoke(new Action(() => { row.Cells["colSkuFakeImgUrl"].Value = kjdDbProd.sku_img_replace_url; @@ -2281,12 +2290,6 @@ namespace TemuKJD.PDDForms.ProductSelectForms } } - - var waitTime = 0; - Invoke(new Action(() => { waitTime = txtWaitSeconds.Text.Trim().ParseToInt(); })); - if (waitTime > 0) - Thread.Sleep(Randomx.GetId(waitTime * 1000, (waitTime + 10) * 1000)); - var size_result = ""; if (prodInfo.size != null && prodInfo.size.classId != null) { diff --git a/TEMUKJD/PDDForms/ProductSelectForms/PDDGetChanceProdForm.Designer.cs b/TEMUKJD/PDDForms/ProductSelectForms/PDDGetChanceProdForm.Designer.cs index e169c40..5cd5e83 100644 --- a/TEMUKJD/PDDForms/ProductSelectForms/PDDGetChanceProdForm.Designer.cs +++ b/TEMUKJD/PDDForms/ProductSelectForms/PDDGetChanceProdForm.Designer.cs @@ -30,13 +30,13 @@ namespace TemuKJD.PDDForms.ProductSelectForms 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(); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); this.ucGroupBoxEx1 = new TemuKJD.UserComponent.UcGroupBoxEx(this.components); this.btnStopStop = new DevComponents.DotNetBar.PanelEx(); @@ -77,9 +77,6 @@ namespace TemuKJD.PDDForms.ProductSelectForms this.pbLoading = new System.Windows.Forms.PictureBox(); this.panel2 = new System.Windows.Forms.Panel(); this.dgvChanceProduct = new TemuKJD.UserComponent.DataGridViewEx(); - this.chk = new TemuKJD.UserComponent.UcCheckBox(this.components); - this.statusBar = new TemuKJD.UserControls.StatusBarUserControl(); - this.ucSplitPage1 = new TemuKJD.UserControls.UcSplitPage(); this.colCheck = new System.Windows.Forms.DataGridViewCheckBoxColumn(); this.colChanceId = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.colImgUrl = new System.Windows.Forms.DataGridViewTextBoxColumn(); @@ -90,6 +87,12 @@ namespace TemuKJD.PDDForms.ProductSelectForms this.colPrice = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.colDel = new System.Windows.Forms.DataGridViewLinkColumn(); this.colMsg = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.chk = new TemuKJD.UserComponent.UcCheckBox(this.components); + this.statusBar = new TemuKJD.UserControls.StatusBarUserControl(); + this.ucSplitPage1 = new TemuKJD.UserControls.UcSplitPage(); + this.txtMinPrice = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); this.splitContainer1.Panel1.SuspendLayout(); this.splitContainer1.Panel2.SuspendLayout(); @@ -125,7 +128,7 @@ namespace TemuKJD.PDDForms.ProductSelectForms // splitContainer1.Panel2 // this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); - this.splitContainer1.Size = new System.Drawing.Size(1179, 635); + this.splitContainer1.Size = new System.Drawing.Size(1344, 635); this.splitContainer1.SplitterDistance = 120; this.splitContainer1.TabIndex = 4; // @@ -136,6 +139,9 @@ namespace TemuKJD.PDDForms.ProductSelectForms | System.Windows.Forms.AnchorStyles.Right))); this.ucGroupBoxEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); this.ucGroupBoxEx1.BorderStyle = TemuKJD.UserComponent.UcGroupBoxEx.GroupBoxBorderStyle.ROUND; + this.ucGroupBoxEx1.Controls.Add(this.label7); + this.ucGroupBoxEx1.Controls.Add(this.label6); + this.ucGroupBoxEx1.Controls.Add(this.txtMinPrice); this.ucGroupBoxEx1.Controls.Add(this.btnStopStop); this.ucGroupBoxEx1.Controls.Add(this.btnSelectSuccess); this.ucGroupBoxEx1.Controls.Add(this.btnStop); @@ -160,7 +166,7 @@ namespace TemuKJD.PDDForms.ProductSelectForms this.ucGroupBoxEx1.Controls.Add(this.chkOverride); this.ucGroupBoxEx1.Location = new System.Drawing.Point(3, 2); this.ucGroupBoxEx1.Name = "ucGroupBoxEx1"; - this.ucGroupBoxEx1.Size = new System.Drawing.Size(1174, 118); + this.ucGroupBoxEx1.Size = new System.Drawing.Size(1339, 118); this.ucGroupBoxEx1.TabIndex = 0; this.ucGroupBoxEx1.TabStop = false; this.ucGroupBoxEx1.Text = "操作"; @@ -196,7 +202,7 @@ namespace TemuKJD.PDDForms.ProductSelectForms this.btnSelectSuccess.Cursor = System.Windows.Forms.Cursors.Hand; this.btnSelectSuccess.DisabledBackColor = System.Drawing.Color.Empty; this.btnSelectSuccess.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnSelectSuccess.Location = new System.Drawing.Point(776, 75); + this.btnSelectSuccess.Location = new System.Drawing.Point(1022, 22); this.btnSelectSuccess.Name = "btnSelectSuccess"; this.btnSelectSuccess.Size = new System.Drawing.Size(170, 25); this.btnSelectSuccess.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -278,7 +284,7 @@ namespace TemuKJD.PDDForms.ProductSelectForms this.btnAddToDb.Cursor = System.Windows.Forms.Cursors.Hand; this.btnAddToDb.DisabledBackColor = System.Drawing.Color.Empty; this.btnAddToDb.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnAddToDb.Location = new System.Drawing.Point(1033, 75); + this.btnAddToDb.Location = new System.Drawing.Point(1198, 75); this.btnAddToDb.Name = "btnAddToDb"; this.btnAddToDb.Size = new System.Drawing.Size(116, 25); this.btnAddToDb.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -303,7 +309,7 @@ namespace TemuKJD.PDDForms.ProductSelectForms this.btnGetDetail.Cursor = System.Windows.Forms.Cursors.Hand; this.btnGetDetail.DisabledBackColor = System.Drawing.Color.Empty; this.btnGetDetail.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnGetDetail.Location = new System.Drawing.Point(1033, 22); + this.btnGetDetail.Location = new System.Drawing.Point(1198, 22); this.btnGetDetail.Name = "btnGetDetail"; this.btnGetDetail.Size = new System.Drawing.Size(116, 25); this.btnGetDetail.Style.Alignment = System.Drawing.StringAlignment.Center; @@ -494,11 +500,11 @@ namespace TemuKJD.PDDForms.ProductSelectForms // this.chkOverride.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.chkOverride.AutoSize = true; - this.chkOverride.Location = new System.Drawing.Point(952, 77); + this.chkOverride.Location = new System.Drawing.Point(1058, 77); this.chkOverride.Name = "chkOverride"; - this.chkOverride.Size = new System.Drawing.Size(87, 21); + this.chkOverride.Size = new System.Drawing.Size(135, 21); this.chkOverride.TabIndex = 757; - this.chkOverride.Text = "覆盖已存在"; + this.chkOverride.Text = "覆盖库中已存在商品"; this.chkOverride.UseVisualStyleBackColor = true; // // splitContainer2 @@ -519,7 +525,7 @@ namespace TemuKJD.PDDForms.ProductSelectForms this.splitContainer2.Panel2.Controls.Add(this.chk); this.splitContainer2.Panel2.Controls.Add(this.statusBar); this.splitContainer2.Panel2.Controls.Add(this.ucSplitPage1); - this.splitContainer2.Size = new System.Drawing.Size(1179, 511); + this.splitContainer2.Size = new System.Drawing.Size(1344, 511); this.splitContainer2.SplitterDistance = 482; this.splitContainer2.TabIndex = 0; // @@ -540,7 +546,7 @@ namespace TemuKJD.PDDForms.ProductSelectForms this.splitContainer3.Panel2.Controls.Add(this.pbLoading); this.splitContainer3.Panel2.Controls.Add(this.panel2); this.splitContainer3.Panel2.Controls.Add(this.dgvChanceProduct); - this.splitContainer3.Size = new System.Drawing.Size(1171, 482); + this.splitContainer3.Size = new System.Drawing.Size(1336, 482); this.splitContainer3.SplitterDistance = 290; this.splitContainer3.TabIndex = 9; // @@ -559,19 +565,19 @@ namespace TemuKJD.PDDForms.ProductSelectForms // this.dgvShop.AllowUserToAddRows = false; this.dgvShop.AllowUserToDeleteRows = false; - dataGridViewCellStyle1.BackColor = System.Drawing.Color.WhiteSmoke; - this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + dataGridViewCellStyle8.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle8; 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; + dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle9.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle9.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle9.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle9.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle9.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle9; this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.colSelect, @@ -669,7 +675,7 @@ namespace TemuKJD.PDDForms.ProductSelectForms // this.pbLoading.Anchor = System.Windows.Forms.AnchorStyles.None; this.pbLoading.Image = global::TemuKJD.Properties.Resources.loading_blue; - this.pbLoading.Location = new System.Drawing.Point(413, 216); + this.pbLoading.Location = new System.Drawing.Point(496, 216); this.pbLoading.Name = "pbLoading"; this.pbLoading.Size = new System.Drawing.Size(50, 50); this.pbLoading.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; @@ -684,27 +690,27 @@ namespace TemuKJD.PDDForms.ProductSelectForms | System.Windows.Forms.AnchorStyles.Right))); this.panel2.Location = new System.Drawing.Point(409, 355); this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(445, 107); + this.panel2.Size = new System.Drawing.Size(610, 107); this.panel2.TabIndex = 8; // // dgvChanceProduct // this.dgvChanceProduct.AllowUserToAddRows = false; this.dgvChanceProduct.AllowUserToDeleteRows = false; - dataGridViewCellStyle3.BackColor = System.Drawing.Color.WhiteSmoke; - this.dgvChanceProduct.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle3; + dataGridViewCellStyle10.BackColor = System.Drawing.Color.WhiteSmoke; + this.dgvChanceProduct.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle10; this.dgvChanceProduct.AutoRowNumber = true; this.dgvChanceProduct.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; this.dgvChanceProduct.BackgroundColor = System.Drawing.Color.White; this.dgvChanceProduct.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.dgvChanceProduct.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle4; + dataGridViewCellStyle11.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle11.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle11.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle11.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle11.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle11.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle11.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvChanceProduct.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle11; this.dgvChanceProduct.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dgvChanceProduct.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.colCheck, @@ -722,50 +728,10 @@ namespace TemuKJD.PDDForms.ProductSelectForms this.dgvChanceProduct.Name = "dgvChanceProduct"; this.dgvChanceProduct.ReadOnly = true; this.dgvChanceProduct.RowTemplate.Height = 23; - this.dgvChanceProduct.Size = new System.Drawing.Size(877, 482); + this.dgvChanceProduct.Size = new System.Drawing.Size(1042, 482); this.dgvChanceProduct.TabIndex = 6; this.dgvChanceProduct.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvChanceProduct_CellContentClick); // - // chk - // - this.chk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.chk.AutoSize = true; - this.chk.Checked = true; - this.chk.CheckState = System.Windows.Forms.CheckState.Checked; - this.chk.Location = new System.Drawing.Point(1112, 3); - this.chk.Name = "chk"; - this.chk.Size = new System.Drawing.Size(63, 21); - this.chk.TabIndex = 671; - this.chk.Text = "多选框"; - this.chk.UseVisualStyleBackColor = true; - this.chk.Visible = false; - // - // statusBar - // - this.statusBar.BackColor = System.Drawing.Color.White; - this.statusBar.Dock = System.Windows.Forms.DockStyle.Left; - this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.statusBar.Location = new System.Drawing.Point(296, 0); - this.statusBar.Margin = new System.Windows.Forms.Padding(0); - this.statusBar.Name = "statusBar"; - this.statusBar.Size = new System.Drawing.Size(743, 25); - this.statusBar.TabIndex = 5; - // - // ucSplitPage1 - // - this.ucSplitPage1.CurrentPage = 1; - this.ucSplitPage1.Dock = System.Windows.Forms.DockStyle.Left; - this.ucSplitPage1.IsShowPageSize = false; - this.ucSplitPage1.Location = new System.Drawing.Point(0, 0); - this.ucSplitPage1.Margin = new System.Windows.Forms.Padding(0); - this.ucSplitPage1.Name = "ucSplitPage1"; - this.ucSplitPage1.Padding = new System.Windows.Forms.Padding(0, 0, 1, 0); - this.ucSplitPage1.PageSize = 50; - this.ucSplitPage1.Size = new System.Drawing.Size(296, 25); - this.ucSplitPage1.TabIndex = 6; - this.ucSplitPage1.TotalPage = 1; - this.ucSplitPage1.PageChange += new System.Action(this.ucSplitPage1_PageChange); - // // colCheck // this.colCheck.FillWeight = 26F; @@ -802,8 +768,8 @@ namespace TemuKJD.PDDForms.ProductSelectForms // // colGoodsName // - dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.colGoodsName.DefaultCellStyle = dataGridViewCellStyle5; + dataGridViewCellStyle12.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.colGoodsName.DefaultCellStyle = dataGridViewCellStyle12; this.colGoodsName.FillWeight = 120F; this.colGoodsName.HeaderText = "商品名称"; this.colGoodsName.Name = "colGoodsName"; @@ -824,8 +790,8 @@ namespace TemuKJD.PDDForms.ProductSelectForms // // colPrice // - dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.colPrice.DefaultCellStyle = dataGridViewCellStyle6; + dataGridViewCellStyle13.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.colPrice.DefaultCellStyle = dataGridViewCellStyle13; this.colPrice.FillWeight = 70F; this.colPrice.HeaderText = "价格"; this.colPrice.Name = "colPrice"; @@ -840,17 +806,86 @@ namespace TemuKJD.PDDForms.ProductSelectForms // // colMsg // - dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.colMsg.DefaultCellStyle = dataGridViewCellStyle7; + dataGridViewCellStyle14.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.colMsg.DefaultCellStyle = dataGridViewCellStyle14; this.colMsg.FillWeight = 200F; this.colMsg.HeaderText = "操作结果"; this.colMsg.Name = "colMsg"; this.colMsg.ReadOnly = true; // + // chk + // + this.chk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.chk.AutoSize = true; + this.chk.Checked = true; + this.chk.CheckState = System.Windows.Forms.CheckState.Checked; + this.chk.Location = new System.Drawing.Point(1277, 3); + this.chk.Name = "chk"; + this.chk.Size = new System.Drawing.Size(63, 21); + this.chk.TabIndex = 671; + this.chk.Text = "多选框"; + this.chk.UseVisualStyleBackColor = true; + this.chk.Visible = false; + // + // statusBar + // + this.statusBar.BackColor = System.Drawing.Color.White; + this.statusBar.Dock = System.Windows.Forms.DockStyle.Left; + this.statusBar.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusBar.Location = new System.Drawing.Point(296, 0); + this.statusBar.Margin = new System.Windows.Forms.Padding(0); + this.statusBar.Name = "statusBar"; + this.statusBar.Size = new System.Drawing.Size(743, 25); + this.statusBar.TabIndex = 5; + // + // ucSplitPage1 + // + this.ucSplitPage1.CurrentPage = 1; + this.ucSplitPage1.Dock = System.Windows.Forms.DockStyle.Left; + this.ucSplitPage1.IsShowPageSize = false; + this.ucSplitPage1.Location = new System.Drawing.Point(0, 0); + this.ucSplitPage1.Margin = new System.Windows.Forms.Padding(0); + this.ucSplitPage1.Name = "ucSplitPage1"; + this.ucSplitPage1.Padding = new System.Windows.Forms.Padding(0, 0, 1, 0); + this.ucSplitPage1.PageSize = 50; + this.ucSplitPage1.Size = new System.Drawing.Size(296, 25); + this.ucSplitPage1.TabIndex = 6; + this.ucSplitPage1.TotalPage = 1; + this.ucSplitPage1.PageChange += new System.Action(this.ucSplitPage1_PageChange); + // + // txtMinPrice + // + this.txtMinPrice.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.txtMinPrice.Location = new System.Drawing.Point(965, 76); + this.txtMinPrice.Name = "txtMinPrice"; + this.txtMinPrice.Size = new System.Drawing.Size(39, 23); + this.txtMinPrice.TabIndex = 842; + this.txtMinPrice.Text = "10"; + // + // label6 + // + this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(849, 79); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(116, 17); + this.label6.TabIndex = 843; + this.label6.Text = "入库时移除价格低于"; + // + // label7 + // + this.label7.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(1004, 79); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(44, 17); + this.label7.TabIndex = 844; + this.label7.Text = "元SKU"; + // // PDDGetChanceProdForm // this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; - this.ClientSize = new System.Drawing.Size(1179, 635); + this.ClientSize = new System.Drawing.Size(1344, 635); this.Controls.Add(this.splitContainer1); this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.Name = "PDDGetChanceProdForm"; @@ -935,5 +970,8 @@ namespace TemuKJD.PDDForms.ProductSelectForms private System.Windows.Forms.DataGridViewTextBoxColumn colPrice; private System.Windows.Forms.DataGridViewLinkColumn colDel; private System.Windows.Forms.DataGridViewTextBoxColumn colMsg; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox txtMinPrice; } } \ No newline at end of file diff --git a/TEMUKJD/PDDForms/ProductSelectForms/PDDGetChanceProdForm.cs b/TEMUKJD/PDDForms/ProductSelectForms/PDDGetChanceProdForm.cs index 3971d91..9b94540 100644 --- a/TEMUKJD/PDDForms/ProductSelectForms/PDDGetChanceProdForm.cs +++ b/TEMUKJD/PDDForms/ProductSelectForms/PDDGetChanceProdForm.cs @@ -671,10 +671,64 @@ namespace TemuKJD.PDDForms.ProductSelectForms continue; var dbProd = chanceProd.dbProduct; - var product = JsonHelper.DeserializeJsonToObject(dbProd.product_json).detail; + PDDProductDetailInfo prodDetail = null; + try + { + // 序列化第一组,从中获取所有价格不达标需要剔除的spec + var prodJObj = JObject.Parse(dbProd.product_json); + var skuJArr = prodJObj["detail"]["sku"] as JArray; + List specIdLst = new List(); + List specNameLst = new List(); + foreach (var skuJObj in skuJArr) + { + if (skuJObj["multi_price"].ParseToInt() < this.txtMinPrice.Text.Trim().ParseToDecimal() * 100) + { + foreach(var specJObj in skuJObj["spec"] as JArray) + { + specIdLst.Add(specJObj["spec_id"].ParseToLong()); + specNameLst.Add(specJObj["spec_name"].ParseToString()); + } + } + } + skuJArr.RemoveAll(); + + // 序列化第二组,从组中挑选符合价格条件的sku往第一组内填写 + var prodJObj2 = JObject.Parse(dbProd.product_json); + var skuJArr2 = prodJObj2["detail"]["sku"] as JArray; + foreach (var skuJObj2 in skuJArr2) + { + //var specJArr2 = skuJArr2["spec"] as JArray; + //if (specJArr2.Count > 0 && specIdLst.Contains(specJArr2[0]["spec_id"].ParseToLong())) + // continue; + //if (specJArr2.Count > 1 && specIdLst.Contains(specJArr2[1]["spec_id"].ParseToLong())) + // continue; + if (skuJObj2["multi_price"].ParseToInt() >= this.txtMinPrice.Text.Trim().ParseToDecimal() * 100) + skuJArr.Add(skuJObj2); + } + if (skuJArr.Count == 0) + { + Invoke(new Action(() => + { + row.Cells["colMsg"].Value = "商品价格低于设定,跳过"; + })); + continue; + } + + dbProd.product_json = JsonHelper.SerializeObject(prodJObj); + prodDetail = JsonHelper.DeserializeJsonToObject(dbProd.product_json).detail; + } + catch (Exception ex) + { + Invoke(new Action(() => + { + row.Cells["colMsg"].Value = "商品入库错误:" + ex.Message; + })); + continue; + } bool isExist = false; var existUrl = BaseClass.BuildObjString("product/get_product_list"); + // 每次获取的机会商品goods_id都不同,此处根据机会商品的chanceId来获取库中是否存在 string existData = UserLogin.GetSignaturex() + "&from_shop_id=" + chanceId; string html = GetHtml.PostUtf8(existUrl, existData); if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) @@ -686,12 +740,29 @@ namespace TemuKJD.PDDForms.ProductSelectForms if (html.Contains("\"data\":[") && !html.Contains("\"data\":[]")) isExist = true; } + else + { + Invoke(new Action(() => + { + row.Cells["colMsg"].Value = "入库失败,产品数据库连接失败"; + })); + continue; + } var url = BaseClass.BuildObjString("product/add_product"); if (isExist) { if (chkOverride.Checked) + { + var oldSpuId = BaseRegex.GetLongJson(ref html, "spu_id"); + if (oldSpuId > 0) + { + // 将商品Id替换成老的商品Id + dbProd.product_json = dbProd.product_json.Replace(prodDetail.goods_id.ParseToString(), oldSpuId.ParseToString()); + prodDetail.goods_id = oldSpuId; + } url = BaseClass.BuildObjString("product/mdy_product"); + } else { Invoke(new Action(() => @@ -704,15 +775,15 @@ namespace TemuKJD.PDDForms.ProductSelectForms var data = Work.UserLogin.GetSignaturex() + "&from_shop_id=" + chanceId + - "&spu_id=" + product.goods_id.ParseToString() + - "&skc_id=" + product.goods_id.ParseToString() + - "&price_text=" + product.sku.Min(s => s.multi_price).ParseToInt() * 0.01m + "-" + product.sku.Max(s => s.multi_price).ParseToInt() * 0.01m + - "&main_cat_id=" + (product.cat_ids?.FirstOrDefault(c => c != null)).ParseToString() + - "&main_cat_name=" + HttpUtility.UrlEncode((product.cats?.FirstOrDefault(c => !string.IsNullOrEmpty(c))).ParseToString(), Encoding.UTF8) + - "&cat_id=" + (product.cat_id).ParseToString() + - "&cat_name=" + HttpUtility.UrlEncode((product.cats?.LastOrDefault(c => !string.IsNullOrEmpty(c))).ParseToString(), Encoding.UTF8) + - "&ext_code=" + HttpUtility.UrlEncode(product.out_goods_sn, Encoding.UTF8) + - "&product_name=" + HttpUtility.UrlEncode(product.goods_name, Encoding.UTF8) + + "&spu_id=" + prodDetail.goods_id.ParseToString() + + "&skc_id=" + prodDetail.goods_id.ParseToString() + + "&price_text=" + prodDetail.sku.Min(s => s.multi_price).ParseToInt() * 0.01m + "-" + prodDetail.sku.Max(s => s.multi_price).ParseToInt() * 0.01m + + "&main_cat_id=" + (prodDetail.cat_ids?.FirstOrDefault(c => c != null)).ParseToString() + + "&main_cat_name=" + HttpUtility.UrlEncode((prodDetail.cats?.FirstOrDefault(c => !string.IsNullOrEmpty(c))).ParseToString(), Encoding.UTF8) + + "&cat_id=" + (prodDetail.cat_id).ParseToString() + + "&cat_name=" + HttpUtility.UrlEncode((prodDetail.cats?.LastOrDefault(c => !string.IsNullOrEmpty(c))).ParseToString(), Encoding.UTF8) + + "&ext_code=" + HttpUtility.UrlEncode(prodDetail.out_goods_sn, Encoding.UTF8) + + "&product_name=" + HttpUtility.UrlEncode(prodDetail.goods_name, Encoding.UTF8) + "&product_json=" + HttpUtility.UrlEncode(dbProd.product_json, Encoding.UTF8) + "&size_json=" + HttpUtility.UrlEncode(dbProd.size_json, Encoding.UTF8) + "&main_img=" + HttpUtility.UrlEncode(dbProd.main_img, Encoding.UTF8) +