using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Windows.Forms; using AllBase; using Work.CollectClass; using Work.ManageClass; using System.Data; using System.Threading.Tasks; namespace Work.Api { public class UploadPinduoduoMain { public string Name; public ShopChatBase Shop; public UploadPinduoduoMain(string name) { Name = name; } public static bool isUseCache = true; public static Dictionary EditDayTemp = new Dictionary(); public static Dictionary CatDayTemp = new Dictionary(); public static Dictionary CatHtmlTemp = new Dictionary(); public static decimal MultiPrice = 0, MultiSavePrice = 0, MultiPricex = 0, Postage = 0, SinglePrice = 0, BeforePrice = 0, LowPricePercent = 1.0m, LowPriceStock = 0, LowPriceAdd = 0; public static bool RandPrice = false, ImageBuild = false, PropImageToMain = false, DeleteMainImage = false, RandSku = false, ErrorDown = false, RandDeleteSku = false, RandDeleteImage = false, RandMainImage = false, Running = false, RunningReplace = false, JustSaveContentImage = false, DeleteFirst = false, PriceShield = false, RandDesc = false, UseApi = false, Relation = false, GotoEnd = false, NoSold = false, NoVisit = false, NoNeerReplace = false, OffProduct = false, JustOnline = false, JustOffline = false, Waiting = false, ReplaceWaiting = false, JustFree = false, LimitReplace = false, PreFix = false, Irregularities = false, IrregularitiesWord = false,JinUp = false, CutHand = false, RunningLoop = false, LowPriceSku = false, LowPriceQ = false, JustCollection = false, JustSales = false, limitCount = false, ResurHand = false, DesShop = false, WhiteBack = false, SelBrand = false, NoRepeat = false, MainImg = false, singleUP = false,upRunning=false; public static int DeleteMainImageCut = 0, CutHandStock = 3, SubCoupon = 0, ShopThreadCount = 0, SingleThreadCount = 0, RandPrice1 = 0, RandPrice2 = 0, MaxUpload = 1000, JustSaveContentImageCount = 0, LimitBuy = 999, BuyLimit = 99, OrderLimit = 99, GroupCount = 2, VisitCount = 0, NoNeerDays = 0, Days = 0, OffProductCount = 0, ReplaceCount = 0, DelCount = 0; public static long MinPrice = 0, MaxPrice = 0; public static string PreFixTitle = ""; public static string CutHandName = "", CutHandImage = "", CutHandPath = ""; public static string onTime = ""; public static string offTime = ""; public static List ProductStock = new List(); public static List ProductStockTemp = new List(); public static List ProductTemp = new List(); public static List DeleteIds = new List(); public static List ShopTemp = new List(); public static List ProductReplaceTemp = new List(); public static List ProductArrangeTemp = new List(); public static List ProductResurVioTemp = new List(); public static List ProductResurTemp = new List(); public static List PromotionPlanList = new List(); public static List PromotionPlanTempList = new List(); public static List PromPlanList = new List(); public static List ShopReplaceTemp = new List(); //public static List ProductOnOrOffTemp = new List(); public static List ProductDelTemp = new List(); public static List onOrOffStatusList = new List(); public static List onOrLoopOffStatusList = new List(); public static List delGroupStatusList = new List(); public static int onSaleHour = 0; public static int offSaleHour = 0; public static List ProductOnOrOffTempDic = new List(); public static List RestoreProduct = new List(); public static bool onStartFlag = false; public bool isOnline = false; public string delTitle = ""; public static bool isAdvance = false, SaleSetFalseDown = false, NoRuleIds = false, defaultPid = false, isLowPriceApplied = false; public static long endAdvanceTime = 0; public long arrangePid = 0; public static string arrangeGoodName = ""; public List arrangePidList = new List(); public string arrangeShopName = ""; public static List brandNameList = new List(); public List ResurProList = new List(); public List goodIds = new List(); public List keywords = new List(); public static Dictionary dicPlan = new Dictionary(); public static List formIdlist = new List(); public static int CustomThreadCount = 20; public static Dictionary> ShopTitles = new Dictionary>(); public static List RuleIds = new List(); public static List RuleTitles = new List(); public static bool ckBrandName = false; public static string BrandName = ""; public static int upGoodsCount = 0; public static string fixName = "前缀"; public static bool isPreSale = false; public static long endAdvanceTimex = 0; public static bool isSevNoRea = false; public static bool isDefaultQun = false; public static bool isDefaultMoni = false; public static bool isProxy = true; public static bool isfolt = false; public static bool isSecond = false; public static bool isLogistics = false; public static bool isFourLogistics = false; public static bool isSpecCount = false; public static bool ismaterial = false; public static bool isfruit = false; public static bool isExpressPrice = true; public static bool isChkAutophy = false; public static bool isUpSku = true; public static string AntiContent = ""; public static long SingleCount = -1; public static string AddCatString = ""; public static bool upfinish = false; public static bool isCatType = false; public static Dictionary CountryList = new Dictionary(); public static List brandFilterNameList = new List(); public static decimal minPrice = 0M; public static decimal maxPrice = 0M; public static string priceModel = "0"; public static bool isPriceModel = false; public static bool isDraft = false; public static bool isMaxPrice = false; public static bool isUsePddCache = true; public static bool isUseTaoBaoCache = true; public static bool isUseDouYinCache = true; public static List PriceModelList = new List(); public void Get() { upRunning = true; GotoEnd = false; bool first = true; JingXiCollect.VerifyCodeUrl = "";//京喜采集全局变量初始化赋初值 by ttzhao 2020.6.29 new Thread(CutImage).Start(); if (singleUP) { ProductStockTemp.Clear(); for (int i = 0; i < ProductStock.Count; i++) { ProductStockTemp.Add(ProductStock[i]); } } for (int i = 0; i < ProductStock.Count; i++) { if (ProductStock[i].MainCatId == 0) { CatTemp.Add(ProductStock[i]); } } if (CatTemp.Count > 0) { new Thread(GetNewCat).Start(); } //Again: List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count && upRunning; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.Select || !shop.Showed) continue; if (singleUP) Threadx.ThreadListWait(ref ts, new Thread(new UploadShopControl(Name, shop).Getsingle), ShopThreadCount); else Threadx.ThreadListWait(ref ts, new Thread(new UploadShopControl(Name, shop).Get), ShopThreadCount); Thread.Sleep(1000); if (first && ShopThreadCount > 1) { first = false; Thread.Sleep(20 * 1000); } } Threadx.ThreadListWait(ref ts); //if (ProductStock.Count==0) //{ // Running = false; // GotoEnd = true; //} //else //{ // goto Again; //} MessageBox.Show("上传执行完成", "提示"); upfinish = true; //if (UploadPinduoduoMain.isChkAutophy) // GetInsPec(); } public static List imgList = new List(); public static bool RunningImage = false; public static int RelErrorCount = 0; public static string RelErrorMessage = ""; public void CutImage() { if (RunningImage) return; RunningImage = true; List ts = new List(); while (true) { if (imgList.Count <= 0) { Thread.Sleep(2000); continue; } try { var p = imgList[0]; imgList.RemoveAt(0); string[] info = p.Split('@'); var shop = GetShopLoginInfo.Shops.Find(s => s.ShopName == info[0]); if (shop == null) continue; CutImage cutImage = new CutImage(Name, shop); cutImage.goodsId = long.Parse(info[1]); cutImage.url = info[2]; Threadx.ThreadListWait(ref ts, new Thread(cutImage.CutImageVaule), 8); Thread.Sleep(1000); } catch { } } } public void GetReplace() { RunningReplace = true; GotoEnd = false; List ts = new List(); bool first = true; for (int i = 0; i < GetShopLoginInfo.Shops.Count && RunningReplace; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; Threadx.ThreadListWait(ref ts, new Thread(new UploadShopControl(Name, shop).GetReplacePrice), ShopThreadCount); Thread.Sleep(1000 * ShopThreadCount); if (first && ShopThreadCount > 1) { first = false; Thread.Sleep(20 * 1000); } } Threadx.ThreadListWait(ref ts); Running = false; GotoEnd = true; MessageBox.Show("替换执行完成", "提示"); } public void GetClearWord() { RunningReplace = true; GotoEnd = false; List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count && RunningReplace; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; Threadx.ThreadListWait(ref ts, new Thread(new UploadShopControl(Name, shop).ClearTitle), ShopThreadCount); Thread.Sleep(2000 * ShopThreadCount); } Threadx.ThreadListWait(ref ts); Running = false; GotoEnd = true; MessageBox.Show("替换执行完成", "提示"); } public void SetNewTitle() { RunningReplace = true; GotoEnd = false; List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count && RunningReplace; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; Threadx.ThreadListWait(ref ts, new Thread(new UploadShopControl(Name, shop, true).ClearTitle), ShopThreadCount); Thread.Sleep(2000 * ShopThreadCount); } Threadx.ThreadListWait(ref ts); Running = false; GotoEnd = true; MessageBox.Show("替换执行完成", "提示"); } public void GetInsPec() { for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.Select || !shop.Showed) continue; string url = "https://mms.pinduoduo.com/gear/mall/inspect/new/goods/action/start"; string refer = "https://mms.pinduoduo.com/search/good_inspect_v2/inspect_start"; string data = "{}"; string html = GetPostTaobaoHtml.GetJsonPost(url, refer, true, data, shop.Cookies); LogSave.Add(Name, "店铺" + shop.ShopName + "商品体验执行完成"); } LogSave.Add(Name, "商品体验全部执行完成"); } public void SetAdvanceSale() { RunningReplace = true; //GotoEnd = false; List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count && RunningReplace; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; UploadShopControl.endAdvanceTime = endAdvanceTime; Threadx.ThreadListWait(ref ts, new Thread(new UploadShopControl(Name, shop, isAdvance).SetAdvanceSale), ShopThreadCount); Thread.Sleep(3000); } Threadx.ThreadListWait(ref ts); Running = false; //GotoEnd = true; //MessageBox.Show("预售执行完成", "提示"); } public void GetOnline() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; if (JustOnline) { var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; p.isOnline = true; Threadx.ThreadListWait(ref ts, new Thread(p.GetOnline), ShopThreadCount); } if (JustOffline) { var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; p.isOnline = false; p.OffOroduct = OffProduct; p.OffProductCount = OffProductCount; Threadx.ThreadListWait(ref ts, new Thread(p.GetOnline), ShopThreadCount); } Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public void GetArrangeOnline() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; if (JustOnline && JustOffline) { var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; //p.isOnline = false; p.JustCollection = JustCollection; p.JustSales = JustSales; p.minPrice = MinPrice; p.maxPrice = MaxPrice; p.arrangeGoodName = arrangeGoodName; //p.OffOroduct = OffProduct; //p.OffProductCount = OffProductCount; Threadx.ThreadListWait(ref ts, new Thread(p.GetAllArrangeOnline), ShopThreadCount); } else if (JustOnline) { var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; p.isOnline = true; p.JustCollection = JustCollection; p.JustSales = JustSales; p.minPrice = MinPrice; p.maxPrice = MaxPrice; p.arrangeGoodName = arrangeGoodName; Threadx.ThreadListWait(ref ts, new Thread(p.GetArrangeOnline), ShopThreadCount); } else if (JustOffline) { var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; p.isOnline = false; p.JustCollection = JustCollection; p.JustSales = JustSales; p.minPrice = MinPrice; p.maxPrice = MaxPrice; p.arrangeGoodName = arrangeGoodName; //p.OffOroduct = OffProduct; //p.OffProductCount = OffProductCount; Threadx.ThreadListWait(ref ts, new Thread(p.GetArrangeOnline), ShopThreadCount); } Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public static void GetCateTempHtml(int catId) { if (!Directory.Exists("temp/cattemp/")) FileBase.DirectoryCreate("temp/cattemp/"); string s = FileBase.ReadAllText("temp/cattemp/" + catId + "cathtml.tjm"); if (string.IsNullOrEmpty(s) || !s.Contains("@")) return; string[] li = s.Split('@'); if (li.Length > 2) li[2] = s.Substring(li[0].Length + li[1].Length + 2); long id = 0; if (li.Length <= 2 || !long.TryParse(li[0], out id)) return; DateTime dt = DateTime.Parse(li[1]); if (CatDayTemp.ContainsKey(id)) { CatDayTemp[id] = dt; CatHtmlTemp[id] = li[2]; } else { try { CatDayTemp.Add(id, dt); CatHtmlTemp.Add(id, li[2]); } catch { } } } public static void GetCateTempHtml() { if (!Directory.Exists("temp/cattemp/")) FileBase.DirectoryCreate("temp/cattemp/"); string[] files = Directory.GetFiles("temp/cattemp/", "*.tjm"); for (int i = 0; i < files.Length; i++) { string[] fl = FileBase.ReadAllLines(files[i]); if (fl != null) { foreach (string s in fl) { if (string.IsNullOrEmpty(s) || !s.Contains("@")) continue; string[] li = s.Split('@'); if (li.Length > 2) li[2] = s.Substring(li[0].Length + li[1].Length + 2); long id = 0; if (li.Length <= 2 || !long.TryParse(li[0], out id)) continue; DateTime dt = DateTime.Parse(li[1]); if (CatDayTemp.ContainsKey(id)) { CatDayTemp[id] = dt; CatHtmlTemp[id] = li[2]; } else { CatDayTemp.Add(id, dt); CatHtmlTemp.Add(id, li[2]); } } } } } public void GetResurReplace() { List ts = new List(); for (int i = 0; i < ResurProList.Count; i++) { var shop = GetShopLoginInfo.Shops.Find(s => s.ShopName == ResurProList[i].ShopName); if (shop == null) continue; if (shop.ExpressId == 0) { shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(shop.Cookies, shop.MallId, shop); if (shop.ExpressId == 0) { Thread.Sleep(10000); shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); } if (shop.ExpressId == 0) { LogSave.Add(Name, "运费模板未找到"); shop.Message = "请设置运费模板"; UploadPinduoduoMain.ShopTemp.Add(Shop); continue; } } if (!Directory.Exists("temp/resursame/")) FileBase.DirectoryCreate("temp/resursame/"); string[] fl = FileBase.ReadAllLines("temp/resursame/" + shop.ShopName + "edit.tjm"); if (fl != null) { foreach (string s in fl) { if (string.IsNullOrEmpty(s) || !s.Contains(",")) continue; string[] li = s.Split(','); long id = 0; if (li.Length != 2 || !long.TryParse(li[0], out id)) continue; DateTime dt = DateTime.Parse(li[1]); if (UpPinduoduoProduct.EditDayTemp.ContainsKey(id)) UpPinduoduoProduct.EditDayTemp[id] = dt; else UpPinduoduoProduct.EditDayTemp.Add(id, dt); } } var list = UpPinduoduoProduct.EditDayTemp.ToList(); bool ishad = false; for (int j = 0; j < list.Count; j++) { if (list[j].Value < DateTime.Now.AddDays(-UploadPinduoduoMain.NoNeerDays)) continue; var pp = ResurProList.Find(tt => tt != null && tt.GoodsId == list[j].Key); if (pp != null) { //ResurProList.Remove(pp); ishad = true; LogSave.Add(Name, "商品最近替换过,跳过:" + list[j].Key); Thread.Sleep(100); break; } } if (ishad) continue; var uc = new UploadShopControl(Name, shop, null); uc.product = ResurProList[i]; uc.GetReplaceRes(); Thread.Sleep(3000); } } public void GetResurAddOnline() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectResure || !shop.Showed) continue; var uc = new UploadShopControl(Name, shop); uc.productList = ResurProList; Threadx.ThreadListWait(ref ts, new Thread(uc.GetResureAdd), ShopThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public void GetResurOnline() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectResurVio || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); //p.ReplaceModel = true; //p.isOnline = false; //p.JustCollection = JustCollection; //p.JustSales = JustSales; ////p.OffOroduct = OffProduct; ////p.OffProductCount = OffProductCount; Threadx.ThreadListWait(ref ts, new Thread(p.GetResurOnline), ShopThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public void GetPromotionPlan() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectPlan || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.goodIds = goodIds; p.keywordxs = keywords; Threadx.ThreadListWait(ref ts, new Thread(p.GetPromotionPlan), ShopThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public void GetNonAdvanceOnline() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; p.isOnline = true; Threadx.ThreadListWait(ref ts, new Thread(p.GetNonAdvanceOnline), ShopThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public void GetAllShopOnline() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; p.isOnline = true; GetProductOnlineClass.endAdvanceTime = endAdvanceTime; Threadx.ThreadListWait(ref ts, new Thread(p.GetAllShopOnline), 50); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public void GetOnSaleProductline() { for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; p.isOnline = true; new Thread(p.GetOnline).Start(); } } public void GetVisit() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; var p = new GetVisitProductNew(Name, shop); p.ReplaceModel = true; Threadx.ThreadListWait(ref ts, new Thread(p.Get), ShopThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public bool SetOnline = false; public void SetStatus() { bool setOnLine = SetOnline; List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.isOnline = !setOnLine; p.OffOroduct = OffProduct; p.OffProductCount = OffProductCount; Threadx.ThreadListWait(ref ts, new Thread(p.UploadMethod), ShopThreadCount); } Threadx.ThreadListWait(ref ts); } public void SetShopGoodsStatus() { bool setOnLine = SetOnline; var shop = GetShopLoginInfo.Shops.Find(s => s.ShopName == arrangeShopName); if (!shop.SelectReplace || !shop.Showed) return; var p = new GetProductOnlineClass(Name, shop); p.isOnline = !setOnLine; p.arrangePid = arrangePid; new Thread(p.UploadArrangeMethod).Start(); } public void SetShopGoodsListStatus() { bool setOnLine = SetOnline; List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.isOnline = !setOnLine; Threadx.ThreadListWait(ref ts, new Thread(p.GetDownGood), ShopThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public static Dictionary TypeName = new Dictionary(); public static Dictionary TypeValues = new Dictionary(); private static int firstKeyId = 0, firstValueId = 0; /// /// 特殊属性独立添加 /// /// /// public static string AddType(ref ProductCollectBase p, int mainCatId, string cookies, int mallId) { return ""; if (mainCatId == 5) { if (TypeName.Count == 0) { string url = "https://mms.pinduoduo.com/malls/" + mallId + "/transport/glide/query/clothes_fabric/list"; string refere = "https://mms.pinduoduo.com/Pdd.html"; string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, "{}", cookies); var m = BaseRegex.GetMatchRegex(ref html, @"""code"":([\d]+),""desc"":""(.*?)"""); for (int i = 0; m != null && i < m.Count; i++) { string name = m[i].Groups[2].Value; int value = int.Parse(m[i].Groups[1].Value); if (firstKeyId == 0) firstKeyId = value; if (!TypeName.ContainsKey(name)) TypeName.Add(name, value); } } if (TypeValues.Count == 0) { string url = "https://mms.pinduoduo.com/malls/" + mallId + "/transport/glide/query/clothes_fabric_content/list"; string refere = "https://mms.pinduoduo.com/Pdd.html"; string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, "{}", cookies); var m = BaseRegex.GetMatchRegex(ref html, @"""code"":([\d]+),""desc"":""(.*?)"""); for (int i = 0; m != null && i < m.Count; i++) { string name = m[i].Groups[2].Value; int value = int.Parse(m[i].Groups[1].Value); if (firstValueId == 0) firstValueId = value; if (!TypeValues.ContainsKey(name)) TypeValues.Add(name, value); } } } if (mainCatId == 5) { string name = "材质成分"; string value = ""; for (int i = 0; i < p.Prop.Count; i++) { if (p.Prop[i].Key == name) { value = p.Prop[i].Value; break; } } int keyId = 0, valueId = 0; if (!string.IsNullOrEmpty(value) && value.Contains("%")) { string v = BaseRegex.GetMatchRegexString(ref value, @"([\d]+)%"); string namex = value.Substring(0, value.IndexOf(v + "%")); if (string.IsNullOrEmpty(v) || string.IsNullOrEmpty(namex)) { goto NoValue; } int pe = int.Parse(v); foreach (KeyValuePair k in TypeName) { if (k.Key.Contains(namex) || namex.Contains(k.Key)) { keyId = k.Value; foreach (KeyValuePair vv in TypeValues) { var mm = BaseRegex.GetMatchRegex(vv.Key, @"([\d]+)%"); if (mm.Count == 2) { int min = int.Parse(mm[0].Groups[1].Value); int max = int.Parse(mm[1].Groups[1].Value); if (pe >= min && pe <= max) { valueId = vv.Value; goto NoValue; } } } break; } } } NoValue: if (keyId == 0) keyId = firstKeyId; if (valueId == 0) valueId = firstValueId; string addContent = ",\"fabric\":" + keyId + ",\"fabric_content\":" + valueId; return addContent; } return ""; } public List CatTemp = new List(); public List DataBaseTemp = new List(); public List batchDataBaseTemp = new List(); public async Task InputData(string file, string shopName) { await Task.Run(() => { InputData(file, shopName, null); }); GetMainCat(); } public async Task InputData(string file, string shopName, string[] fc) { bool message = false; string[] f; if (fc != null) f = fc; else f = FileBase.ReadAllLines(file, GetFileEncoding(file)); if (f == null || f.Length == 0) return; for (int i = 0; i < f.Length; i++) { if (i > 10000) { } if (string.IsNullOrEmpty(f[i])) continue; string l = f[i]; if (!(l.Contains("detail.tmall") || l.Contains("taobao.com") || l.Contains("1688.com") || l.Contains("weidian.com") || l.Contains("jd.com"))) { try { l = Md5Base.EncryptDecode(l); } catch { continue; } } if ((f[i].Contains("淘宝") || f[i].Contains("阿里巴巴")) && f[i].Split(',').Length <= 7) l = f[i]; if (string.IsNullOrEmpty(l)) continue; //l = l.Replace("\t", "-----").Replace("----------", "-----").Replace("----------", "-----").Replace(",", "").Replace("\"", ""); string lb = l; string sp = "-----"; string url = l, title = "", shop = "", catid = "", from = "", fid = ""; string viname = "", viId = "", viPrice = "", viMPrice = ""; if (l.Contains("\",\"")) { var mm = BaseRegex.GetMatchRegex(l, @"(.*?),""([\d]+)"",""([^""]+?)"",""([\d]+)"",""([\d]+)"",""([\d]+)"",""([\d]+)"",""([\d]+)"",""([-.\d]+%\+[-.\d]+)"",""([^""]+?)"""); if (mm != null && mm.Count > 0) { from = mm[0].Groups[1].Value.Replace("\"", "").Replace("\"", ""); fid = mm[0].Groups[2].Value; title = mm[0].Groups[3].Value; catid = mm[0].Groups[6].Value; viname = mm[0].Groups[7].Value; viId = mm[0].Groups[8].Value; viPrice = mm[0].Groups[9].Value; viMPrice = mm[0].Groups[10].Value; goto End; } var m = BaseRegex.GetMatchRegex(l, @"""([^""]+?)"",""([\d]+?)"",""([^""]+?)"",""([\d]+?)"",""([\d]+?)"",""([\d]+?)"",""([^""]+?)"",""([\d]+?)"",""([^""]+?)"""); if (m.Count == 0) m = BaseRegex.GetMatchRegex(l, @"""([^""]+?)"",""([\d]+?)"",""([^""]+?)"",""([\d]+?)"",""([\d]+?)"",""([\d]+?)"""); //var m = BaseRegex.GetMatchRegex(f[i], @"""([^""]+?)"",""([\d]+?)"",""([^""]+?)"",""([\d]+?)"",""([\d]+?)"",""([\d]+?)"""); if (m != null && m.Count > 0) { from = m[0].Groups[1].Value; fid = m[0].Groups[2].Value; title = m[0].Groups[3].Value; catid = m[0].Groups[6].Value; viname = m[0].Groups[7].Value; viId = m[0].Groups[8].Value; viPrice = m[0].Groups[9].Value; //if (from== "搜款网") //这里不要还原 //{ // //from = "拼多多"; // int p1 = 0; // int p2 = fid.Length - 1; // string ret = ""; // ret = fid.Substring(0, p1) + fid[p2]; // ret += fid.Substring(p1 + 1, p2 - p1 - 1) + fid[p1]; // ret += fid.Substring(p2 + 1, fid.Length - p2 - 1); // fid = ret; //} goto End; } } if (l.Contains(sp)) { url = l.Substring(0, l.IndexOf(sp)); l = l.Substring(l.IndexOf(sp) + sp.Length); title = l; } if (title.Contains(sp)) { title = l.Substring(0, l.IndexOf(sp)); l = l.Substring(l.IndexOf(sp) + sp.Length); shop = l; } if (shop.Contains(sp)) { shop = l.Substring(0, l.IndexOf(sp)); l = l.Substring(l.IndexOf(sp) + sp.Length); catid = BaseRegex.GetMatchRegexString(l, @"([\d]+)"); } if (string.IsNullOrEmpty(shop)) shop = shopName; shop = ""; fid = BaseRegex.GetMatchRegexString(url, @"/([\d]+)\.html"); if (string.IsNullOrEmpty(fid)) fid = BaseRegex.GetMatchRegexString(url, @"goods_id=([\d]+)"); if (string.IsNullOrEmpty(fid)) fid = BaseRegex.GetMatchRegexString(url, @"id=([\d]+)"); if (url.Contains("yangkeduo.com")) { from = "拼多多"; continue; } if (url.Contains(".taobao.com") || url.Contains(".tmall.com")) from = "淘宝"; if (url.Contains(".1688.com")) from = "阿里巴巴"; if (url.Contains("weidian.com")) from = "微店"; if (url.Contains("jd.com")) from = "京喜"; if (!lb.Contains("-----") && lb.Contains(@""",""")) { var m = BaseRegex.GetMatchRegex(ref lb, @"""(.*?)"",""([\d]+)"",""(.*?)"""); if (m == null || m.Count <= 0) continue; if (m.Count > 0) { from = m[0].Groups[1].Value; fid = m[0].Groups[2].Value; title = m[0].Groups[3].Value; catid = ""; } } End: //if (!string.IsNullOrEmpty(viname) && viname != "6") 临时开放转换淘宝 if (!string.IsNullOrEmpty(viname) && viname != "6" && viname != "1") continue; if (string.IsNullOrEmpty(fid) || string.IsNullOrEmpty(from)) continue; if (!string.IsNullOrEmpty(viPrice) && string.IsNullOrEmpty(viMPrice)) { if (!message) { MessageBox.Show("老格式数据已经不支持\r\n请升级采集程序,重新转化数据后导入新格式,重新转化速度会很快", "提示:老格式已经不支持"); message = true; } continue; } if (BaseClass.UpIds.Count > 0) { bool ishas = false; for (int j = 0; j < BaseClass.UpIds.Count; j++) { string rid = BaseRegex.GetMatchRegexString(BaseClass.UpIds[j], @"([\d]+)"); if (string.IsNullOrEmpty(rid)) continue; if (fid == rid) { ishas = true; break; } } if (ishas) continue; } TaobaoProductBase t = new TaobaoProductBase(); long idx; if (!long.TryParse(fid, out idx)) continue; t.TolerantFormId = fid; t.FromId = idx; if (ProductStock.FindAll(p => p != null && p.FromId == t.FromId).Count + CatTemp.FindAll(p => p != null && p.FromId == t.FromId).Count >= 500) continue; t.ViGoodsName = viname; long.TryParse(viId, out t.ViGoodsId); t.ViPrice = viPrice; t.FromType = from; if (!string.IsNullOrEmpty(viMPrice)) { t.ViPriceMaxMin = viMPrice; string[] strPrice = viMPrice.Split(':'); if (strPrice.Length == 3) { t.ViPriceMin = (int)(decimal.Parse(strPrice[0]) * 100); t.ViPriceMax = (int)(decimal.Parse(strPrice[1]) * 100); t.ViExpressPrice = (int)(decimal.Parse(strPrice[2])); } } if (!string.IsNullOrEmpty(catid)) { if (catid.Length > 8) continue; int cid = int.Parse(catid); cid = PinduoduoCatList.GetNewCat3(cid); if (PinduoduoCatList.CatIds.ContainsKey(cid)) { var ci = PinduoduoCatList.CatIds[cid]; t.CatId = ci.id; t.Cat1 = ci.cat1; t.Cat2 = ci.cat2; t.Cat3 = ci.cat3; t.Cat4 = ci.cat4; FromTitleToCat ff = new FromTitleToCat(); int mainCatId = ff.GetMainCatId(t.Cat1); t.MainCatName = ff.MainCatName; t.MainCatId = ci.main_cat_id; if (ci.main_cat_id != mainCatId && mainCatId != 0) t.MainCatId = mainCatId; } else if (PinduoduoCatList.CatBaks.ContainsKey(cid)) { var ci = PinduoduoCatList.CatBaks[cid]; t.CatId = ci.id; t.Cat1 = ci.cat1; t.Cat2 = ci.cat2; t.Cat3 = ci.cat3; t.Cat4 = ci.cat4; FromTitleToCat ff = new FromTitleToCat(); int mainCatId = ff.GetMainCatId(t.Cat1); t.MainCatName = ff.MainCatName; t.MainCatId = ci.main_cat_id; if (ci.main_cat_id != mainCatId && mainCatId != 0) t.MainCatId = mainCatId; } else { if (t.FromType == "搜款网") t.CatId = cid; } } t.Titlte = title.Replace("\",\"", ""); var sh = GetShopLoginInfo.Shops.Find(s => s.ShopName == shop); if (sh != null) { if (t.MainCatId > 0) { if (t.MainCatId == sh.MainCatId) t.ShopName = sh.ShopName; } else t.ShopName = sh.ShopName; } //if (t.MainCatId > 0) //{ if (!ProductStock.Exists(p => p != null && p.FromId == t.FromId && p.Titlte == t.Titlte)) { ProductStock.Add(t); //if (t.MainCatId > 0) DataBaseTemp.Add(t); batchDataBaseTemp.Add(t); if (batchDataBaseTemp.Count == 500) { AddListToDataBaseSingle(batchDataBaseTemp); batchDataBaseTemp.Clear(); } if (string.IsNullOrEmpty(t.ShopName)) continue; var s = GetShopLoginInfo.Shops.Find(ss => ss.ShopName == t.ShopName); if (s != null) { s.ProductCount++; ShopReplaceTemp.Add(s); ShopTemp.Add(s); } } continue; //} //if (ProductStock.Exists(p => p != null && p.FromId == t.FromId && p.Titlte == t.Titlte) || CatTemp.Exists(p => p != null && p.FromId == t.FromId && p.Titlte == t.Titlte)) // continue; //CatTemp.Add(t); } if (batchDataBaseTemp.Count > 0) { AddListToDataBaseSingle(batchDataBaseTemp); batchDataBaseTemp.Clear(); } string s1s = ""; foreach (var v1 in ProductStock) { s1s += v1.FromId + "\r\n"; } //new Thread(AddListToDataBase).Start(); //new Thread(GetCat).Start(); //if (CatTemp.Count > 0) //{ // MessageBox.Show("正在努力识别分类,请稍等", "提示"); //} } public static List batchString = new List(); public void AddListToDataBaseSingle(List temp) { for (int i = 0; i < temp.Count; i++) { AddbatchToDataBase(temp[i]); } SqliteHelper.BatchExecuteNonQuery(batchString); batchString.Clear(); } public void AddListToDataBase() { for (int i = 0; i < DataBaseTemp.Count; i++) { AddbatchToDataBase(DataBaseTemp[i]); if ((i + 1) % 500 == 0) { SqliteHelper.BatchExecuteNonQuery(batchString); batchString.Clear(); } } if (batchString.Count > 0) { SqliteHelper.BatchExecuteNonQuery(batchString); batchString.Clear(); } } public static void AddbatchToDataBase(TaobaoProductBase p) { string content = p.FromId + "," + p.FromType + "," + p.Titlte + "," + p.Cat1 + "," + p.Cat2 + "," + p.Cat3 + "," + p.Cat4 + "," + p.CatId + "," + p.MainCatId + "," + p.MainCatName + "," + p.MainImage + "," + p.Price + "," + p.SaleCount + "," + p.ShopName + "," + p.AddPrice; if (!string.IsNullOrEmpty(p.ViGoodsName)) content += "," + p.ViGoodsId + "," + p.ViGoodsName + "," + p.ViPrice + "," + p.ViPriceMaxMin; string sql = "insert into Product(content,fromid) values('" + SqliteHelper.ReplaceSqlx(content) + "','" + p.guid + "')"; batchString.Add(sql); } public static System.Text.Encoding GetFileEncoding(string filename) { using (var fs = new System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read)) using (var br = new System.IO.BinaryReader(fs)) { var buffer = br.ReadBytes(2); if (buffer[0] >= 0xEF) { if (buffer[0] == 0xEF && buffer[1] == 0xBB) { return System.Text.Encoding.UTF8; } if (buffer[0] == 0xFE && buffer[1] == 0xFF) { return System.Text.Encoding.BigEndianUnicode; } if (buffer[0] == 0xFF && buffer[1] == 0xFE) { return System.Text.Encoding.Unicode; } } return GetEncodingWithBomUtf8(fs, System.Text.Encoding.Default); } } private static System.Text.Encoding GetEncodingWithBomUtf8(Stream fs, Encoding defaultEncoding) { byte[] unicode = new byte[] { 0xFF, 0xFE, 0x41 }; byte[] unicodeBig = new byte[] { 0xFE, 0xFF, 0x00 }; //带BOM byte[] utf8 = new byte[] { 0xEF, 0xBB, 0xBF }; var reVal = defaultEncoding; using (var r = new System.IO.BinaryReader(fs)) { byte[] ss = r.ReadBytes(4); if (ss[0] == 0xFE && ss[1] == 0xFF && ss[2] == 0x00) { reVal = Encoding.BigEndianUnicode; } else if (ss[0] == 0xFF && ss[1] == 0xFE && ss[2] == 0x41) { reVal = Encoding.Unicode; } else { if (ss[0] == 0xEF && ss[1] == 0xBB && ss[2] == 0xBF) { reVal = Encoding.UTF8; } else { int i; int.TryParse(fs.Length.ToString(), out i); ss = r.ReadBytes(i); if (IsUtf8Bytes(ss)) { reVal = Encoding.UTF8; } } } return reVal; } } /// /// 判断是否是不带 BOM 的 UTF8 格式 /// /// /// private static bool IsUtf8Bytes(byte[] data) { int charByteCounter = 1;  //计算当前正分析的字符应还有的字节数 for (int i = 0; i < data.Length; i++) { var curByte = data[i]; //当前分析的字节. if (charByteCounter == 1) { if (curByte >= 0x80) { //判断当前 while (((curByte <<= 1) & 0x80) != 0) { charByteCounter++; } //标记位首位若为非0 则至少以2个1开始 如:110XXXXX...........1111110X  if (charByteCounter == 1 || charByteCounter > 6) { return false; } } } else { //若是UTF-8 此时第一位必须为1 if ((curByte & 0xC0) != 0x80) { return false; } charByteCounter--; } } if (charByteCounter > 1) { throw new Exception("非预期的byte格式!"); } return true; } public void GetCat() { int CatThreadCount = 20; if (FromTitleToCat.UserApi) CatThreadCount = 2; List ts = new List(); for (int i = 0; i < CatTemp.Count; i++) { try { if (CatTemp[i] == null) continue; if (CatTemp[i].FromType == "拼多多") { PinduoduoProductCollect pp = new PinduoduoProductCollect(Name, CatTemp[i], false); if (!string.IsNullOrEmpty(CatTemp[i].Titlte)) { KeyValuesBase k; FromTitleToCat ftt = new FromTitleToCat(); if (FromTitleToCat.TempCat.ContainsKey(CatTemp[i].FromId)) { k = FromTitleToCat.TempCat[CatTemp[i].FromId]; ftt.Cat1 = k.Value1; ftt.Cat2 = k.Value2; ftt.Cat3 = k.Value3; ftt.Cat4 = k.Value4; if (ftt.Cat3 != "0" || ftt.Cat4 != "0") { ftt.MainCatId = k.Key; ftt.GetMainCatId(int.Parse(ftt.Cat1)); } } else { k = ftt.GetServerTempCat(CatTemp[i].FromId, 2); } if (k != null) { pp.pb.cat1 = int.Parse(ftt.Cat1); pp.pb.cat2 = int.Parse(ftt.Cat2); pp.pb.cat3 = int.Parse(ftt.Cat3); pp.pb.cat4 = int.Parse(ftt.Cat4); pp.pb.cat_id = pp.pb.cat4 > 0 ? pp.pb.cat4 : pp.pb.cat3; pp.pb.main_cid = int.Parse(ftt.MainCatId); ftt.GetMainCatId(pp.pb.cat1); pp.pb.main_cat_name = ftt.MainCatName; } else { pp.Get(); } } else { Thread.Sleep(500); pp.Get(); if (!TaobaoMobileCollect.ProductTemp.ContainsKey(CatTemp[i].FromId)) { if (!pp.OnSale) CatTemp[i].Message = pp.message;// "商品或已下架"; else CatTemp[i].Message = pp.message;// "IP或买手号被限制,请更换IP或检查买手号是否能正常浏览商品"; LogSave.Add(Name, CatTemp[i].FromId + ":" + CatTemp[i].Message); continue; } } if (pp.pb.cat1 == 0) { Thread.Sleep(5000); LogSave.Add(Name, "拼多多ID已下架:" + CatTemp[i].FromId); continue; } CatTemp[i].Cat1 = pp.pb.cat1; CatTemp[i].Cat2 = pp.pb.cat2; CatTemp[i].Cat3 = pp.pb.cat3; CatTemp[i].Cat4 = pp.pb.cat4; CatTemp[i].CatId = pp.pb.cat_id; if (pp.pb.price > 0) CatTemp[i].Price = pp.pb.price; CatTemp[i].SaleCount = pp.pb.saleCount; CatTemp[i].MainCatId = pp.pb.main_cid; CatTemp[i].MainCatName = pp.pb.main_cat_name; CatTemp[i].country = pp.pb.country; if (string.IsNullOrEmpty(CatTemp[i].Titlte)) { CatTemp[i].Titlte = pp.pb.name; } var s = GetShopLoginInfo.Shops.Find(ss => ss.ShopName == CatTemp[i].ShopName); if (s != null) { if (CatTemp[i].MainCatId == s.MainCatId) { s.ProductCount++; ShopReplaceTemp.Add(s); ShopTemp.Add(s); } else { CatTemp[i].ShopName = ""; } } ProductStock.Add(CatTemp[i]); AddToDataBase(CatTemp[i]); continue; } if (string.IsNullOrEmpty(CatTemp[i].Titlte)) { ProductCollectBase pb = new ProductCollectBase(); pb.from_id = CatTemp[i].FromId; pb.from = CatTemp[i].FromType; if (CatTemp[i].FromType == "淘宝") { pb.from_url = "https://item.taobao.com/item.htm?id=" + CatTemp[i].FromId; TaobaoMobileCollect tm = new TaobaoMobileCollect(pb); tm.Pinduoduo = true; tm.NoContent = true; tm.Get(); pb = tm.Product; CatTemp[i].Titlte = pb.name; CatTemp[i].Cat1 = pb.cat1; CatTemp[i].Cat2 = pb.cat2; CatTemp[i].Cat3 = pb.cat3; CatTemp[i].Cat4 = pb.cat4; CatTemp[i].CatId = pb.cat4 > 0 ? pb.cat4 : pb.cat3; CatTemp[i].MainCatId = pb.main_cid; CatTemp[i].MainCatName = pb.main_cat_name; CatTemp[i].country = pb.country; } if (CatTemp[i].FromType == "阿里巴巴") { pb.from_url = "https://detail.1688.com/offer/" + CatTemp[i].FromId + ".html"; AlibabaProductGet ali = new AlibabaProductGet(pb); ali.IsPinduoduo = true; ali.Get(); pb = ali.Product; CatTemp[i].Titlte = pb.name; } Thread.Sleep(100); } if (CatTemp[i].CatId > 0) { ProductStock.Add(CatTemp[i]); AddToDataBase(CatTemp[i]); continue; } if (string.IsNullOrEmpty(CatTemp[i].Titlte)) continue; FromTitleToCat ft = new FromTitleToCat(); ft.TaobaoProduct = CatTemp[i]; ft.Title = CatTemp[i].Titlte; ft.AddToStock = true; Threadx.ThreadListWait(ref ts, new Thread(ft.Get), CatThreadCount); Thread.Sleep(100); } catch { } } } public void GetMainCat(int sleepTime = 1000) { string temp = ""; Dictionary cat = new Dictionary(); for (int i = 0; i < UploadPinduoduoMain.ProductStock.Count; i++) { var p = UploadPinduoduoMain.ProductStock[i]; if (p == null) continue; if (cat.ContainsKey(p.MainCatName)) cat[p.MainCatName]++; else cat.Add(p.MainCatName, 1); } cat = cat.OrderByDescending(d => d.Key).ToDictionary(p => p.Key, o => o.Value); var c = cat.ToList(); for (int i = 0; i < c.Count; i++) { temp += " " + (c[i].Key == "" ? "待分类" : c[i].Key) + ":" + c[i].Value; } AddCatString = temp; Thread.Sleep(sleepTime); } public void GetNewCat() { int CatThreadCount = 20; if (FromTitleToCat.UserApi) CatThreadCount = 2; List ts = new List(); for (int i = 0; i < CatTemp.Count; i++) { try { if (CatTemp[i] == null) continue; if (CatTemp[i].FromType == "拼多多") { PinduoduoProductCollect pp = new PinduoduoProductCollect(Name, CatTemp[i], UploadPinduoduoSet.IsUseProxyCollectUp); if (!string.IsNullOrEmpty(CatTemp[i].Titlte)) { KeyValuesBase k; FromTitleToCat ftt = new FromTitleToCat(); if (FromTitleToCat.TempCat.ContainsKey(CatTemp[i].FromId)) { k = FromTitleToCat.TempCat[CatTemp[i].FromId]; ftt.Cat1 = k.Value1; ftt.Cat2 = k.Value2; ftt.Cat3 = k.Value3; ftt.Cat4 = k.Value4; if (ftt.Cat3 != "0" || ftt.Cat4 != "0") { ftt.MainCatId = k.Key; ftt.GetMainCatId(int.Parse(ftt.Cat1)); } } else { k = ftt.GetServerTempCat(CatTemp[i].FromId, 2); } if (k != null) { pp.pb.cat1 = int.Parse(ftt.Cat1); pp.pb.cat2 = int.Parse(ftt.Cat2); pp.pb.cat3 = int.Parse(ftt.Cat3); pp.pb.cat4 = int.Parse(ftt.Cat4); pp.pb.cat_id = pp.pb.cat4 > 0 ? pp.pb.cat4 : pp.pb.cat3; pp.pb.main_cid = int.Parse(ftt.MainCatId); ftt.GetMainCatId(pp.pb.cat1); pp.pb.main_cat_name = ftt.MainCatName; } else { pp.Get(); } } else { Thread.Sleep(500); pp.Get(); if (!TaobaoMobileCollect.ProductTemp.ContainsKey(CatTemp[i].FromId)) { if (!pp.OnSale) CatTemp[i].Message = pp.message;// "商品或已下架"; else CatTemp[i].Message = pp.message;// "IP或买手号被限制,请更换IP或检查买手号是否能正常浏览商品"; LogSave.Add(Name, CatTemp[i].FromId + ":" + CatTemp[i].Message); continue; } } if (pp.pb.cat1 == 0) { Thread.Sleep(5000); LogSave.Add(Name, "拼多多ID已下架:" + CatTemp[i].FromId); continue; } CatTemp[i].Cat1 = pp.pb.cat1; CatTemp[i].Cat2 = pp.pb.cat2; CatTemp[i].Cat3 = pp.pb.cat3; CatTemp[i].Cat4 = pp.pb.cat4; CatTemp[i].CatId = pp.pb.cat_id; if (pp.pb.price > 0) CatTemp[i].Price = pp.pb.price; CatTemp[i].SaleCount = pp.pb.saleCount; CatTemp[i].MainCatId = pp.pb.main_cid; CatTemp[i].MainCatName = pp.pb.main_cat_name; CatTemp[i].country = pp.pb.country; if (string.IsNullOrEmpty(CatTemp[i].Titlte)) { CatTemp[i].Titlte = pp.pb.name; } var s = GetShopLoginInfo.Shops.Find(ss => ss.ShopName == CatTemp[i].ShopName); if (s != null) { if (CatTemp[i].MainCatId == s.MainCatId) { s.ProductCount++; ShopReplaceTemp.Add(s); ShopTemp.Add(s); } else { CatTemp[i].ShopName = ""; } } var ps = ProductStock.Find(p => p.FromId == CatTemp[i].FromId && p.Titlte == CatTemp[i].Titlte); ps = CatTemp[i]; continue; } if (string.IsNullOrEmpty(CatTemp[i].Titlte)) { ProductCollectBase pb = new ProductCollectBase(); pb.from_id = CatTemp[i].FromId; pb.from = CatTemp[i].FromType; if (CatTemp[i].FromType == "淘宝") { pb.from_url = "https://item.taobao.com/item.htm?id=" + CatTemp[i].FromId; TaobaoMobileCollect tm = new TaobaoMobileCollect(pb); tm.Pinduoduo = true; tm.NoContent = true; tm.Get(); pb = tm.Product; CatTemp[i].Titlte = pb.name; CatTemp[i].Cat1 = pb.cat1; CatTemp[i].Cat2 = pb.cat2; CatTemp[i].Cat3 = pb.cat3; CatTemp[i].Cat4 = pb.cat4; CatTemp[i].CatId = pb.cat4 > 0 ? pb.cat4 : pb.cat3; CatTemp[i].MainCatId = pb.main_cid; CatTemp[i].MainCatName = pb.main_cat_name; CatTemp[i].country = pb.country; CatTemp[i].logisticsTime = pb.logisticsTime; } if (CatTemp[i].FromType == "阿里巴巴") { pb.from_url = "https://detail.1688.com/offer/" + CatTemp[i].FromId + ".html"; AlibabaProductGet ali = new AlibabaProductGet(pb); ali.IsPinduoduo = true; ali.Get(); pb = ali.Product; CatTemp[i].Titlte = pb.name; } if (CatTemp[i].FromType == "微店") { WeiDianProductCollect wd = new WeiDianProductCollect(CatTemp[i]); wd.Get(); pb = wd.pb; CatTemp[i].Titlte = pb.name; } if (CatTemp[i].FromType == "京喜") { pb.from_url = "https://item.m.jd.com/product/" + CatTemp[i].FromId + ".html"; JingXiCollect jx = new JingXiCollect(pb); jx.Get(); pb = jx.Product; CatTemp[i].Titlte = pb.name; } Thread.Sleep(100); } if (CatTemp[i].CatId > 0) { UpdateToDataBase(CatTemp[i]); var ps = ProductStock.Find(p => p.FromId == CatTemp[i].FromId && p.Titlte == CatTemp[i].Titlte); ps = CatTemp[i]; continue; } if (string.IsNullOrEmpty(CatTemp[i].Titlte)) continue; FromTitleToCat ft = new FromTitleToCat(); ft.TaobaoProduct = CatTemp[i]; ft.Title = CatTemp[i].Titlte; ft.AddToStock = true; Threadx.ThreadListWait(ref ts, new Thread(ft.GetLoad), CatThreadCount); Thread.Sleep(100); } catch { } } } /// /// 添加数据到数据库缓存 /// /// public static void AddToDataBase(TaobaoProductBase p) { string content = p.FromId + "," + p.FromType + "," + p.Titlte + "," + p.Cat1 + "," + p.Cat2 + "," + p.Cat3 + "," + p.Cat4 + "," + p.CatId + "," + p.MainCatId + "," + p.MainCatName + "," + p.MainImage + "," + p.Price + "," + p.SaleCount + "," + p.ShopName + "," + p.AddPrice; if (!string.IsNullOrEmpty(p.ViGoodsName)) content += "," + p.ViGoodsId + "," + p.ViGoodsName + "," + p.ViPrice + "," + p.ViPriceMaxMin; string sql = "insert into Product(content,fromid) values('" + SqliteHelper.ReplaceSqlx(content) + "','" + p.guid + "')"; try { SqliteHelper.ExecuteNonQuery(sql); } catch { } } public static void UpdateToDataBase(TaobaoProductBase p) { string content = p.FromId + "," + p.FromType + "," + p.Titlte + "," + p.Cat1 + "," + p.Cat2 + "," + p.Cat3 + "," + p.Cat4 + "," + p.CatId + "," + p.MainCatId + "," + p.MainCatName + "," + p.MainImage + "," + p.Price + "," + p.SaleCount + "," + p.ShopName + "," + p.AddPrice; if (!string.IsNullOrEmpty(p.ViGoodsName)) content += "," + p.ViGoodsId + "," + p.ViGoodsName + "," + p.ViPrice + "," + p.ViPriceMaxMin; string sql = "update Product set content= '" + SqliteHelper.ReplaceSqlx(content) + "' where fromid='" + p.guid + "'"; try { SqliteHelper.ExecuteNonQuery(sql); } catch { } } /// /// 删除数据 ID为空则删除全部数据 /// /// public static void Delete(string id) { string sql = "DELETE FROM Product WHERE fromid = '" + id + "' "; if (string.IsNullOrEmpty(id)) sql = "DELETE FROM Product "; try { SqliteHelper.ExecuteNonQuery(sql); } catch { } } /// /// 加载缓存 /// public void LoadStock() { SqliteHelper.CreateProductTable(); formIdlist.Clear(); new Thread(LoadPbbStock).Start(); DataTable dt = SqliteHelper.ExecuteTable("select fromid,content from Product"); for (int i = 0; dt != null && i < dt.Rows.Count; i++) { string s = dt.Rows[i]["content"].ToString(); formIdlist.Add(dt.Rows[i]["fromid"].ToString()); if (string.IsNullOrEmpty(s) || !s.Contains(",")) continue; string[] ll = s.Split(','); if (ll.Length != 13 && ll.Length != 15 && ll.Length != 19) continue; try { TaobaoProductBase t = new TaobaoProductBase(); if (string.IsNullOrEmpty(ll[0])) continue; t.FromId = long.Parse(ll[0]); t.FromType = ll[1]; t.Titlte = ll[2].Replace("\",\"", ""); t.Cat1 = int.Parse(ll[3]); t.Cat2 = int.Parse(ll[4]); t.Cat3 = int.Parse(ll[5]); t.Cat4 = int.Parse(ll[6]); t.CatId = int.Parse(ll[7]); t.MainCatId = int.Parse(ll[8]); t.MainCatName = ll[9]; if (t.MainCatId == 0) { FromTitleToCat f = new FromTitleToCat(); t.MainCatId = f.GetMainCatId(t.Cat1); t.MainCatName = f.MainCatName; } t.MainImage = int.Parse(ll[10]); t.Price = decimal.Parse(ll[11]); t.SaleCount = int.Parse(ll[12]); t.guid = dt.Rows[i]["fromid"].ToString(); if (ll.Length == 15 || ll.Length == 19) { t.ShopName = ll[13]; t.AddPrice = int.Parse(ll[14]); } if (ll.Length > 15) { long.TryParse(ll[15], out t.ViGoodsId); t.ViGoodsName = ll[16]; t.ViPrice = ll[17]; t.ViPriceMaxMin = ll[18]; string[] strPrice = t.ViPriceMaxMin.Split(':'); if (strPrice.Length == 3) { t.ViPriceMin = (int)(decimal.Parse(strPrice[0]) * 100); t.ViPriceMax = (int)(decimal.Parse(strPrice[1]) * 100); t.ViExpressPrice = (int)(decimal.Parse(strPrice[2])); } } //if (t.ViGoodsName != "6") // 临时开放转换淘宝 //if (t.ViGoodsName != "6" && !((t.FromType == "淘宝" || t.FromType == "阿里巴巴") && string.IsNullOrEmpty(t.ViGoodsName))) if (t.ViGoodsName != "6" && t.ViGoodsName != "1" && !((t.FromType == "淘宝" || t.FromType == "阿里巴巴" || t.FromType == "微店" || t.FromType == "京喜") && string.IsNullOrEmpty(t.ViGoodsName))) continue; ProductStock.Add(t); //ProductTempStock.Add(t); } catch { } } GetMainCat(); } public void LoadPbbStock() { string tempFile = "temp/PinBaoBao.pbb"; string[] l = FileBase.ReadAllLines(tempFile, Encoding.Default); if (l == null || l.Length == 0) return; foreach (string s in l) { if (string.IsNullOrEmpty(s) || !s.Contains(",")) continue; string[] ll = s.Split(','); if (ll.Length != 13 && ll.Length != 15) continue; try { TaobaoProductBase t = new TaobaoProductBase(); if (string.IsNullOrEmpty(ll[0])) continue; t.FromId = long.Parse(ll[0]); t.FromType = ll[1]; t.Titlte = ll[2].Replace("\",\"", ""); t.Cat1 = int.Parse(ll[3]); t.Cat2 = int.Parse(ll[4]); t.Cat3 = int.Parse(ll[5]); t.Cat4 = int.Parse(ll[6]); t.CatId = int.Parse(ll[7]); t.MainCatId = int.Parse(ll[8]); t.MainCatName = ll[9]; t.MainImage = int.Parse(ll[10]); t.Price = decimal.Parse(ll[11]); t.SaleCount = int.Parse(ll[12]); if (ll.Length == 15) t.ShopName = ll[13]; if (ll.Length == 15) t.AddPrice = int.Parse(ll[14]); ProductStock.Add(t); AddToDataBase(t); //ProductTempStock.Add(t); } catch { } } try { FileBase.Delete(tempFile); } catch { } } /// /// 下架无流量 /// public void GetOffSalesNoPV() { bool setOnLine = SetOnline; List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.isOnline = !setOnLine; p.NoSold = NoSold; p.NoVisit = NoVisit; p.NoNeerReplace = NoNeerReplace; p.NoNeerDays = NoNeerDays; p.VisitCount = VisitCount; p.OffOroduct = OffProduct; p.OffProductCount = OffProductCount; Threadx.ThreadListWait(ref ts, new Thread(p.GetOffSalesNoPV), ShopThreadCount); } Threadx.ThreadListWait(ref ts); } /// /// 删除商品 /// public void GetDelProduct() { bool setOnLine = SetOnline; List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.isOnline = !setOnLine; p.OffOroduct = OffProduct; p.OffProductCount = OffProductCount; Threadx.ThreadListWait(ref ts, new Thread(p.GetDelProduct), ShopThreadCount); } Threadx.ThreadListWait(ref ts); } public void GetAllOnline() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; p.isOnline = true; Threadx.ThreadListWait(ref ts, new Thread(p.GetAllOnline), ShopThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public void GetDelKeyWordOnline() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; p.isOnline = true; p.delTitle = delTitle; Threadx.ThreadListWait(ref ts, new Thread(p.GetDelTitleProduct), CustomThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public void GetDelGoodOnline() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; p.isOnline = true; p.delTitle = delTitle; Threadx.ThreadListWait(ref ts, new Thread(p.GetDelKeyWordOnline), CustomThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public void GetDelKeyWordGoodOnline() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectClearDown || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; p.isOnline = true; p.delTitle = delTitle; Threadx.ThreadListWait(ref ts, new Thread(p.GetDelKeyWordOnline), CustomThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public void DelKeyGoodOnline() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); Threadx.ThreadListWait(ref ts, new Thread(p.GetDelKeyGood), CustomThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public void GetDelArrangeOnline() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; p.isOnline = true; //p.delTitle = delTitle; Threadx.ThreadListWait(ref ts, new Thread(p.GetDelArrangeProduct), ShopThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public void GetAllOnlineIds(bool statusFlag) { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; p.isOnline = statusFlag; Threadx.ThreadListWait(ref ts, new Thread(p.GetAllOnlineIds), ShopThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public void GetAllLoopOnlineIds(bool statusFlag) { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; p.isOnline = statusFlag; Threadx.ThreadListWait(ref ts, new Thread(p.GetAllOnlineIds), ShopThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public void GetAutoVisit() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; var p = new GetVisitProductNew(Name, shop); p.ReplaceModel = true; Threadx.ThreadListWait(ref ts, new Thread(p.GetOnOrOff), ShopThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public void GetGroupVisit() { List ts = new List(); var p = new GetVisitProductNew(Name, Shop); p.ReplaceModel = true; Threadx.ThreadListWait(ref ts, new Thread(p.GetOnOrOff), ShopThreadCount); Thread.Sleep(100); Threadx.ThreadListWait(ref ts); } public void GetGroupVisitIds() { List ts = new List(); var p = new GetVisitProductNew(Name, Shop); p.ReplaceModel = true; p.isOnline = isOnline; Threadx.ThreadListWait(ref ts, new Thread(p.GetOnOrOffIds), ShopThreadCount); Thread.Sleep(100); Threadx.ThreadListWait(ref ts); } public void SetAutoOnGoodsStatus() { GetAllOnlineIds(false); List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; if (GetPun(shop.Cookies) != "无惩罚") continue; var p = new GetProductOnlineClass(Name, shop); OnOrOffStatus onOrOffStatus = new OnOrOffStatus(); onOrOffStatus.shopName = shop.ShopName; onOrOffStatus.onStatus = "上架开始执行"; onOrOffStatusList.Add(onOrOffStatus); Threadx.ThreadListWait(ref ts, new Thread(p.UploadAutoOnMethod), 20); } Threadx.ThreadListWait(ref ts); } public void SetAutoOffGoodsStatus() { GetAllOnlineIds(true); List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; if (GetPun(shop.Cookies) != "无惩罚") continue; var p = new GetProductOnlineClass(Name, shop); OnOrOffStatus onOrOffStatus = new OnOrOffStatus(); onOrOffStatus.shopName = shop.ShopName; onOrOffStatus.offStatus = "下架开始执行"; onOrOffStatusList.Add(onOrOffStatus); Threadx.ThreadListWait(ref ts, new Thread(p.UploadAutoOffMethod), 20); } } public void SetLoopOffGoodsStatus() { RunningLoop = true; //GetAllLoopOnlineIds(true); List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count && RunningLoop; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; if (GetPun(shop.Cookies) != "无惩罚") continue; var p = new GetProductOnlineClass(Name, shop); OnOrOffStatus onOrOffStatus = new OnOrOffStatus(); onOrOffStatus.shopName = shop.ShopName; onOrOffStatus.offStatus = "循环下架开始执行"; onOrOffStatusList.Add(onOrOffStatus); Threadx.ThreadListWait(ref ts, new Thread(p.UploadLoopOffMethod), GetShopLoginInfo.Shops.Count); } } public void SetLoopOnGoodsStatus() { RunningLoop = true; if (RunningLoop) { new Thread(GetProductOnlineClass.UploadLoopOnMethod).Start(); } } public string GetPun(string cookies) { string url = "https://mms.pinduoduo.com/earth/api/mallPunishment"; string refere = "https://mms.pinduoduo.com/Pdd.html"; string data = "{\"size\":\"5\" }"; //第一页匹配结果 string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data, CpsSetAllGoods.getAnti0aon()); //惩罚店铺 int level = BaseRegex.GetIntJson(ref html, "punishmentLevel"); string punishment = string.Empty; if (level == 1) { punishment = "一级惩罚"; } else if (level == 2) { punishment = "二级惩罚"; } else if (level == 3) { punishment = "三级惩罚"; } else { punishment = "无惩罚"; } return punishment; } /// /// 群控删除 /// public void GetDelGroupProduct() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; p.isOnline = true; p.minPrice = MinPrice; p.maxPrice = MaxPrice; Threadx.ThreadListWait(ref ts, new Thread(p.GetDelGroupProduct), CustomThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public void GetRestoreProduct() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; p.isOnline = true; Threadx.ThreadListWait(ref ts, new Thread(p.GetRestoreProduct), CustomThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public void GetRestoreGoodProduct() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectClearDown || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; p.isOnline = true; Threadx.ThreadListWait(ref ts, new Thread(p.GetRestoreProduct), CustomThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } public void GetDelGroupOffProduct() { List ts = new List(); for (int i = 0; i < GetShopLoginInfo.Shops.Count; i++) { var shop = GetShopLoginInfo.Shops[i]; if (!shop.SelectReplace || !shop.Showed) continue; var p = new GetProductOnlineClass(Name, shop); p.ReplaceModel = true; p.isOnline = true; p.minPrice = MinPrice; p.maxPrice = MaxPrice; Threadx.ThreadListWait(ref ts, new Thread(p.GetDelGroupOffProduct), CustomThreadCount); Thread.Sleep(100); } Threadx.ThreadListWait(ref ts); } } public class UploadShopControl { public string Name; public ShopChatBase Shop; public ShopChatBase OldShop; public bool SetNewTitle = false; public static long endAdvanceTime = 0; public TaobaoProductBase product; public List productList = new List(); public UploadShopControl(string name, ShopChatBase shop) { Name = name; Shop = shop; } public UploadShopControl(string name, ShopChatBase shop, ShopChatBase oldShop) { Name = name; Shop = shop; OldShop = oldShop; } public UploadShopControl(string name, ShopChatBase shop, bool setNewTitle) { Name = name; Shop = shop; SetNewTitle = setNewTitle; } public void ClearTitle() { if (Shop.ExpressId == 0) { Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); if (Shop.ExpressId == 0) { Thread.Sleep(10000); Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); } Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); if (Shop.ExpressId == 0) { LogSave.Add(Name, "运费模板未找到"); Shop.Message = "请设置运费模板"; UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); return; } } for (int i = 0; i < Shop.OnlineProduct.Count; i++) { if (!SetNewTitle && (string.IsNullOrEmpty(Shop.OnlineProduct[i].Titlte) || !Shop.OnlineProduct[i].Titlte.Contains("✅"))) continue; new BuildNewTitle(Shop, Shop.OnlineProduct[i].GoodsId, "", Name, SetNewTitle).Set(); Thread.Sleep(200); } LogSave.Add(Name, "店铺执行完成:" + Shop.ShopName); } public void SetAdvanceSale() { if (Shop.ExpressId == 0) { Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); if (Shop.ExpressId == 0) { Thread.Sleep(10000); Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); } Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); if (Shop.ExpressId == 0) { LogSave.Add(Name, "运费模板未找到"); Shop.Message = "请设置运费模板"; UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); return; } } for (int i = 0; i < Shop.OnlineProduct.Count; i++) { BuildNewTitle.endAdvanceTime = endAdvanceTime; if (Shop.OnlineProduct[i] == null || string.IsNullOrEmpty(Shop.OnlineProduct[i].Titlte) || Shop.OnlineProduct[i].Titlte.Contains("预售")) continue; new BuildNewTitle(Shop, Shop.OnlineProduct[i].GoodsId, "", Name, SetNewTitle).SetAdvanceSale(); Thread.Sleep(200); } LogSave.Add(Name, "店铺执行完成:" + Shop.ShopName); } public void GetReplacePrice() { bool first = true; Shop.CanUpload = true; Shop.UpCount = 0; DateTime begen = DateTime.Now; List ts = new List(); new Thread(new DeleteRejectProduct(Shop).Get).Start(); UpPinduoduoProduct up = new UpPinduoduoProduct(Shop, Name); up.IniProp(Shop.MainCatId, Shop.Cookies); if (Shop.ExpressId == 0) { Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); if (Shop.ExpressId == 0) { Thread.Sleep(10000); Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); } Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); if (Shop.ExpressId == 0) { LogSave.Add(Name, "运费模板未找到"); Shop.Message = "请设置运费模板"; UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); return; } } string[] fl = FileBase.ReadAllLines("temp/upsame/" + Shop.Name + "edit.tjm"); if (fl != null) { foreach (string s in fl) { if (string.IsNullOrEmpty(s) || !s.Contains(",")) continue; string[] li = s.Split(','); long id = 0; if (li.Length != 2 || !long.TryParse(li[0], out id)) continue; DateTime dt = DateTime.Parse(li[1]); if (UpPinduoduoProduct.EditDayTemp.ContainsKey(id)) UpPinduoduoProduct.EditDayTemp[id] = dt; else UpPinduoduoProduct.EditDayTemp.Add(id, dt); if (UploadPinduoduoMain.NoNeerReplace && dt > DateTime.Now.AddDays(-UploadPinduoduoMain.NoNeerDays)) { var p = Shop.OnlineProduct.Find(t => t != null && t.GoodsId == id); if (p == null) continue; Shop.OnlineProduct.Remove(p); } } } if (Shop.OnlineProduct.Count < 200) { LogSave.Add("商品数少于200的店铺不替换:" + Shop.ShopName); Shop.Message = "商品数小于200不替换"; UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); return; } Shop.OnlineProduct.Sort((x, y) => x.GoodsId.CompareTo(y.GoodsId)); int repalceCount = 0, maxCount = Int32.MaxValue; if (UploadPinduoduoMain.LimitReplace) maxCount = UploadPinduoduoMain.ReplaceCount; while (repalceCount < maxCount) { if (UploadPinduoduoMain.NoNeerReplace) { var list = UpPinduoduoProduct.EditDayTemp.ToList(); for (int i = 0; i < list.Count; i++) { if (list[i].Value < DateTime.Now.AddDays(-UploadPinduoduoMain.NoNeerDays)) continue; var pp = Shop.OnlineProduct.Find(tt => tt != null && tt.GoodsId == list[i].Key); if (pp != null) { Shop.OnlineProduct.Remove(pp); LogSave.Add(Name, "商品最近替换过,跳过:" + list[i].Key); Thread.Sleep(100); } } } repalceCount++; TaobaoProductBase t = null; if (UploadPinduoduoMain.DesShop) t = UploadPinduoduoMain.ProductStock.Find( tb => tb != null && !tb.Uped && tb.UseShopName != Shop.ShopName && tb.ShopName != "" && tb.ShopName == Shop.ShopName && (tb.MainCatId == Shop.MainCatId || "5,4,11,3,6,12,10".Contains(Shop.MainCatId.ToString()) && "5,4,11,3,6,12,10".Contains(tb.MainCatId.ToString()))); else t = UploadPinduoduoMain.ProductStock.Find( tb => tb != null && !tb.Uped && tb.UseShopName != Shop.ShopName && (tb.MainCatId == Shop.MainCatId || "5,4,11,3,6,12,10".Contains(Shop.MainCatId.ToString()) && "5,4,11,3,6,12,10".Contains(tb.MainCatId.ToString()))); if (t == null) { LogSave.Add("无匹配数据,结束替换:" + Shop.ShopName); Shop.Message = "无匹配数据,请增加备用数据"; UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); return; } UploadPinduoduoMain.ProductStock.Remove(t); if (Shop.UpFromIds.ContainsKey(t.FromId) && Shop.UpFromIds[t.FromId] > 3) { t.FindTimes++; if (t.FindTimes < 20) { UploadPinduoduoMain.ProductStock.Add(t); } else { UploadPinduoduoMain.Delete(t.guid); } LogSave.Add(Name, Shop.Name + " 遇到裂变数据,跳过 " + t.FromId + " 等待数据中..."); Thread.Sleep(1000); continue; } if (!Shop.UpFromIds.ContainsKey(t.FromId)) Shop.UpFromIds.Add(t.FromId, 1); else Shop.UpFromIds[t.FromId]++; t.Uped = true; t.UserTimes++; t.UseShopName = Shop.ShopName; UploadPinduoduoMain.Delete(t.guid); //========================采集商品=========================== ProductCollectBase pb = new ProductCollectBase(); if (TaobaoMobileCollect.ProductTemp.ContainsKey(t.FromId)) { pb = TaobaoMobileCollect.ProductTemp[t.FromId].Clone(); } else { if (t.FromType == "拼多多") { PinduoduoProductCollect pp = new PinduoduoProductCollect(Name, t); pp.Get(); if (!TaobaoMobileCollect.ProductTemp.ContainsKey(t.FromId)) { LogSave.Add("未找到商品数据:" + t.FromId); continue; } } else if (t.FromType == "阿里巴巴") { pb.from_url = "https://detail.1688.com/offer/" + t.FromId + ".html"; AlibabaProductGet ali = new AlibabaProductGet(pb); ali.IsPinduoduo = true; ali.Get(); if (!ali.OnSale) { LogSave.Add(Name, "未找到商品数据:" + t.FromId); continue; } } else { pb.from_url = "https://item.taobao.com/item.htm?id=" + t.FromId; pb.from_id = t.FromId; TaobaoMobileCollect tm = new TaobaoMobileCollect(pb); tm.Pinduoduo = true; tm.Name = Name; tm.Get(); if (!tm.GetSuccess) { LogSave.Add(Name, "未找到商品数据:" + t.FromId); continue; } } if (TaobaoMobileCollect.ProductTemp.ContainsKey(t.FromId)) pb = TaobaoMobileCollect.ProductTemp[t.FromId].Clone(); else { LogSave.Add(Name, "未找到商品数据:" + t.FromId); continue; } } //======================采集商品信息结束======================= decimal price = pb.price; for (int i = 0; i < pb.SkuMaps.Count; i++) { if (price < pb.SkuMaps[i].price) price = pb.SkuMaps[i].price; } decimal newPrice = new UploadPinduoduoSet(Shop, null, null).WhitePriceBuild(price, UploadPinduoduoMain.MultiPrice, pb.express_price) / 100m; var p = Shop.OnlineProduct.Find(pd => pd != null && pd.Price > newPrice * 0.4m && pd.Price < newPrice * 2.5m); if (p == null) { if (t.UserTimes < 2) { UploadPinduoduoMain.ProductStock.Add(t); UploadPinduoduoMain.AddToDataBase(t); LogSave.Add("未匹配到数据,再次进入队列:" + t.FromId); continue; } UploadPinduoduoMain.ProductStock.Add(t); UploadPinduoduoMain.AddToDataBase(t); LogSave.Add("未匹配到数据,丢弃:" + t.FromId); continue; } Shop.OnlineProduct.Remove(p); if (UploadPinduoduoMain.NoNeerReplace && UpPinduoduoProduct.EditDayTemp.ContainsKey(p.GoodsId) && DateTime.Now.AddDays(-UpPinduoduoProduct.NoReplaceDay) > UpPinduoduoProduct.EditDayTemp[p.GoodsId]) { Thread.Sleep(100); t.Message = "最近更新不需替换"; UploadPinduoduoMain.ProductReplaceTemp.Add(p); continue; } if (UploadPinduoduoMain.Irregularities && IrregularitiesWordFun(t.Titlte)) { LogSave.Add(Name, Shop.Name + " 遇到品牌数据,跳过 " + t.FromId + " 该产品..."); Thread.Sleep(1000); continue; } LogSave.Add("数据匹配成功,开始替换:" + t.FromId); var u = new UploadPinduoduoSet(Shop, Name, t); u.us = p; Threadx.ThreadListWait(ref ts, new Thread(u.Get), UploadPinduoduoMain.SingleThreadCount); Thread.Sleep(5000 * UploadPinduoduoMain.SingleThreadCount); if (first && UploadPinduoduoMain.SingleThreadCount > 1) { first = false; Thread.Sleep(20 * 1000); } } Threadx.ThreadListWait(ref ts); } public void GetReplaceRes() { if (Shop.ResurVioSalesProduct.Count == 0) { LogSave.Add(Name, "店铺商品都是有销量的,没有可以替换的商品。"); TaobaoProductBase productx = new TaobaoProductBase(); productx.GoodsId = product.GoodsId; productx.Message = "店铺商品都是有销量的,没有可以替换的商品。"; UploadPinduoduoMain.ProductResurVioTemp.Add(productx); return; } int randx = new Random(Guid.NewGuid().GetHashCode()).Next(0, Shop.ResurVioSalesProduct.Count - 1); var p = Shop.ResurVioSalesProduct[randx]; GetResForm(product.GoodsId, p.GoodsId, true); } public void GetAddRes() { //if (Shop.ResurVioSalesProduct.Count == 0) // return; //int randx = new Random(Guid.NewGuid().GetHashCode()).Next(0, OldShop.ResurVioSalesProduct.Count - 1); //var p = OldShop.ResurVioSalesProduct[randx]; GetResForm(product.GoodsId, 0, false); } public void GetResForm(long pid, long oldpid, bool upFlag) { GetProductDetail ge = new GetProductDetail(upFlag == true ? Shop : OldShop, "复活违规"); var r = ge.Get(pid); if (r == null) { if (OldShop.APIMessage == "请先购买API再上传" || Shop.APIMessage == "请先购买API再上传") { LogSave.Add(Name, "店铺没有购买Api服务,获取违规商品详情失败。"); TaobaoProductBase productx = new TaobaoProductBase(); productx.GoodsId = pid; productx.Message = "店铺没有购买Api服务,获取违规商品详情失败。"; UploadPinduoduoMain.ProductResurVioTemp.Add(productx); } return; } string skuApiStringNew = "", skuString = ""; int maxPriceNewx = 0, minPriceNewx = 1000000; for (int i = 0; i < r.sku_list.Count; i++) { string spec = ""; for (int j = 0; j < r.sku_list[i].spec.Count; j++) spec += "," + r.sku_list[i].spec[j].spec_id; if (!string.IsNullOrEmpty(spec)) spec = spec.Substring(1); string specStr = ""; for (int j = 0; j < r.sku_list[i].spec.Count; j++) { specStr += ",{\"parent_name\":\"" + r.sku_list[i].spec[j].parent_name + "\",\"parent_id\":" + r.sku_list[i].spec[j].parent_id + ",\"spec_name\":\"" + r.sku_list[i].spec[j].spec_name + "\",\"spec_id\":" + r.sku_list[i].spec[j].spec_id + "}"; } specStr = "[" + specStr.Substring(1) + "]"; skuString = ",{\"is_onsale\":" + r.sku_list[i].is_onsale + ",\"limit_quantity\":" + r.sku_list[i].limit_quantity + ",\"quantity_delta\":" + r.sku_list[i].limit_quantity + ",\"thumb_url\":\"\"," + "\"multi_price\":" + r.sku_list[i].multi_price + ",\"price\":" + r.sku_list[i].price + ",\"out_sku_sn\":\"" + r.sku_list[i].out_sku_sn + "\",\"id\":0,\"spec\":" + specStr + ",\"weight\":1000}"; skuApiStringNew += ",{\"is_onsale\":" + r.sku_list[i].is_onsale + ",\"limit_quantity\":" + r.sku_list[i].limit_quantity + ",\"quantity_delta\":" + r.sku_list[i].limit_quantity + ",\"price\":\"" + r.sku_list[i].price + "\",\"weight\":1000,\"multi_price\":\"" + r.sku_list[i].multi_price + "\",\"thumb_url\":\"" + r.sku_list[i].thumb_url + "\",\"out_sku_sn\":\"" + r.sku_list[i].out_sku_sn + "\",\"quantity\":1,\"spec_id_list\":\"[" + spec + "]\"}"; if (maxPriceNewx < r.sku_list[i].multi_price) maxPriceNewx = r.sku_list[i].multi_price; if (minPriceNewx > r.sku_list[i].multi_price) minPriceNewx = r.sku_list[i].multi_price; } string addContent = ",\"fabric\":" + r.fabricx + ",\"fabric_content\":" + r.fabric_contentx; PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(Shop); r.cat_id = PinduoduoCatList.GetNewCat3(r.cat_id); if (r.market_price >= maxPriceNewx * 5.0) r.market_price = 2 * maxPriceNewx; if (upFlag) api.Data.Add("goods_id", oldpid.ToString()); api.Data.Add("goods_name", BaseClass.SubCharLength(r.goods_name.Replace("✅", "").Replace("◆", ""), 60)); api.Data.Add("goods_type", "1"); api.Data.Add("goods_desc", r.goods_desc); api.Data.Add("cat_id", r.cat_id.ToString()); api.Data.Add("tiny_name", ""); api.Data.Add("country_id", "0"); api.Data.Add("market_price", r.market_price.ToString()); api.Data.Add("is_pre_sale", "false"); api.Data.Add("shipment_limit_second", "172800"); api.Data.Add("cost_template_id", upFlag == true ? r.cost_template_id.ToString() : Shop.ExpressId.ToString()); api.Data.Add("customer_num", UploadPinduoduoMain.GroupCount.ToString());//团购人数 if (!UploadPinduoduoMain.limitCount) { api.Data.Add("buy_limit", UploadPinduoduoMain.LimitBuy.ToString()); api.Data.Add("order_limit", UploadPinduoduoMain.LimitBuy.ToString()); } api.Data.Add("is_refundable", "true"); api.Data.Add("second_hand", "false"); api.Data.Add("is_folt", "true"); if (!string.IsNullOrEmpty(addContent)) { int fabric = BaseRegex.GetIntJson(ref addContent, "fabric"); int fabric_content = BaseRegex.GetIntJson(ref addContent, "fabric_content"); api.Data.Add("fabric", fabric.ToString()); api.Data.Add("fabric_content", fabric_content.ToString()); } api.Data.Add("sku_list", "[" + skuApiStringNew.Substring(1) + "]"); api.Data.Add("out_goods_id", r.outer_goods_id); api.Data.Add("hd_thumb_url", r.hd_thumb_url); api.Data.Add("thumb_url", r.thumb_url); api.Data.Add("image_url", r.image_url); api.Data["goods_desc"] = r.goods_desc; string goods_properties = ""; for (int i = 0; i < r.goods_property_list.Count; i++) { var p = r.goods_property_list[i]; goods_properties += ",{\"template_pid\":" + p.template_pid + ",\"vid\":" + p.vid + ",\"value\":\"" + p.vvalue + "\",\"value_unit\":\"" + p.punit + "\"}"; } if (!string.IsNullOrEmpty(goods_properties)) api.Data.Add("goods_properties", "[" + goods_properties.Substring(1) + "]"); api.FromWeiDian = true; string imageString = ""; //构造carousel_gallery 轮播图 string carousel_gallery = string.Empty; if (r.carousel_gallery_list != null & r.carousel_gallery_list.Count > 0) { for (int i = 0; i < r.carousel_gallery_list.Count; i++) { carousel_gallery += ",\"" + r.carousel_gallery_list[i] + "\""; imageString += ",{\"url\":\"" + r.carousel_gallery_list[i] + "\",\"width\":640,\"height\":640,\"type\":\"1\"}"; } } if (!string.IsNullOrEmpty(carousel_gallery)) carousel_gallery = carousel_gallery.Substring(1); api.Data.Add("carousel_gallery", "[" + carousel_gallery + "]"); //构造detail_gallery商品详情图片 string detail_gallery = ""; for (int j = 0; j < r.detail_gallery_list.Count; j++) { if (r.detail_gallery_list.Count > 5 && j == 0 || r.detail_gallery_list.Count > 8 && j == r.detail_gallery_list.Count - 1)//不要第一张图和最后一张 { continue; } string urlImg = r.detail_gallery_list[j]; if (!urlImg.StartsWith("http")) urlImg = "http:" + urlImg; string exe = Path.GetExtension(urlImg).ToLower(); if (exe != ".jpeg" && exe != ".jpg" && exe != ".png") continue; detail_gallery += ",\"" + urlImg + "\""; imageString += ",{\"url\":\"" + urlImg + "\",\"width\":640,\"height\":640,\"type\":\"2\"}"; } if (!string.IsNullOrEmpty(detail_gallery)) { detail_gallery = detail_gallery.Substring(1); } api.Data.Add("detail_gallery", "[" + detail_gallery + "]"); api.Data.Add("gallery", imageString.Substring(1)); if (",2,6586,6785,6883,6758,6536,6630,6398,".Contains("," + r.cat_id + ","))//食品 { api.Data.Add("shelf_life", "300"); api.Data.Add("start_production_date", BaseClass.GetTime(DateTime.Now.AddDays(-5)).ToString()); api.Data.Add("end_production_date", BaseClass.GetTime(DateTime.Now).ToString()); } ProductResurBase resur = new ProductResurBase(); resur.FromId = pid; resur.FormShopName = OldShop == null ? Shop.ShopName : OldShop.ShopName; resur.GoodId = oldpid == 0 ? pid : oldpid; resur.ShopName = Shop.ShopName; resur.Title = r.goods_name; TaobaoProductBase product = new TaobaoProductBase(); product.GoodsId = pid; product.Message = "商品开始处理"; string html = ""; PinduoduoApiGetProduct apix = new PinduoduoApiGetProduct(Shop); html = apix.GetRelation(r.goods_id.ToString()); long upid = 0; // 有获取到对应的上家id if (html.Contains("out_goods_id") && html.Contains("out_goods_platform")) upid = BaseRegex.GetLongJson(ref html, "out_goods_id"); else upid = Randomx.GetId(100000, 9999999) * (long)Randomx.GetId(10, 99999); string mustCode = ""; var pb = new ProductCollectBase(); string properties = UploadPinduoduoProperties.GetNew(r.cat_id, 0, ref pb, ref Shop, out mustCode); if (upFlag) { TaobaoProductBase us = new TaobaoProductBase(); us.FromId = oldpid; us.GoodsId = oldpid; UploadPinduoduoDeleteSku upx = new UploadPinduoduoDeleteSku(Name, Shop, us, "", ""); upx.pb = new ProductCollectBase(); upx.pb.name = r.goods_name; upx.pb.cat_id = r.cat_id; upx.Cat1 = 0; upx.MaxPrice = maxPriceNewx; upx.MinPrice = minPriceNewx; upx.NewUpId = upid; upx.skus = "[" + skuString.Substring(1) + "]"; foreach (KeyValuePair key in api.Data) { upx.Data.Add(key.Key, key.Value); } bool success = upx.GetNew(); //if (api.Data.ContainsKey("skus")) // api.Data.Remove("skus"); if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd")) && Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) return; html = api.UpdataNew(); if (html.Contains("调用过于频繁")) { Thread.Sleep(5000); html = api.UpdataNew(); Thread.Sleep(2000); } if (html.Contains("该类目商品不允许设置限购,请设置单次限量为999999")) { api.Data["buy_limit"] = "999999"; api.Data["order_limit"] = "999999"; html = api.UpdataNew(); if (html.Contains("调用过于频繁")) { Thread.Sleep(5000); html = api.UpdataNew(); Thread.Sleep(2000); } } if (!string.IsNullOrEmpty(html) && html.Contains("\"error_msg\"")) { string error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); LogSave.Add("复活违规", "替换商品失败,原因:" + error_msg); resur.Status = "替换商品失败:" + error_msg; } else { string goodsidx = BaseRegex.GetStringJson(ref html, "goods_id"); LogSave.Add("复活违规", "替换商品成功:" + goodsidx); resur.Status = "替换商品成功"; string tempFile = "temp/resursame/" + Shop.ShopName + "edit.tjm"; string temp = pid + "," + DateTime.Now.ToString("yyyy-MM-dd") + "\r\n"; html = api.Relation(oldpid, upid, (int)(minPriceNewx * 0.96m), (int)(maxPriceNewx * 0.96m), 0, 0); FileBase.AppendAllText(tempFile, temp); } } else { if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd")) && Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) return; html = api.AddNew(); if (html.Contains("调用过于频繁")) { Thread.Sleep(5000); html = api.Add(); Thread.Sleep(2000); } if (html.Contains("该类目商品不允许设置限购,请设置单次限量为999999")) { api.Data["buy_limit"] = "999999"; api.Data["order_limit"] = "999999"; html = api.UpdataNew(); if (html.Contains("调用过于频繁")) { Thread.Sleep(5000); html = api.UpdataNew(); Thread.Sleep(2000); } } if (html.Contains("存在多余或重复输入") && !string.IsNullOrEmpty(mustCode)) { api.Data["goods_properties"] = "[" + mustCode.Substring(1) + "]"; html = api.Add(); } if (!string.IsNullOrEmpty(html) && html.Contains("\"error_msg\"")) { string error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); LogSave.Add("复活违规", "新增商品失败,原因:" + error_msg); resur.Status = "新增商品失败:" + error_msg; } else { resur.GoodId = BaseRegex.GetLongJson(ref html, "goods_id"); html = api.Relation(resur.GoodId, upid, (int)(minPriceNewx * 0.96m), (int)(maxPriceNewx * 0.96m), 0, 0); LogSave.Add("复活违规", "新增商品成功:" + resur.GoodId); resur.Status = "新增商品成功"; } } UploadPinduoduoMain.ProductResurTemp.Add(resur); UploadPinduoduoMain.ProductResurVioTemp.Add(product); } public void GetSysRes(long pid) { GetProductDetail ge = new GetProductDetail(Shop, ""); var r = ge.Get(pid); if (r == null) return; string skuApiStringNew = "", skuString = ""; int maxPriceNewx = 0, minPriceNewx = 1000000; for (int i = 0; i < r.sku_list.Count; i++) { string spec = ""; for (int j = 0; j < r.sku_list[i].spec.Count; j++) spec += "," + r.sku_list[i].spec[j].spec_id; if (!string.IsNullOrEmpty(spec)) spec = spec.Substring(1); string specStr = ""; for (int j = 0; j < r.sku_list[i].spec.Count; j++) { specStr += ",{\"parent_name\":\"" + r.sku_list[i].spec[j].parent_name + "\",\"parent_id\":" + r.sku_list[i].spec[j].parent_id + ",\"spec_name\":\"" + r.sku_list[i].spec[j].spec_name + "\",\"spec_id\":" + r.sku_list[i].spec[j].spec_id + "}"; } specStr = "[" + specStr.Substring(1) + "]"; skuString = ",{\"is_onsale\":" + r.sku_list[i].is_onsale + ",\"limit_quantity\":" + r.sku_list[i].limit_quantity + ",\"quantity_delta\":" + r.sku_list[i].limit_quantity + ",\"thumb_url\":\"\"," + "\"multi_price\":" + r.sku_list[i].multi_price + ",\"price\":" + r.sku_list[i].price + ",\"out_sku_sn\":\"" + r.sku_list[i].out_sku_sn + "\",\"id\":0,\"spec\":" + specStr + ",\"weight\":1000}"; skuApiStringNew += ",{\"is_onsale\":" + r.sku_list[i].is_onsale + ",\"limit_quantity\":" + r.sku_list[i].limit_quantity + ",\"quantity_delta\":" + r.sku_list[i].limit_quantity + ",\"price\":\"" + r.sku_list[i].price + "\",\"weight\":1000,\"multi_price\":\"" + r.sku_list[i].multi_price + "\",\"thumb_url\":\"" + r.sku_list[i].thumb_url + "\",\"out_sku_sn\":\"" + r.sku_list[i].out_sku_sn + "\",\"quantity\":1,\"spec_id_list\":\"[" + spec + "]\"}"; if (maxPriceNewx < r.sku_list[i].multi_price) maxPriceNewx = r.sku_list[i].multi_price; if (minPriceNewx > r.sku_list[i].multi_price) minPriceNewx = r.sku_list[i].multi_price; } string addContent = ",\"fabric\":" + r.fabricx + ",\"fabric_content\":" + r.fabric_contentx; PinduoduoApiGetProduct api = new PinduoduoApiGetProduct(Shop); r.cat_id = PinduoduoCatList.GetNewCat3(r.cat_id); if (r.market_price >= maxPriceNewx * 5.0) r.market_price = 2 * maxPriceNewx; api.Data.Add("goods_id", pid.ToString()); api.Data.Add("goods_name", BaseClass.SubCharLength(r.goods_name.Replace("✅", "").Replace("◆", ""), 60)); api.Data.Add("goods_type", "1"); api.Data.Add("goods_desc", r.goods_desc); api.Data.Add("cat_id", r.cat_id.ToString()); api.Data.Add("tiny_name", ""); api.Data.Add("country_id", "0"); api.Data.Add("market_price", r.market_price.ToString()); api.Data.Add("is_pre_sale", "false"); api.Data.Add("shipment_limit_second", "172800"); api.Data.Add("cost_template_id", r.cost_template_id.ToString()); api.Data.Add("customer_num", UploadPinduoduoMain.GroupCount.ToString());//团购人数 if (!UploadPinduoduoMain.limitCount) { api.Data.Add("buy_limit", UploadPinduoduoMain.LimitBuy.ToString()); api.Data.Add("order_limit", UploadPinduoduoMain.LimitBuy.ToString()); } api.Data.Add("is_refundable", "true"); api.Data.Add("second_hand", "false"); api.Data.Add("is_folt", "true"); if (!string.IsNullOrEmpty(addContent)) { int fabric = BaseRegex.GetIntJson(ref addContent, "fabric"); int fabric_content = BaseRegex.GetIntJson(ref addContent, "fabric_content"); api.Data.Add("fabric", fabric.ToString()); api.Data.Add("fabric_content", fabric_content.ToString()); } api.Data.Add("sku_list", "[" + skuApiStringNew.Substring(1) + "]"); api.Data.Add("out_goods_id", r.outer_goods_id); api.Data.Add("hd_thumb_url", r.hd_thumb_url); api.Data.Add("thumb_url", r.thumb_url); api.Data.Add("image_url", r.image_url); api.Data["goods_desc"] = r.goods_desc; string goods_properties = ""; for (int i = 0; i < r.goods_property_list.Count; i++) { var p = r.goods_property_list[i]; goods_properties += ",{\"template_pid\":" + p.template_pid + ",\"vid\":" + p.vid + ",\"value\":\"" + p.vvalue + "\",\"value_unit\":\"" + p.punit + "\"}"; } if (!string.IsNullOrEmpty(goods_properties)) api.Data.Add("goods_properties", "[" + goods_properties.Substring(1) + "]"); string imageString = ""; //构造carousel_gallery 轮播图 string carousel_gallery = string.Empty; if (r.carousel_gallery_list != null & r.carousel_gallery_list.Count > 0) { for (int i = 0; i < r.carousel_gallery_list.Count; i++) { carousel_gallery += ",\"" + r.carousel_gallery_list[i] + "\""; imageString += ",{\"url\":\"" + r.carousel_gallery_list[i] + "\",\"width\":640,\"height\":640,\"type\":\"1\"}"; } } if (!string.IsNullOrEmpty(carousel_gallery)) carousel_gallery = carousel_gallery.Substring(1); api.Data.Add("carousel_gallery", "[" + carousel_gallery + "]"); //构造detail_gallery商品详情图片 string detail_gallery = ""; for (int j = 0; j < r.detail_gallery_list.Count; j++) { if (r.detail_gallery_list.Count > 5 && j == 0 || r.detail_gallery_list.Count > 8 && j == r.detail_gallery_list.Count - 1)//不要第一张图和最后一张 { continue; } string urlImg = r.detail_gallery_list[j]; if (!urlImg.StartsWith("http")) urlImg = "http:" + urlImg; string exe = Path.GetExtension(urlImg).ToLower(); if (exe != ".jpeg" && exe != ".jpg" && exe != ".png") continue; detail_gallery += ",\"" + urlImg + "\""; imageString += ",{\"url\":\"" + urlImg + "\",\"width\":640,\"height\":640,\"type\":\"2\"}"; } if (!string.IsNullOrEmpty(detail_gallery)) { detail_gallery = detail_gallery.Substring(1); } api.Data.Add("detail_gallery", "[" + detail_gallery + "]"); api.Data.Add("gallery", imageString.Substring(1)); if (",2,6586,6785,6883,6758,6536,6630,6398,".Contains("," + r.cat_id + ","))//食品 { api.Data.Add("shelf_life", "300"); api.Data.Add("start_production_date", BaseClass.GetTime(DateTime.Now.AddDays(-5)).ToString()); api.Data.Add("end_production_date", BaseClass.GetTime(DateTime.Now).ToString()); } //string properties = UploadPinduoduoProperties.GetNew(r.cat_id, 0, ref pb, ref Shop, out mustCode); if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd")) && Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) return; string html = api.UpdataNew(); if (html.Contains("调用过于频繁")) { Thread.Sleep(5000); html = api.UpdataNew(); Thread.Sleep(2000); } if (html.Contains("该类目商品不允许设置限购,请设置单次限量为999999")) { api.Data["buy_limit"] = "999999"; api.Data["order_limit"] = "999999"; html = api.UpdataNew(); if (html.Contains("调用过于频繁")) { Thread.Sleep(5000); html = api.UpdataNew(); Thread.Sleep(2000); } } if (!string.IsNullOrEmpty(html) && html.Contains("\"error_msg\"")) { string error_msg = BaseRegex.GetStringJson(ref html, "error_msg"); LogSave.Add("同步库存", "更新商品失败,原因:" + error_msg); //resur.Status = "替换商品失败:" + error_msg; } else { string goodsidx = BaseRegex.GetStringJson(ref html, "goods_id"); LogSave.Add("同步库存", "更新商品成功:" + goodsidx); //resur.Status = "更新商品成功"; string tempFile = "temp/resursame/" + Shop.ShopName + "edit.tjm"; string temp = pid + "," + DateTime.Now.ToString("yyyy-MM-dd") + "\r\n"; api = new PinduoduoApiGetProduct(Shop); long upid = 0; int fromSite = 0; if (upid == 0) upid = Randomx.GetId(100000, 9999999) * (long)Randomx.GetId(10, 99999); if (maxPriceNewx < 100000) { var minUpPrice = r.sku_list.Min(s => s.price); var maxUpPrice = r.sku_list.Max(s => s.price); var express_price = 0; html = api.Relationx(pid, upid, (int)(minUpPrice * 100), (int)(maxUpPrice * 100), (int)(express_price * 100), fromSite); if (!html.Contains("{\"is_success\":true")) html = api.Relationx(pid, upid, (int)(minUpPrice * 100), (int)(maxUpPrice * 100), (int)(express_price * 100), fromSite); if (!html.Contains("{\"is_success\":true")) product.Message = "同步商品关联失败!"; } } //UploadPinduoduoMain.ProductResurTemp.Add(resur); UploadPinduoduoMain.ProductResurVioTemp.Add(product); } //public void GetReplace() //{ // Shop.CanUpload = true; // Shop.UpCount = 0; // DateTime begen = DateTime.Now; // List ts = new List(); // new Thread(new DeleteRejectProduct(Shop).Get).Start(); // UpPinduoduoProduct up = new UpPinduoduoProduct(Shop, Name); // up.IniProp(Shop.MainCatId, Shop.Cookies); // string[] fl = FileBase.ReadAllLines("temp/upsame/" + Shop.Name + "edit.tjm"); // if (fl != null) // { // foreach (string s in fl) // { // if (string.IsNullOrEmpty(s) || !s.Contains(",")) // continue; // string[] li = s.Split(','); // long id; // if (li.Length != 2 || !long.TryParse(li[0], out id)) // continue; // DateTime dt = DateTime.Parse(li[1]); // if (UpPinduoduoProduct.EditDayTemp.ContainsKey(id)) // UpPinduoduoProduct.EditDayTemp[id] = dt; // else // UpPinduoduoProduct.EditDayTemp.Add(id, dt); // } // } // Shop.OnlineProduct.Sort((x,y)=>x.GoodsId.CompareTo(y.GoodsId)); // while(UploadPinduoduoMain.LimitReplace && Shop.OnlineProduct.Count > UploadPinduoduoMain.ReplaceCount) // { // UploadPinduoduoMain.DeleteIds.Add(Shop.OnlineProduct[UploadPinduoduoMain.ReplaceCount].GoodsId); // Shop.OnlineProduct.RemoveAt(UploadPinduoduoMain.ReplaceCount); // } // while (UploadPinduoduoMain.RunningReplace && Shop.CanUpload && Shop.OnlineProduct.Count>0 ) // { // var us = Shop.OnlineProduct[0]; // Shop.OnlineProduct.RemoveAt(0); // if(us==null) // continue; // if(UploadPinduoduoMain.NoNeerReplace && UpPinduoduoProduct.EditDayTemp.ContainsKey(us.GoodsId) && // DateTime.Now.AddDays(-UpPinduoduoProduct.NoReplaceDay) > UpPinduoduoProduct.EditDayTemp[us.GoodsId]) // { // Thread.Sleep(100); // us.Message = "最近更新不需替换"; // UploadPinduoduoMain.ProductReplaceTemp.Add(us); // } // TaobaoProductBase t = // UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && (tb.MainCatId == us.MainCatId || "5,4,11,3,6,12,10".Contains(us.MainCatId.ToString())&& "5,4,11,3,6,12,10".Contains(tb.MainCatId.ToString()))); // if (t == null) // { // if(begen.AddMinutes(3)>DateTime.Now) // Thread.Sleep(100); // us.Message = "无匹配数据"; // LogSave.Add(Name, Shop.Name + " 等待数据中..."); // UploadPinduoduoMain.ProductReplaceTemp.Add(us); // continue; // } // t.Uped = true; // UploadPinduoduoMain.ProductStock.Remove(t); // if (Shop.ExpressId == 0) // { // Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId,Shop); // if (Shop.ExpressId == 0) // { // Thread.Sleep(10000); // Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); // } // if (Shop.ExpressId == 0) // { // LogSave.Add(Name, "运费模板未找到"); // Shop.Message = "请设置运费模板"; // UploadPinduoduoMain.ShopReplaceTemp.Add(Shop); // return; // } // } // var u = new UploadPinduoduoSet(Shop, Name, t); // u.us = us; // Threadx.ThreadListWait(ref ts, new Thread(u.Get), UploadPinduoduoMain.SingleThreadCount); // Thread.Sleep(5000* UploadPinduoduoMain.SingleThreadCount); // } // Threadx.ThreadListWait(ref ts); //} /// /// 在违规店铺中替换 /// public void Get() { int top = FileBase.Exists("maxtop.ini") ? 50 : 30; bool ok = CanUser(Shop); if (BaseClass.UserVersion == 110) { ok = true; } if (!ok) { Shop.Message = "请先续费"; UploadPinduoduoMain.ShopTemp.Add(Shop); return; } if (!UploadPinduoduoMain.ShopTitles.ContainsKey(Shop.ShopName) && UploadPinduoduoMain.NoRepeat) { var p = new GetProductOnlineClass(Name, Shop); p.ReplaceModel = true; p.isOnline = true; p.GetRepeatOnline(); } Shop.CanUpload = true; Shop.UpCount = 0; List ts = new List(); int waitTimes = 0; int maxCount = 0; int loopPrexCount = 0; UpPinduoduoProduct up = new UpPinduoduoProduct(Shop, Name); up.IniProp(Shop.MainCatId, Shop.Cookies); GetAllShopGoodsCount(); bool first = true; while (UploadPinduoduoMain.upRunning && Shop.CanUpload) { TaobaoProductBase t = null; try { if (Shop.Name.Contains("专营店")) { if (UploadPinduoduoMain.DesShop) t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && tb.MainCatId != 0 && tb.ShopName != "" && tb.ShopName == Shop.ShopName && tb.MainCatId == Shop.MainCatId); else t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && tb.MainCatId != 0 && tb.MainCatId == Shop.MainCatId); if (t == null && Shop.MainCatName.Split(',').Length > 1) { string[] catnames = Shop.MainCatName.Split(','); for (int i = 0; i < catnames.Length; i++) { for (int j = 0; j < FromTitleToCat.MainCat.Count; j++) { if (FromTitleToCat.MainCat[j].Value2 == catnames[i].Replace("\"", "")) { int MainCatId = int.Parse(FromTitleToCat.MainCat[j].Key); if (UploadPinduoduoMain.DesShop) t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && tb.MainCatId != 0 && tb.ShopName != "" && tb.ShopName == Shop.ShopName && tb.MainCatId == MainCatId); else t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && tb.MainCatId != 0 && tb.MainCatId == MainCatId); if (t != null) break; } } if (t != null) break; } } } // 医药健康 else if (Shop.MainCatId == 13) { t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && tb.MainCatId != 0 && (tb.MainCatId == Shop.MainCatId && tb.MainCatId == 13)); } else { if (UploadPinduoduoMain.isCatType) t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && tb.MainCatId != 0 && tb.MainCatId == Shop.MainCatId); else if (UploadPinduoduoMain.DesShop) t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && tb.ShopName != "" && tb.ShopName == Shop.ShopName && tb.MainCatId != 0 && (tb.MainCatId == Shop.MainCatId || tb.MainCatId == 7 && Shop.SelectFood || tb.MainCatId == 13 && Shop.SelectMedicinal || !Shop.SelectFood && !Shop.SelectMedicinal && "2,5,4,11,3,6,12,10,14".Contains(tb.MainCatId.ToString()))); //t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && //(tb.MainCatId == Shop.MainCatId || tb.MainCatId == 7 && Shop.SelectFood || tb.MainCatId == 13 && Shop.SelectMedicinal || !Shop.SelectFood && !Shop.SelectMedicinal && "5,4,11,3,6,12,10".Contains(tb.MainCatId.ToString())) && (tb.ShopName == "" || tb.ShopName == Shop.ShopName)); else t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && tb.MainCatId != 0 && (tb.MainCatId == Shop.MainCatId || tb.MainCatId == 7 && Shop.SelectFood || tb.MainCatId == 13 && Shop.SelectMedicinal || !Shop.SelectFood && !Shop.SelectMedicinal && "2,5,4,11,3,6,12,10,14".Contains(tb.MainCatId.ToString()) || ((Shop.MainCatId != 2 || Shop.MainCatId != 7 || Shop.MainCatId != 9 || Shop.MainCatId != 13) && "2,5,4,11,3,6,12,10,14".Contains(tb.MainCatId.ToString())))); } if (t == null) { waitTimes++; if (waitTimes > 100) return; //if (Shop.APIMessage == "请先购买API再上传") //{ // LogSave.Add(Name, Shop.Name + " 请先购买API再上传"); // if (waitTimes == 5) // { // Shop.Message = "请先购买API再上传"; // GetShopLoginInfo.ShopTemp.Add(Shop); // } // continue; //} Thread.Sleep(1000); LogSave.Add(Name, Shop.Name + " 等待数据中..."); continue; } UploadPinduoduoMain.ProductStock.Remove(t); if (UploadPinduoduoMain.ShopTitles.ContainsKey(Shop.ShopName) && UploadPinduoduoMain.ShopTitles[Shop.ShopName].Contains(t.Titlte)) { continue; } if (!string.IsNullOrEmpty(t.ViPrice) && string.IsNullOrEmpty(t.ViPriceMaxMin)) { LogSave.Add(Name, Shop.Name + " 版本升级不支持老数据格式,请重新制作新格式数据,跳过 " + t.FromId + " "); continue; } } catch { LogSave.Add(Name, Shop.Name + " 获取等待数据中..."); if (t == null) continue; } try { if (Shop.UpFromIds.ContainsKey(t.FromId) && Shop.UpFromIds[t.FromId] > top) { t.FindTimes++; if (t.FindTimes < 30) { UploadPinduoduoMain.ProductStock.Add(t); } LogSave.Add(Name, Shop.Name + " 遇到裂变数据,跳过 " + t.FromId + " 等待数据中..."); Thread.Sleep(1000); continue; } UploadPinduoduoMain.Delete(t.guid); if (!Shop.UpFromIds.ContainsKey(t.FromId)) Shop.UpFromIds.Add(t.FromId, 1); else Shop.UpFromIds[t.FromId]++; } catch { continue; } t.Uped = true; if (Shop.ExpressId == 0) { Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); if (Shop.ExpressId == 0) { Thread.Sleep(10000); Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); } if (Shop.ExpressId == 0) { LogSave.Add(Name, "运费模板未找到"); Shop.Message = "请设置运费模板"; UploadPinduoduoMain.ShopTemp.Add(Shop); return; } } waitTimes = 0; try { if (UploadPinduoduoMain.Irregularities && IrregularitiesWordFun(t.Titlte)) { bool ishas = false; for (int i = 0; i < UploadPinduoduoMain.brandNameList.Count; i++) { if (t.Titlte.Contains(brandNameList[i])) { ishas = true; break; } } if (ishas) { LogSave.Add(Name, Shop.Name + " 遇到品牌数据,跳过 " + t.FromId + " 该产品..."); Thread.Sleep(1000); continue; } } if (UploadPinduoduoMain.IrregularitiesWord) { foreach (string s in UploadPinduoduoMain.brandFilterNameList) { if (t.Titlte.Contains("【"))//移除【】和之间的数据 { string delStr=BaseRegex.GetMatchRegexString(ref t.Titlte, @"(【[\w\W]+?】)"); t.Titlte = t.Titlte.Replace(delStr,""); } if (t.Titlte.Contains("["))//移除【】和之间的数据 { string delStr = BaseRegex.GetMatchRegexString(ref t.Titlte, @"([[\w\W]+?])"); t.Titlte = t.Titlte.Replace(delStr, ""); } if (t.Titlte.Contains(s)) t.Titlte = t.Titlte.Replace(s, ""); } } } catch { continue; } t.Titlte = t.Titlte.Replace("//", "").Replace("\\", "");//Replace("/", "") maxCount++; if (maxCount > UploadPinduoduoMain.MaxUpload) return; if (t.Titlte.Contains("预售") && UploadPinduoduoMain.isLogistics) { LogSave.Add(Name, Shop.Name + " 跳过预售商品 " + t.FromId); continue; } try { string[] l = UploadPinduoduoMain.PreFixTitle.Split('\n'); if (!string.IsNullOrEmpty(UploadPinduoduoMain.PreFixTitle)) { if (loopPrexCount >= l.Length) { loopPrexCount = 0; } if (!t.Titlte.Contains(l[loopPrexCount]) && UploadPinduoduoMain.fixName == "前缀") { t.Titlte = l[loopPrexCount].Replace("\r", "").Trim() + t.Titlte; if (BaseClass.GetCharLength(t.Titlte) > 60) t.Titlte = BaseClass.SubCharLength(t.Titlte, 60); } if (!t.Titlte.Contains(l[loopPrexCount]) && UploadPinduoduoMain.fixName == "后缀") { t.Titlte = t.Titlte + l[loopPrexCount].Replace("\r", "").Trim(); if (BaseClass.GetCharLength(t.Titlte) > 60) t.Titlte = BaseClass.SubCharLength(t.Titlte, 60); } } loopPrexCount++; } catch { continue; } if (UploadPinduoduoMain.ShopTitles.ContainsKey(Shop.ShopName) && UploadPinduoduoMain.ShopTitles[Shop.ShopName].Contains(t.Titlte)) { continue; } Threadx.ThreadListWait(ref ts, new Thread(new UploadPinduoduoSet(Shop, Name, t).Get), UploadPinduoduoMain.SingleThreadCount); Thread.Sleep(3000); if (first && UploadPinduoduoMain.SingleThreadCount > 1) { first = false; Thread.Sleep(20 * 1000); } } Threadx.ThreadListWait(ref ts); } /// /// 在违规店铺中替换 /// public void Getsingle() { int top = FileBase.Exists("maxtop.ini") ? 50 : 30; bool ok = CanUser(Shop); if (!ok) { Shop.Message = "请先续费"; UploadPinduoduoMain.ShopTemp.Add(Shop); return; } List ProductStockSingle = new List(); for (int i = 0; i < UploadPinduoduoMain.ProductStockTemp.Count; i++) { ProductStockSingle.Add(UploadPinduoduoMain.ProductStockTemp[i].Clone()); } if (!UploadPinduoduoMain.ShopTitles.ContainsKey(Shop.ShopName) && UploadPinduoduoMain.NoRepeat) { var p = new GetProductOnlineClass(Name, Shop); p.ReplaceModel = true; p.isOnline = true; p.GetRepeatOnline(); } Shop.CanUpload = true; Shop.UpCount = 0; List ts = new List(); int waitTimes = 0; int maxCount = 0; int loopPrexCount = 0; UpPinduoduoProduct up = new UpPinduoduoProduct(Shop, Name); up.IniProp(Shop.MainCatId, Shop.Cookies); GetAllShopGoodsCount(); bool first = true; while (UploadPinduoduoMain.upRunning && Shop.CanUpload) { TaobaoProductBase t = null; try { if (Shop.Name.Contains("专营店")) { if (UploadPinduoduoMain.DesShop) t = ProductStockSingle.Find(tb => tb != null && tb.ShopName != "" && tb.MainCatId != 0 && tb.ShopName == Shop.ShopName && tb.MainCatId == Shop.MainCatId); else t = ProductStockSingle.Find(tb => tb != null && tb.MainCatId != 0 && tb.MainCatId == Shop.MainCatId); } // 医药健康 else if (Shop.MainCatId == 13) { t = ProductStockSingle.Find(tb => tb != null && tb.MainCatId != 0 && (tb.MainCatId == Shop.MainCatId && tb.MainCatId == 13)); } else { if (UploadPinduoduoMain.isCatType) t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && tb.MainCatId != 0 && tb.MainCatId == Shop.MainCatId); else if (UploadPinduoduoMain.DesShop) t = ProductStockSingle.Find(tb => tb != null && tb.ShopName != "" && tb.ShopName == Shop.ShopName && tb.MainCatId != 0 && (tb.MainCatId == Shop.MainCatId || tb.MainCatId == 7 && Shop.SelectFood || tb.MainCatId == 13 && Shop.SelectMedicinal || !Shop.SelectFood && !Shop.SelectMedicinal && "2,5,4,11,3,6,12,10".Contains(tb.MainCatId.ToString()))); //t = UploadPinduoduoMain.ProductStock.Find(tb => tb != null && !tb.Uped && //(tb.MainCatId == Shop.MainCatId || tb.MainCatId == 7 && Shop.SelectFood || tb.MainCatId == 13 && Shop.SelectMedicinal || !Shop.SelectFood && !Shop.SelectMedicinal && "5,4,11,3,6,12,10".Contains(tb.MainCatId.ToString())) && (tb.ShopName == "" || tb.ShopName == Shop.ShopName)); else t = ProductStockSingle.Find(tb => tb != null && tb.MainCatId != 0 && (tb.MainCatId == Shop.MainCatId || tb.MainCatId == 7 && Shop.SelectFood || tb.MainCatId == 13 && Shop.SelectMedicinal || !Shop.SelectFood && !Shop.SelectMedicinal && "2,5,4,11,3,6,12,10".Contains(tb.MainCatId.ToString()) || ((Shop.MainCatId != 2 || Shop.MainCatId != 7 || Shop.MainCatId != 9 || Shop.MainCatId != 13) && "2,5,4,11,3,6,12,10".Contains(tb.MainCatId.ToString())))); } if (t == null) { waitTimes++; if (waitTimes > 100) return; Thread.Sleep(1000); LogSave.Add(Name, Shop.Name + " 等待数据中..."); continue; } if (UploadPinduoduoMain.ProductStock.Contains(t)) UploadPinduoduoMain.ProductStock.Remove(t); ProductStockSingle.Remove(t); UploadPinduoduoMain.SingleCount = ProductStockSingle.Count; if (UploadPinduoduoMain.ShopTitles.ContainsKey(Shop.ShopName) && UploadPinduoduoMain.ShopTitles[Shop.ShopName].Contains(t.Titlte)) { continue; } if (!string.IsNullOrEmpty(t.ViPrice) && string.IsNullOrEmpty(t.ViPriceMaxMin)) { LogSave.Add(Name, Shop.Name + " 版本升级不支持老数据格式,请重新制作新格式数据,跳过 " + t.FromId + " "); continue; } } catch { LogSave.Add(Name, Shop.Name + " 获取等待数据中..."); if (t == null) continue; } try { if (Shop.UpFromIds.ContainsKey(t.FromId) && Shop.UpFromIds[t.FromId] > top) { t.FindTimes++; if (t.FindTimes < 30) { UploadPinduoduoMain.ProductStock.Add(t); } LogSave.Add(Name, Shop.Name + " 遇到裂变数据,跳过 " + t.FromId + " 等待数据中..."); Thread.Sleep(1000); continue; } UploadPinduoduoMain.Delete(t.guid); if (!Shop.UpFromIds.ContainsKey(t.FromId)) Shop.UpFromIds.Add(t.FromId, 1); else Shop.UpFromIds[t.FromId]++; } catch { continue; } t.Uped = true; if (Shop.ExpressId == 0) { Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); if (Shop.ExpressId == 0) { Thread.Sleep(10000); Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); } if (Shop.ExpressId == 0) { LogSave.Add(Name, "运费模板未找到"); Shop.Message = "请设置运费模板"; UploadPinduoduoMain.ShopTemp.Add(Shop); return; } } waitTimes = 0; try { if (UploadPinduoduoMain.Irregularities && IrregularitiesWordFun(t.Titlte)) { bool ishas = false; for (int i = 0; i < UploadPinduoduoMain.brandNameList.Count; i++) { if (t.Titlte.Contains(brandNameList[i])) { ishas = true; break; } } if (ishas)//!(UploadPinduoduoMain.SelBrand && ishas) { LogSave.Add(Name, Shop.Name + " 遇到品牌数据,跳过 " + t.FromId + " 该产品..."); Thread.Sleep(1000); continue; } } if (UploadPinduoduoMain.IrregularitiesWord) { foreach (string s in UploadPinduoduoMain.brandFilterNameList) { if (t.Titlte.Contains("【"))//移除【】和之间的数据 { string delStr = BaseRegex.GetMatchRegexString(ref t.Titlte, @"(【[\w\W]+?】)"); t.Titlte = t.Titlte.Replace(delStr, ""); } if (t.Titlte.Contains("["))//移除【】和之间的数据 { string delStr = BaseRegex.GetMatchRegexString(ref t.Titlte, @"([[\w\W]+?])"); t.Titlte = t.Titlte.Replace(delStr, ""); } if (t.Titlte.Contains(s)) t.Titlte = t.Titlte.Replace(s, ""); } } } catch { continue; } t.Titlte = t.Titlte.Replace("//", "").Replace("\\", "");//Replace("/", "") maxCount++; if (maxCount > UploadPinduoduoMain.MaxUpload) return; try { string[] l = UploadPinduoduoMain.PreFixTitle.Split('\n'); if (!string.IsNullOrEmpty(UploadPinduoduoMain.PreFixTitle)) { if (loopPrexCount >= l.Length) { loopPrexCount = 0; } if (!t.Titlte.Contains(l[loopPrexCount]) && UploadPinduoduoMain.fixName == "前缀") { t.Titlte = l[loopPrexCount].Replace("\r", "").Trim() + t.Titlte; if (BaseClass.GetCharLength(t.Titlte) > 60) t.Titlte = BaseClass.SubCharLength(t.Titlte, 60); } if (!t.Titlte.Contains(l[loopPrexCount]) && UploadPinduoduoMain.fixName == "后缀") { t.Titlte = t.Titlte + l[loopPrexCount].Replace("\r", "").Trim(); if (BaseClass.GetCharLength(t.Titlte) > 60) t.Titlte = BaseClass.SubCharLength(t.Titlte, 60); } } loopPrexCount++; } catch { continue; } Threadx.ThreadListWait(ref ts, new Thread(new UploadPinduoduoSet(Shop, Name, t).Get), UploadPinduoduoMain.SingleThreadCount); Thread.Sleep(3 * 1000); if (first && UploadPinduoduoMain.SingleThreadCount > 1) { first = false; Thread.Sleep(20 * 1000); } } Threadx.ThreadListWait(ref ts); } /// /// 新增违规到其他店铺 /// public void GetResureAdd() { List ts = new List(); if (Shop.ExpressId == 0) { Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); if (Shop.ExpressId == 0) { Thread.Sleep(10000); Shop.ExpressId = new UpdatePinduoduoExpressSet().GetFirst(Shop.Cookies, Shop.MallId, Shop); } if (Shop.ExpressId == 0) { LogSave.Add(Name, "运费模板未找到"); Shop.Message = "请设置运费模板"; UploadPinduoduoMain.ShopTemp.Add(Shop); return; } } for (int i = 0; i < productList.Count; i++) { var shop = GetShopLoginInfo.Shops.Find(s => s.ShopName == productList[i].ShopName); if (shop == null) continue; if (shop == Shop) continue; var uc = new UploadShopControl(Name, Shop, shop); uc.product = productList[i]; uc.GetAddRes(); Thread.Sleep(3000); } } public void GetAllShopGoodsCount() { int mallId = Shop.MallId; string cookies = Shop.Cookies, shopName = Shop.ShopName; string url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; string refere = "https://mms.pinduoduo.com/Pdd.html"; string data = "{\"order_by\":\"id:desc\",\"is_onsale\":1,\"size\":100,\"page\":#page#,\"mall_id\":" + mallId + "}"; string html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); if (string.IsNullOrEmpty(html) || !html.Contains("total")) { Thread.Sleep(10 * 1000); html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data.Replace("#page#", "1"), CpsSetAllGoods.getAnti0aon()); } Shop.ProductCount = BaseRegex.GetIntJson(ref html, "total"); url = "https://mms.pinduoduo.com/earth/api/mallPunishment"; refere = "https://mms.pinduoduo.com/Pdd.html"; data = "{\"size\":\"5\" }"; //第一页匹配结果 html = CpsSetAllGoods.Request_mms_pinduoduo_com(url, refere, cookies, data, CpsSetAllGoods.getAnti0aon()); //惩罚店铺 int level = BaseRegex.GetIntJson(ref html, "punishmentLevel"); string punishment = string.Empty; if (level == 1) { punishment = "一级惩罚"; } else if (level == 2) { punishment = "二级惩罚"; } else if (level == 3) { punishment = "三级惩罚"; } else { punishment = "无"; } //罚款结束时间 string punEndtime = BaseRegex.GetStringJson(ref html, "endTime"); if (string.IsNullOrEmpty(punEndtime)) { punishment = "无"; } if (punishment != "无") { Shop.Message = punishment; Shop.CanUpload = false; } UploadPinduoduoMain.ShopTemp.Add(Shop); } public static List brandNameList = new List(); public static bool IrregularitiesWordFun(string title) { if (string.IsNullOrEmpty(title) || brandNameList.Count == 0) return false; foreach (string s in brandNameList) { if (title.Contains(s)) return true; } return false; } public static bool CanUser(ShopChatBase shop) { string url = BaseClass.BuildObjString("pdd_shop_temp&act=goup"); string data = UserLogin.GetSignaturex(shop.ShopId, shop.ShopName); string html = GetHtml.PostUtf8(url, data); //string html = GetHtml.PostUtf8(url, data + "&act=goup"); if (html == "go") return true; return false; } } public class ImageUrlBase { public ImageUrlBase(string url, int w, int h) { Url = url; Width = w; Height = h; } public string Url; public int Width; public int Height; } public class ProductInfo { public long productId = 0; public string productName = ""; public bool offLine = false; public DateTime updateTime; } public class OnOrOffStatus { public string shopName = ""; public string onStatus = ""; public string offStatus = ""; } public class DelGroupStatus { public string shopName = ""; public string goodStatus = ""; public string goodOnStatus = ""; public string goodOffStatus = ""; public int count = 0; public int goodsCount = 0; public int goodsOnCount = 0; public int goodsOffCount = 0; public int offCount = 0; public int onCount = 0; public int delCount = 0; public int resCount = 0; public int vioCount = 0; /// /// 售罄商品数量 /// public int soldOutCount = 0; } public class OnOrOffProuduct { public long id = 0; public string message = ""; public string shopName = ""; public string name = ""; } public class PriceRangeModel { public int MinPrice = 0; public int MaxPrice = 0; public int CoupPrice = 0; } }