public List <PopGoods> SearchPopGoods(Shop shop, PopGoodsState state, int pageIndex, int pageSize) { if (shop.AppEnabled == false) { throw new Exception("店铺订单发货接口已禁用,无法调用相应接口操作"); } return(this.InvokeWithRefreshAccessToken <List <PopGoods> >(shop, () => GetPop(shop.PopType).SearchPopGoods(shop, state, pageIndex, pageSize))); }
public GoodsDownloadWorker(Shop shop, string title, string code, string stockCode, PopGoodsState state) { this.shop = shop; this.title = title; this.code = code; this.stockCode = stockCode; this.state = state; this.WorkerState = WorkerState.INIT; }
public DataCollectionResponse <PopGoods> SearchPopGoods(Shop shop, PopGoodsState state, int pageIndex, int pageSize) { Dictionary <string, object> para = new Dictionary <string, object>(); para["shop"] = shop; para["state"] = state; para["pageIndex"] = pageIndex; para["pageSize"] = pageSize; return(DoPost <DataCollectionResponse <PopGoods> >(para)); }
public DataCollectionResponse <PopGoods> SearchPopGoods(Shop shop, PopGoodsState state, int pageIndex, int pageSize) { try { return(new DataCollectionResponse <PopGoods>((new PopService().SearchPopGoods(shop, state, pageIndex, pageSize)))); } catch (Exception e) { throw new WebFaultException <ResponseBase>(new ResponseBase(e.Message), HttpStatusCode.OK); } }
private void btnQuery_Click(object sender, RoutedEventArgs e) { try { //运行中或者暂停中 if (this.goodsDownloadWorker != null) { if (goodsDownloadWorker.WorkerState == WorkerState.PAUSE) { goodsDownloadWorker.GoOn(); } if (goodsDownloadWorker.WorkerState == WorkerState.WORKING) { goodsDownloadWorker.Pause(false, "用户暂停", 0); } } else { //创建新线程开始 string title = this.tbTitle.Text.Trim(); string code = this.tbCode.Text.Trim(); string stockCode = this.tbStockCode.Text.Trim(); PopGoodsState state = this.cbbStatus.GetSelectedEnum <PopGoodsState>(); this.lastShop = this.cbbShops.SelectedItem as Shop; if (this.lastShop == null) { throw new Exception("未选择店铺"); } if (this.lastShop.AppEnabled == false) { string htmlRet = this.wb1.GetTextAsync().Result; if (htmlRet.Contains(this.lastShop.PopSellerId) == false) { throw new Exception("选择店铺与当前登录店铺不一致"); } } goodsDownloadWorker = new GoodsDownloadWorker(this.lastShop, title, code, stockCode, state); this.popGoodsInfoViewModels.Clear(); goodsDownloadWorker.Download += GoodsDownloadWorker_Download; goodsDownloadWorker.DownloadData += GoodsDownloadWorker_DownloadData; goodsDownloadWorker.Pausing += GoodsDownloadWorker_Pausing; goodsDownloadWorker.Start(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public abstract List <PopGoods> SearchPopGoods(Shop shop, PopGoodsState state, int pageIndex, int pageSize);
private List <PopGoods> QueryHtmlGoodsPage(Shop shop, int pageIndex, PopGoodsState state) { Uri goodsListPageUri = new Uri(shop.PopType == PopType.TMALL ? "https://item.manager.tmall.com/tmall/manager/table.htm" : "https://item.publish.taobao.com/taobao/manager/table.htm"); string goodsEditPageDomain = shop.PopType == PopType.TMALL ? "item.upload.tmall.com" : "item.publish.taobao.com"; string goodsEditPageUrlBase = shop.PopType == PopType.TMALL ? "https://item.upload.tmall.com/tmall/publish.htm?id=" : "https://item.publish.taobao.com/sell/publish.htm?itemId="; var goodsListPageXsrfCookieValue = CefCookieVisitor.GetCookieValues(goodsListPageUri.Host, "XSRF-TOKEN"); if (string.IsNullOrWhiteSpace(goodsListPageXsrfCookieValue)) { throw new Exception("没有找到相应XSRF-TOKEN,刷新页面重新登录"); } var goodsListPageDomainCookie = CefCookieVisitor.GetCookieValues(goodsListPageUri.Host, null); if (string.IsNullOrWhiteSpace(goodsListPageDomainCookie)) { throw new Exception("未找到域:" + goodsListPageUri.Host + " 的任何COOKIE ,刷新页面重新登录"); } var goodsEditPageCookie = CefCookieVisitor.GetCookieValues(goodsEditPageDomain, null); string goodsState = state == PopGoodsState.NONE ? "all" : (state == PopGoodsState.ONSALE ? "on_sale" : "in_stock"); var xhrdata = "jsonBody=" + MsHttpRestful.UrlEncode("{\"filter\":{},\"pagination\":{\"current\":" + pageIndex + ",\"pageSize\":20},\"table\":{\"sort\":{}},\"tab\":\"" + goodsState + "\"}", Encoding.UTF8); var header = new Dictionary <string, string>(); header.Add("X-XSRF-TOKEN", goodsListPageXsrfCookieValue.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries)[1]); var content = MsHttpRestful.SendTbData(System.Net.Http.HttpMethod.Post, goodsListPageUri, header, goodsListPageDomainCookie, xhrdata); var resp = Newtonsoft.Json.JsonConvert.DeserializeObject <TaobaoQueryGoodsListResponse>(content); List <PopGoods> goods = new List <PopGoods>(); if (resp == null || resp.success == false) { throw new Exception("返回数据错误,请点击页面分页进行验证后重新开始"); } if (resp.data.table.dataSource == null) { return(goods); } foreach (var g in resp.data.table.dataSource) { if (this.WaitGoOn() == false) { break; } //每个商品获取的时候,都有可能,登录超时或者其它问题,需要循环 PopGoods pg = null; string goodsEditPageUrl = goodsEditPageUrlBase + g.itemId; for (int i = 0; i < 5; i++) { if (this.WaitGoOn() == false) { break; } Debug.WriteLine("开始抓取商品:" + g.itemId); this.OnDownload("暂停", true, "第:" + (i + 1) + " 次下载,第:" + pageIndex + "/" + ((resp.data.pagination.total / resp.data.pagination.pageSize) + 1) + "页,第" + (goods.Count + 1) + "条商品详情", false); bool ret = QueryHtmlGoods(g, goodsEditPageUrl, goodsEditPageCookie, ref pg); if (ret == true) { goods.Add(pg); break; } } if (this.isStop == false && pg == null) { throw new Exception("抓取商品5次都为成功:" + g.itemId); } if (this.WaitGoOn() == false) { break; } //每次等待3秒,太快淘宝会返回错误 Thread.Sleep(3000); } return(goods); }
private void AppendDataToUi(List <PopGoods> goods, Shop shop, string title, string code, string stockCode, PopGoodsState state) { List <PopGoods> toAdd = new List <PopGoods>(); string[] titles = title.Split(' '); //第一步过滤 foreach (var v in goods) { if (this.popGoodsInfoViewModels.Any(obj => obj.PopGoodsInfo.Id == v.Id)) { continue; } if (string.IsNullOrWhiteSpace(code) == false && v.Code != code) { continue; } if (string.IsNullOrWhiteSpace(stockCode) == false && v.Skus != null && v.Skus.Any(obj => obj.Code.IndexOf(stockCode, StringComparison.OrdinalIgnoreCase) >= 0) == false) { continue; } if (title != null && title.Length > 0) { if (titles.All(o => v.Title != null && v.Title.Contains(o)) == false) { continue; } } toAdd.Add(v); } //生成VM PopGoodsInfoViewModel[] vms = new PopGoodsInfoViewModel[toAdd.Count]; var goodsTasks = ServiceContainer.GetService <GoodsTaskService>().GetByAll(shop.Id, 0, 0).Datas; for (int i = 0; i < vms.Length; i++) { vms[i] = new PopGoodsInfoViewModel(toAdd[i]); vms[i].UserNumber = this.popGoodsInfoViewModels.Count + i + 1; vms[i].GoodsTask = goodsTasks.FirstOrDefault(obj => obj.ShopId == shop.Id && obj.GoodsId == vms[i].PopGoodsInfo.Id); vms[i].GoodsTask = vms[i].GoodsTask ?? new GoodsTask { GoodsId = goods[i].Id, ShopId = shop.Id, Comment = "", Id = 0, }; } var unSaved = vms.Where(obj => obj.GoodsTask != null && obj.GoodsTask.Id < 1).Select(obj => obj.GoodsTask).ToArray(); if (unSaved.Length > 0) { var retId = ServiceContainer.GetService <GoodsTaskService>().SaveBatch(unSaved); for (int i = 0; i < unSaved.Length; i++) { unSaved[i].Id = retId.Datas[i]; } } foreach (var v in vms) { this.popGoodsInfoViewModels.Add(v); } this.dgvGoods.ItemsSource = popGoodsInfoViewModels; for (int i = 0; i < this.popGoodsInfoViewModels.Count; i++) { var v = this.popGoodsInfoViewModels[i]; if (v.PopGoodsInfo.Skus.Any(o => string.IsNullOrWhiteSpace(o.Code))) { v.State = "有SKU库存编码为空"; } if (this.popGoodsInfoViewModels.Any(obj => obj != v && obj.SkuCodesInfo.Equals(v.SkuCodesInfo, StringComparison.OrdinalIgnoreCase))) { v.State += "商品重复"; } } }
public override List <PopGoods> SearchPopGoods(Domain.Shop shop, PopGoodsState state, int pageIndex, int pageSize) { SortedDictionary <string, string> param = new SortedDictionary <string, string>(); param["page_size"] = pageSize.ToString(); param["page"] = (pageIndex + 1).ToString(); if (state != PopGoodsState.NONE) { param["is_onsale"] = state == PopGoodsState.ONSALE ? "1" : "0"; } var ret = this.Invoke <PddRspGoods>(shop, "pdd.goods.list.get", param); List <PopGoods> goods = new List <PopGoods>(); if (ret.goods_list == null || ret.goods_list == null) { return(goods); } foreach (var g in ret.goods_list) { var pg = new PopGoods { Id = g.goods_id, Title = g.goods_name, AddTime = "", UpdateTime = "", SaleNum = 0, Images = new string[] { g.thumb_url }, CatId = "", Code = "", State = g.is_onsale == "1" ? PopGoodsState.ONSALE : PopGoodsState.NOTSALE, Type = "所有", }; if (g.sku_list == null || g.sku_list.Length < 1) { continue; } foreach (var sku in g.sku_list) { if (sku.is_sku_onsale == 0) { continue; } pg.Code = sku.outer_goods_id; var psku = new PopGoodsSku { Id = sku.sku_id, Code = sku.outer_id, Stock = sku.sku_quantity.ToString(), Status = PopGoodsState.ONSALE, Price = "0", }; string[] ss = sku.spec.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); psku.Color = ss[0]; psku.Size = ss[1]; pg.Skus.Add(psku); } goods.Add(pg); } return(goods); }
public override List <PopGoods> SearchPopGoods(Shop shop, PopGoodsState state, int pageIndex, int pageSize) { throw new NotImplementedException(); }