From 8f733111761ebffe00f7fbab45f6903fdbfe60a7 Mon Sep 17 00:00:00 2001 From: wule Date: Mon, 2 Nov 2026 17:04:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=BC=E5=A4=9A=E5=A4=9A=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E5=85=85=E7=94=B5=E5=AE=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PDDProdParam/PDDProductUploadParam.cs | 2 +- .../ProductSelectForms/PDDDBProdUploadForm.cs | 424 ++++++++++++------ 2 files changed, 282 insertions(+), 144 deletions(-) diff --git a/AllBase/Model/Param/PDDProdParam/PDDProductUploadParam.cs b/AllBase/Model/Param/PDDProdParam/PDDProductUploadParam.cs index d44bb1b..b1ac05c 100644 --- a/AllBase/Model/Param/PDDProdParam/PDDProductUploadParam.cs +++ b/AllBase/Model/Param/PDDProdParam/PDDProductUploadParam.cs @@ -190,7 +190,7 @@ namespace AllBase.Model.Param.PDDProdParam public long? template_module_id { get; set; } public int? ref_pid { get; set; } public int? pid { get; set; } - public long? vid { get; set; } + public long? vid { get; set; } = 0; public string value { get; set; } public string value_unit { get; set; } public table_info_dto_param table_info_dto { get; set; } diff --git a/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdUploadForm.cs b/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdUploadForm.cs index c9cc890..1e4bb30 100644 --- a/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdUploadForm.cs +++ b/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdUploadForm.cs @@ -32,6 +32,7 @@ using System.Drawing.Imaging; using NaiBa.CefHelper.Handler; using TemuKJD.Helper; using CefSharp.WinForms; +using Work.GoodDetail; namespace TemuKJD.PDDForms.ProductSelectForms { @@ -1839,10 +1840,22 @@ namespace TemuKJD.PDDForms.ProductSelectForms } } } - #endregion - #region 没有specId的商品重新识别specID - if (skuInfoEditLst.Any(s => s.spec.Any(sp => sp.parent_id.ParseToLong() == 0 || sp.spec_id.ParseToLong() == 0))) + // 多级sku直接置为0 + if (skuInfoEditLst.Any(s => s.spec.Count > 2)) + { + foreach (var skuInfo in skuInfoEditLst) + { + foreach (var skuSpec in skuInfo.spec) + { + skuSpec.spec_id = 0; + } + } + } + #endregion + + #region 没有specId的商品重新识别specID(三级sku也要重新获取因为原来不支持三级,上面已置空) + if (skuInfoEditLst.Any(s => s.spec.Any(sp => sp.parent_id.ParseToLong() == 0 || sp.spec_id.ParseToLong() == 0))) { Invoke(new Action(() => { @@ -1875,18 +1888,21 @@ namespace TemuKJD.PDDForms.ProductSelectForms var index = 0; foreach (var specInfo in skuInfo.spec) { - long parent_id = 0; - try - { - parent_id = specNameDic.FirstOrDefault(s => s.Value == specInfo.parent_name).Key; - } - catch - { - } - if (parent_id == 0) - parent_id = specNameDic.ToList()[index].Key; + if (specInfo.parent_id.IsNullOrZero()) + { + long parent_id = 0; + try + { + parent_id = specNameDic.FirstOrDefault(s => s.Value == specInfo.parent_name).Key; + } + catch + { + } + if (parent_id == 0) + parent_id = specNameDic.ToList()[index].Key; - specInfo.parent_id = parent_id; + specInfo.parent_id = parent_id; + } specInfo.spec_id = skuInfoEditLst.FirstOrDefault(s => s.spec[index].spec_name == specInfo.spec_name && s.spec[index].spec_id > 0)?.spec[index].spec_id; if (specInfo.spec_id == null || specInfo.spec_id == 0) @@ -1973,7 +1989,9 @@ namespace TemuKJD.PDDForms.ProductSelectForms pre_sale_time = skuInfo.pre_sale_time, sku_id = skuInfo.sku_id, thumb_url_file_id = skuInfo.thumb_url_file_id, - }; + sku_basic_property_dtos = skuInfo.sku_basic_property_dtos == null ? + null : JsonHelper.DeserializeJsonToList(JsonHelper.SerializeObject(skuInfo.sku_basic_property_dtos)), + }; if (dbProd.product_get_type_text == "厂商直采" && skuInfo.quantity == 0) skuParam.quantity_delta = 0; if (chkUseExtCodePrice.Checked && dbProd.ext_code_price > 0) @@ -2687,82 +2705,161 @@ namespace TemuKJD.PDDForms.ProductSelectForms } } //spec属性填写到商品属性内 - if (isUseUpperSizeSpec == true && prodInfo.size != null && prodInfo.size.classId != null && prodCatTemplateInfo.spec_module != null) + if ((isUseUpperSizeSpec == true && prodInfo.size != null && prodInfo.size.classId != null && prodCatTemplateInfo.spec_module != null) || + prodParam.skus.Any(s=>s.spec?.Count > 2)) { - foreach (var sku in prodParam.skus) - { - if (sku.spec != null && sku.spec.Count > 0) - { - var skuSpec = sku.spec[0]; + foreach (var sku in prodParam.skus) + { + int group = 1; + if (sku.spec != null && sku.spec.Count > 0) + { + group++; + foreach (var skuSpec in sku.spec) + { + //已存在sku属性跳过 + if (prodParam.goods_properties.Any(p => (p as goods_spec_property_param)?.value == skuSpec.spec_name)) + continue; - //已存在sku属性跳过 - if (prodParam.goods_properties.Any(p => (p as goods_spec_property_param)?.value == skuSpec.spec_name)) - continue; + var specModule = prodCatTemplateInfo.spec_module; + var specProp = prodCatTemplateInfo.spec_module.properties.FirstOrDefault(p => p.name_alias == skuSpec.parent_name); + var defaultPropValue = specProp.values.FirstOrDefault(); + var defaultGroup = (defaultPropValue?.group) == null ? group : defaultPropValue.group.id; + var specPropValue = specProp.values.FirstOrDefault(v => v.value == skuSpec.spec_name); + if (specProp != null) + { + var spec_prop = new goods_spec_property_param() + { + pid = specProp.pid, + ref_pid = specProp.ref_pid, + template_pid = specProp.id, + value = skuSpec.spec_name, + value_unit = "", + vid = specPropValue?.vid ?? 0, + parent_spec_id = skuSpec.parent_id, + spec_id = skuSpec.spec_id, + note = "", + img_url = "", + group_id = /*2, */ (specPropValue?.group?.id) == null ? defaultGroup : (specPropValue.group.id).ParseToInt(), + template_module_id = specModule.id, + }; + prodParam.goods_properties.Add(spec_prop); + } + } + } + } - var specModule = prodCatTemplateInfo.spec_module; - var specProp = prodCatTemplateInfo.spec_module.properties.FirstOrDefault(p => p.name_alias == skuSpec.parent_name); - var defaultPropValue = specProp.values.FirstOrDefault(); - var defaultGroup = (defaultPropValue?.group) == null ? 2 : defaultPropValue.group.id; - var specPropValue = specProp.values.FirstOrDefault(v => v.value == skuSpec.spec_name); - if (specProp != null) - { - var spec_prop = new goods_spec_property_param() - { - pid = specProp.pid, - ref_pid = specProp.ref_pid, - template_pid = specProp.id, - value = skuSpec.spec_name, - value_unit = "", - vid = specPropValue?.vid, - parent_spec_id = skuSpec.parent_id, - spec_id = skuSpec.spec_id, - note = "", - img_url = "", - group_id = /*2, */ (specPropValue?.group?.id) == null ? defaultGroup : (specPropValue.group.id).ParseToInt(), - template_module_id = specModule.id, - }; - prodParam.goods_properties.Add(spec_prop); - } - } - } - foreach (var sku in prodParam.skus) - { - if (sku.spec != null && sku.spec.Count > 1) - { - var skuSpec = sku.spec[1]; + //foreach (var sku in prodParam.skus) + //{ + // if (sku.spec != null && sku.spec.Count > 0) + // { + // var skuSpec = sku.spec[0]; + // + // //已存在sku属性跳过 + // if (prodParam.goods_properties.Any(p => (p as goods_spec_property_param)?.value == skuSpec.spec_name)) + // continue; + // + // var specModule = prodCatTemplateInfo.spec_module; + // var specProp = prodCatTemplateInfo.spec_module.properties.FirstOrDefault(p => p.name_alias == skuSpec.parent_name); + // var defaultPropValue = specProp.values.FirstOrDefault(); + // var defaultGroup = (defaultPropValue?.group) == null ? 2 : defaultPropValue.group.id; + // var specPropValue = specProp.values.FirstOrDefault(v => v.value == skuSpec.spec_name); + // if (specProp != null) + // { + // var spec_prop = new goods_spec_property_param() + // { + // pid = specProp.pid, + // ref_pid = specProp.ref_pid, + // template_pid = specProp.id, + // value = skuSpec.spec_name, + // value_unit = "", + // vid = specPropValue?.vid ?? 0, + // parent_spec_id = skuSpec.parent_id, + // spec_id = skuSpec.spec_id, + // note = "", + // img_url = "", + // group_id = /*2, */ (specPropValue?.group?.id) == null ? defaultGroup : (specPropValue.group.id).ParseToInt(), + // template_module_id = specModule.id, + // }; + // prodParam.goods_properties.Add(spec_prop); + // } + // } + //} - //已存在sku属性跳过 - if (prodParam.goods_properties.Any(p => (p as goods_spec_property_param)?.value == skuSpec.spec_name)) - continue; + //foreach (var sku in prodParam.skus) + //{ + // if (sku.spec != null && sku.spec.Count > 1) + // { + // var skuSpec = sku.spec[1]; + // + // //已存在sku属性跳过 + // if (prodParam.goods_properties.Any(p => (p as goods_spec_property_param)?.value == skuSpec.spec_name)) + // continue; + // + // var specModule = prodCatTemplateInfo.spec_module; + // var specProp = prodCatTemplateInfo.spec_module.properties.FirstOrDefault(p => p.name_alias == skuSpec.parent_name); + // var defaultPropValue = specProp.values.FirstOrDefault(); + // var defaultGroup = (defaultPropValue?.group) == null ? 3 : defaultPropValue.group.id; + // var specPropValue = specProp.values.FirstOrDefault(v => v.value == skuSpec.spec_name); + // if (specProp != null) + // { + // var spec_prop = new goods_spec_property_param() + // { + // pid = specProp.pid, + // ref_pid = specProp.ref_pid, + // template_pid = specProp.id, + // value = skuSpec.spec_name, + // value_unit = "", + // vid = specPropValue?.vid ?? 0, + // parent_spec_id = skuSpec.parent_id, + // spec_id = skuSpec.spec_id, + // note = "", + // img_url = "", + // group_id = /*3, */ (specPropValue?.group?.id) == null ? defaultGroup : (specPropValue.group.id).ParseToInt(), + // template_module_id = specModule.id, + // }; + // prodParam.goods_properties.Add(spec_prop); + // } + // } + //} - var specModule = prodCatTemplateInfo.spec_module; - var specProp = prodCatTemplateInfo.spec_module.properties.FirstOrDefault(p => p.name_alias == skuSpec.parent_name); - var defaultPropValue = specProp.values.FirstOrDefault(); - var defaultGroup = (defaultPropValue?.group) == null ? 3 : defaultPropValue.group.id; - var specPropValue = specProp.values.FirstOrDefault(v => v.value == skuSpec.spec_name); - if (specProp != null) - { - var spec_prop = new goods_spec_property_param() - { - pid = specProp.pid, - ref_pid = specProp.ref_pid, - template_pid = specProp.id, - value = skuSpec.spec_name, - value_unit = "", - vid = specPropValue?.vid, - parent_spec_id = skuSpec.parent_id, - spec_id = skuSpec.spec_id, - note = "", - img_url = "", - group_id = /*3, */ (specPropValue?.group?.id) == null ? defaultGroup : (specPropValue.group.id).ParseToInt(), - template_module_id = specModule.id, - }; - prodParam.goods_properties.Add(spec_prop); - } - } - } - } + //foreach (var sku in prodParam.skus) + //{ + // if (sku.spec != null && sku.spec.Count > 2) + // { + // var skuSpec = sku.spec[2]; + // + // //已存在sku属性跳过 + // if (prodParam.goods_properties.Any(p => (p as goods_spec_property_param)?.value == skuSpec.spec_name)) + // continue; + // + // var specModule = prodCatTemplateInfo.spec_module; + // var specProp = prodCatTemplateInfo.spec_module.properties.FirstOrDefault(p => p.name_alias == skuSpec.parent_name); + // var defaultPropValue = specProp.values.FirstOrDefault(); + // var defaultGroup = (defaultPropValue?.group) == null ? 4 : defaultPropValue.group.id; + // var specPropValue = specProp.values.FirstOrDefault(v => v.value == skuSpec.spec_name); + // if (specProp != null) + // { + // var spec_prop = new goods_spec_property_param() + // { + // pid = specProp.pid, + // ref_pid = specProp.ref_pid, + // template_pid = specProp.id, + // value = skuSpec.spec_name, + // value_unit = "", + // vid = specPropValue?.vid ?? 0, + // parent_spec_id = skuSpec.parent_id, + // spec_id = skuSpec.spec_id, + // note = "", + // img_url = "", + // group_id = /*3, */ (specPropValue?.group?.id) == null ? defaultGroup : (specPropValue.group.id).ParseToInt(), + // template_module_id = specModule.id, + // }; + // prodParam.goods_properties.Add(spec_prop); + // } + // } + //} + } #region 生成一个fake商品提交参数,价格按照3倍(指定倍数)上传,用于参加活动 @@ -3279,7 +3376,17 @@ namespace TemuKJD.PDDForms.ProductSelectForms } })); Thread.Sleep(Randomx.GetId(20, 100)); - //var str = JsonHelper.SerializeObject(prodParam); + //if (prodParam.skus.Any(s => s.spec?.Count > 2)) + //{ + // foreach(var sku in prodParam.skus) + // { + // foreach (var sp in sku.spec) + // { + + // } + // } + //} + var str = JsonHelper.SerializeObject(prodParam); var uploadRst = submit_goods_edit(shop, prodParam.goods_id.ParseToString(), prodParam.goods_commit_id, isChanceApi); if (!uploadRst.Contains("\"success\":true")) { @@ -8085,10 +8192,22 @@ Content-Type: image/jpeg for (int i = 0; i < prodInfo.property.goods_properties.Count; i++) { var propInfo = prodInfo.property.goods_properties[i]; + var propName = propInfo.name; var propTemp = prodCatTemplateInfo.modules.FirstOrDefault()?.propertys.FirstOrDefault(p => p.ref_pid == propInfo.ref_pid); if (propTemp == null) continue; + + if (propName == "净重" && propInfo.values.FirstOrDefault()?.value != null) + { + var oldValue = propInfo.values.FirstOrDefault()?.value; + var match = Regex.Matches(oldValue, @"\d+"); + if (match.Count > 0) + { + propInfo.values.FirstOrDefault().value = match[0].Value; + propInfo.values.FirstOrDefault().unit = oldValue.Replace(match[0].Value, ""); + } + } var prop = new goods_property_param() { @@ -8096,10 +8215,10 @@ Content-Type: image/jpeg template_module_id = prodCatTemplateInfo.modules.FirstOrDefault().id, ref_pid = propInfo.ref_pid, pid = propTemp.pid, - vid = propInfo.values.FirstOrDefault()?.vid, - value = "", - value_unit = "", - content = (propInfo.values.FirstOrDefault()?.value).ParseToString(), + vid = propInfo.values.FirstOrDefault()?.vid ?? 0, + value = propInfo.values.FirstOrDefault()?.value ?? "", + value_unit = propInfo.values.FirstOrDefault()?.unit ?? "", + content = propInfo.values.FirstOrDefault()?.value ?? "", }; if (propInfo.values.FirstOrDefault()?.table_info_vo?.table_value_list?.FirstOrDefault() != null) { @@ -8247,9 +8366,9 @@ Content-Type: image/jpeg template_module_id = prodCatTemplateInfo.modules.FirstOrDefault().id, ref_pid = propInfo.ref_pid, pid = propTemp.pid, - vid = propInfo.values.FirstOrDefault()?.vid, - value = "", - value_unit = "", + vid = propInfo.values.FirstOrDefault()?.vid ?? 0, + value = (propInfo.values.FirstOrDefault()?.value).ParseToString(), + value_unit = propInfo.values.FirstOrDefault()?.unit ?? "", content = (propInfo.values.FirstOrDefault()?.value).ParseToString(), }; if (propInfo.values.FirstOrDefault()?.table_info_vo?.table_value_list?.FirstOrDefault() != null) @@ -8269,59 +8388,78 @@ Content-Type: image/jpeg //step3(共3个step)如果有遗漏的必填(required)商品属性,按默认值填写 foreach (var propTemp in prodCatTemplateInfo.modules.FirstOrDefault()?.propertys) { + if (propTemp.name_alias == "产品名称") + { + + } if (propTemp.required && !goods_properties.Any(p => p.ref_pid == propTemp.ref_pid)) { var contentOther = propTemp.values?.content?.FirstOrDefault(c => c.value == "其他"); - if (contentOther != null) - { - //var prop = new goods_property_param() - var prop = new goods_spec_property_param() - { - template_pid = propTemp.id, - template_module_id = prodCatTemplateInfo.modules.FirstOrDefault().id, - ref_pid = propTemp.ref_pid, - pid = propTemp.pid, - vid = contentOther.vid, - value = "", - value_unit = "", - content = contentOther.value, - }; - goods_properties.Add(prop); - } - else if (propTemp.name_alias == "成分含量") - { - var contentValue = propTemp.values.content.FirstOrDefault(v => v.value.Contains("以下")); - if (contentValue != null) - { - var prop = new goods_spec_property_param() - { - template_pid = propTemp.id, - template_module_id = prodCatTemplateInfo.modules.FirstOrDefault().id, - ref_pid = propTemp.ref_pid, - pid = propTemp.pid, - vid = contentValue.vid, - value = "", - value_unit = "", - content = contentValue.value, - }; - goods_properties.Add(prop); - } - } - else if (propTemp.show_type == 1 && propTemp.values.content.Count == 1) // 二级关联属性 - { - var prop = new goods_spec_property_param() - { - template_pid = propTemp.id, - template_module_id = prodCatTemplateInfo.modules.FirstOrDefault().id, - ref_pid = propTemp.ref_pid, - pid = propTemp.pid, - vid = propTemp.values.content.FirstOrDefault().vid, - value = "", - value_unit = "", - content = propTemp.values.content.FirstOrDefault().value, - }; - goods_properties.Add(prop); - } + if (contentOther != null) + { + //var prop = new goods_property_param() + var prop = new goods_spec_property_param() + { + template_pid = propTemp.id, + template_module_id = prodCatTemplateInfo.modules.FirstOrDefault().id, + ref_pid = propTemp.ref_pid, + pid = propTemp.pid, + vid = contentOther.vid ?? 0, + value = contentOther.value, + value_unit = "", + content = contentOther.value, + }; + goods_properties.Add(prop); + } + else if (propTemp.name_alias == "产品名称") + { + var prop = new goods_spec_property_param() + { + template_pid = propTemp.id, + template_module_id = prodCatTemplateInfo.modules.FirstOrDefault().id, + ref_pid = propTemp.ref_pid, + pid = propTemp.pid, + vid = 0, + value = prodParam.goods_name, + value_unit = "", + content = prodParam.goods_name, + }; + goods_properties.Add(prop); + } + else if (propTemp.name_alias == "成分含量") + { + var contentValue = propTemp.values.content.FirstOrDefault(v => v.value.Contains("以下")); + if (contentValue != null) + { + var prop = new goods_spec_property_param() + { + template_pid = propTemp.id, + template_module_id = prodCatTemplateInfo.modules.FirstOrDefault().id, + ref_pid = propTemp.ref_pid, + pid = propTemp.pid, + vid = contentValue.vid ?? 0, + value = contentValue.value, + value_unit = "", + content = contentValue.value, + }; + goods_properties.Add(prop); + } + } + else if (propTemp.show_type == 1 && propTemp.values.content.Count == 1) // 二级关联属性 + { + var prop = new goods_spec_property_param() + { + template_pid = propTemp.id, + template_module_id = prodCatTemplateInfo.modules.FirstOrDefault().id, + ref_pid = propTemp.ref_pid, + pid = propTemp.pid, + vid = propTemp.values.content.FirstOrDefault().vid ?? 0, + value = propTemp.values.content.FirstOrDefault().value ?? "", + value_unit = "", + content = propTemp.values.content.FirstOrDefault().value ?? "", + }; + goods_properties.Add(prop); + } } } foreach (var prodTempInfo in prodCatTemplateInfo.modules.FirstOrDefault()?.propertys)