Beispiel #1
0
 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;
 }
Beispiel #3
0
        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));
        }
Beispiel #4
0
 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);
     }
 }
Beispiel #6
0
 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 += "商品重复";
                }
            }
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
 public override List <PopGoods> SearchPopGoods(Shop shop, PopGoodsState state, int pageIndex, int pageSize)
 {
     throw new NotImplementedException();
 }