예제 #1
0
        private void btnStart_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            try
            {
                if (string.IsNullOrEmpty(ccbNick.Text))
                {
                    XtraMessageBox.Show("请选择店铺!");
                    return;
                }

                #region 买家自定义类目
                //读取买家自定义类目列表中被选中的子节点
                string sellercids = string.Empty;
                foreach (TreeListNode node in treeListSellerCat.Nodes)
                {
                    if (node.HasChildren)
                    {
                        foreach (TreeListNode childNode in node.Nodes)
                        {
                            if (childNode.CheckState == CheckState.Checked)
                            {
                                sellercids += string.Format("{0},", childNode.Tag.ToString());
                            }
                        }
                    }
                    else
                    {
                        if (node.CheckState == CheckState.Checked)
                        {
                            sellercids += string.Format("{0},", node.Tag.ToString());
                        }
                    }
                }
                itemreq.SellerCids = sellercids.TrimEnd(',');
                #endregion

                /*在这里判断stockItem中是否存在此商品,不存在要生成一个*/
                string  session = SystemHelper.GetSessionKey(ccbNick.Text);
                ItemRsp addRsp  = TopService.ItemAdd(session, itemreq);
                //上传成功执行
                if (addRsp != null && addRsp.Item != null)
                {
                    ItemRsp             rsp  = TopService.ItemGet(session, ccbNick.Text, addRsp.Item.Iid, null);
                    Alading.Entity.Item item = new Alading.Entity.Item();
                    if (rsp.Item == null)
                    {
                        rsp.Item = itemreq as Taobao.Entity.Item;
                    }
                    UIHelper.ItemCopyData(item, rsp.Item);
                    ItemService.AddItem(item);
                }
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(ex.Message);
            }
        }
예제 #2
0
        /// <summary>
        /// 更新商家编码,返回失败的商品,同时置成功商品的IsUpdate为TRUE,标识已同步到淘宝
        /// </summary>
        /// <param name="nick"></param>
        /// <param name="itemdic"></param>
        /// <returns></returns>
        private Dictionary <string, string> UpdateOuterId(string nick, Dictionary <string, string> itemdic, DoWorkEventArgs e)
        {
            Dictionary <string, string> failedItemsDic = new Dictionary <string, string>();
            List <string> iidlist  = itemdic.Keys.ToList();
            ItemReq       req      = new ItemReq();
            ItemRsp       response = new ItemRsp();
            string        session  = SystemHelper.GetSessionKey(nick);
            float         n        = iidlist.Count;
            int           temp     = 0;//作用是避免进度值propgress没有改变时得重复报告

            for (int i = 0; i < n; i++)
            {
                if (workerUpdate.CancellationPending)
                {
                    e.Cancel = true;
                    break;
                }
                if (workerUpdate.CancellationPending)
                {
                    e.Cancel = true;
                    break;
                }
                string iid = iidlist[i];
                req.Iid     = iid;
                req.OuterId = itemdic.SingleOrDefault(it => it.Key == iid).Value;
                try
                {
                    response = TopService.ItemUpdate(session, req);
                    if (response.Item == null)
                    {
                        failedItemsDic.Add(req.Iid, req.OuterId);
                    }
                    else
                    {
                        ItemService.UpdateItemIsUpdate(iid, true);
                    }
                }
                catch (System.Exception ex)
                {
                    failedItemsDic.Add(req.Iid, req.OuterId);
                    continue;
                }
                //进度报告
                int propgress = (int)((float)(i + 1) / n * 100);
                if (propgress > temp)
                {
                    workerUpdate.ReportProgress(propgress, null);
                }
                temp = propgress;
            }
            return(failedItemsDic);
        }
예제 #3
0
        /// <summary>
        /// 将上架计划列表中的宝贝更新到淘宝,返回成功宝贝的iid
        /// </summary>
        /// <param name="itemdic"></param>
        /// <returns></returns>
        private Dictionary <string, string> UpdateListPlan(string nick, Dictionary <string, string> itemdic, BackgroundWorker backWorker, DoWorkEventArgs e)
        {
            Dictionary <string, string> successitems = new Dictionary <string, string>();
            List <string> iidlist  = itemdic.Keys.ToList();
            ItemReq       req      = new ItemReq();
            ItemRsp       response = new ItemRsp();
            string        session  = SystemHelper.GetSessionKey(nick);
            float         n        = iidlist.Count;
            int           temp     = 0;//作用是避免进度值propgress没有改变时得重复报告

            for (int i = 0; i < n; i++)
            {
                if (backWorker.CancellationPending)
                {
                    e.Cancel = true;
                    break;
                }
                string iid = iidlist[i];
                req.Iid           = iid;
                req.ApproveStatus = "onsale";
                req.ListTime      = itemdic.SingleOrDefault(it => it.Key == iid).Value;
                try
                {
                    response = TopService.ItemUpdate(session, req);
                    if (response.Item != null)
                    {
                        successitems.Add(req.Iid, req.ListTime);
                    }
                }
                catch (Exception)
                {
                    continue;
                }

                //进度报告
                int propgress = (int)((float)(i + 1) / n * 100);
                if (propgress > temp)
                {
                    backWorker.ReportProgress(propgress, null);
                }
                temp = propgress;
            }
            return(successitems);
        }
예제 #4
0
 private void backWorker_DoWork(object sender, DoWorkEventArgs e)
 {
     try
     {
         foreach (string nick in sortItemList.Keys)
         {
             if (backWorker.CancellationPending)
             {
                 e.Cancel = true;
                 break;
             }
             if (sortItemList[nick].Count == 0)
             {
                 continue;
             }
             BeginInvoke(new Action(() =>
             {
                 this.progressBarControl1.Properties.Maximum = sortItemList[nick].Count;
             }
                                    ));
             string session = SystemHelper.GetSessionKey(nick);
             for (int i = 0; i < sortItemList[nick].Count; i++)
             {
                 if (backWorker.CancellationPending)
                 {
                     e.Cancel = true;
                     break;
                 }
                 string  iid = sortItemList[nick][i];
                 ItemRsp rsp = TopService.ItemUpdateListing(session, iid);
                 if (rsp != null && rsp.Item != null)
                 {
                     //加入成功列表
                     iidlist.Add(iid);
                 }
                 backWorker.ReportProgress(i + 1, string.Format("正在更新店铺{0}的宝贝", nick));
             }
         }
     }
     catch (Exception ex)
     {
         e.Result = ex.Message;
     }
 }
예제 #5
0
        void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            ItemTask itemTask = e.Argument as ItemTask;
            List <Taobao.Entity.Item> items  = itemTask.ItemList;
            BackgroundWorker          worker = (BackgroundWorker)sender;
            int totalCount = itemTask.totalCount;

            for (int i = 0; i < items.Count; i++)
            {
                lock (lockObject)
                {
                    //进度递增
                    progressCurrent++;
                }

                if (worker.CancellationPending)
                {
                    e.Cancel = true;
                    break;
                }

                try
                {
                    ItemRsp myrsp = TopService.ItemGet(SystemHelper.GetSessionKey(items[i].Nick), items[i].Nick, items[i].Iid, string.Empty);
                    if (myrsp != null && myrsp.Item != null)
                    {
                        Alading.Entity.Item item = new Alading.Entity.Item();
                        UIHelper.ItemCopyData(item, myrsp.Item);
                        //添加到数据库,如果存在则更新,否则添加
                        ReturnType result = ItemService.AddItem(item);

                        //计算进度条值
                        int progress = (int)((float)progressCurrent / (float)totalCount * 100);
                        if (result == ReturnType.Success)
                        {
                            UserState state = new UserState();
                            state.Index         = i + 1;
                            state.Iid           = items[i].Iid;
                            state.ItemTaskIndex = itemTask.Index;
                            state.Message       = "下载成功!";
                            worker.ReportProgress(progress, state);
                        }
                        else
                        {
                            UserState state = new UserState();
                            state.Message       = "数据库存储发生错误。";
                            state.Index         = i + 1;
                            state.Iid           = items[i].Iid;
                            state.ItemTaskIndex = itemTask.Index;

                            //发生数据库错误的报告
                            worker.ReportProgress(-1, state);
                        }
                    }
                }
                catch (Exception ex)
                {
                    UserState state = new UserState();
                    state.Message       = ex.Message;
                    state.Index         = i + 1;
                    state.Iid           = items[i].Iid;
                    state.ItemTaskIndex = itemTask.Index;

                    //发生下载错误的报告
                    worker.ReportProgress(-1, state);
                }
            }


            e.Result = itemTask.Index;
        }
예제 #6
0
        void mainWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = (BackgroundWorker)sender;

            threadCount = Convert.ToInt32(spinEditThreadCount.Text);
            string       nick  = string.Empty;
            string       title = string.Empty;
            string       sid   = string.Empty;
            bool         isSelected;
            TreeListNode node = null;

            //循环shop树,获得选中的店铺
            IEnumerator treeListEnumerator = this.treeListShop.Nodes.GetEnumerator();

            while (treeListEnumerator.MoveNext())
            {
                if (mainWorker.CancellationPending)
                {
                    e.Cancel = true;
                    return;
                }

                try
                {
                    node       = treeListEnumerator.Current as TreeListNode;
                    isSelected = Convert.ToBoolean(node[treeListShop.Columns["IsSelected"].AbsoluteIndex]);

                    if (node[treeListShop.Columns["nick"].AbsoluteIndex] != null)
                    {
                        nick = node[treeListShop.Columns["nick"].AbsoluteIndex].ToString();
                    }
                    if (node[treeListShop.Columns["title"].AbsoluteIndex] != null)
                    {
                        title = node[treeListShop.Columns["title"].AbsoluteIndex].ToString();
                    }

                    if (node[treeListShop.Columns["sid"].AbsoluteIndex] != null)
                    {
                        sid = node[treeListShop.Columns["sid"].AbsoluteIndex].ToString();
                    }

                    if (isSelected)
                    {
                        //线程总数量设为0
                        totalThreadCount = 0;

                        //清空itemList
                        itemList.Clear();

                        //清空子线程列表
                        workerList.Clear();

                        worker.ReportProgress(1, DateTime.Now.ToString(Constants.DATE_TIME_FORMAT) + " 正在获取店铺" + title + "的宝贝信息......");

                        //获取选中店铺所有的item
                        itemRsp = TopService.ItemsAllGet(SystemHelper.GetSessionKey(nick), fields, 1, pageSize);
                        if (itemRsp == null)
                        {
                            worker.ReportProgress(1, title + "店铺宝贝获取失败。");
                        }
                        else
                        {
                            /*把item加入到itemlist中*/
                            if (itemRsp.Items != null && itemRsp.Items.Item != null)
                            {
                                foreach (Taobao.Entity.Item item in itemRsp.Items.Item)
                                {
                                    itemList.Add(item);
                                }
                            }

                            worker.ReportProgress(1, string.Format("检测到店铺内宝贝{0}个。", itemRsp.TotalResults));

                            //计算页数
                            pageNo = itemRsp.TotalResults % pageSize == 0 ? (itemRsp.TotalResults / pageSize) : ((itemRsp.TotalResults / pageSize) + 1);

                            //如果超过一页,即超过200条
                            if (pageNo > 1)
                            {
                                //获取所有的item列表
                                worker.ReportProgress(1, "正在获取店铺宝贝列表......");

                                //下载其它页
                                for (int i = 2; i <= pageNo; i++)
                                {
                                    itemRsp = TopService.ItemsAllGet(SystemHelper.GetSessionKey(nick), fields, i, pageSize);
                                    if (itemRsp.Items != null && itemRsp.Items.Item != null)
                                    {
                                        foreach (Taobao.Entity.Item item in itemRsp.Items.Item)
                                        {
                                            itemList.Add(item);
                                        }
                                    }
                                }
                                worker.ReportProgress(1, "店铺宝贝列表获取成功。");
                            }

                            worker.ReportProgress(1, "系统正在启动多线程下载宝贝详细信息......");

                            //如果商品的数量小于
                            if (itemRsp.TotalResults < threadCount)
                            {
                                threadCount = itemRsp.TotalResults;
                            }

                            //计算每个子线程应该分配多少item去下载,itemPageSize
                            itemPageSize = itemRsp.TotalResults % threadCount == 0 ? (itemRsp.TotalResults / threadCount) : ((itemRsp.TotalResults / threadCount) + 1);

                            #region 开启下载子线程
                            //开启Item下载子线程
                            for (int i = 0; i < threadCount; i++)
                            {
                                //分页item,分配给每一个子线程。
                                List <Taobao.Entity.Item> items = itemList.Skip(i * itemPageSize).Take(itemPageSize).ToList();

                                //启动线程
                                BackgroundWorker itemWorker = new BackgroundWorker();
                                itemWorker.WorkerReportsProgress      = true;
                                itemWorker.WorkerSupportsCancellation = true;
                                itemWorker.DoWork += new DoWorkEventHandler(worker_DoWork);
                                //任务进行时,报告进度
                                itemWorker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
                                //任务完称时要做的,比如提示等等
                                itemWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);

                                workerList.Add(itemWorker);

                                //Item任务对象
                                ItemTask itemTask = new ItemTask();
                                itemTask.ItemList   = items;
                                itemTask.ShopSid    = sid;
                                itemTask.Index      = i + 1;
                                itemTask.totalCount = itemRsp.TotalResults;
                                //每一个子线程传入相关的下载列表信息。
                                itemWorker.RunWorkerAsync(itemTask);

                                //开启图片下载子线程
                                BackgroundWorker picWorker = new BackgroundWorker();
                                picWorker.WorkerReportsProgress      = true;
                                picWorker.WorkerSupportsCancellation = true;
                                picWorker.DoWork             += new DoWorkEventHandler(picWorker_DoWork);
                                picWorker.ProgressChanged    += new ProgressChangedEventHandler(picWorker_ProgressChanged);
                                picWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(picWorker_RunWorkerCompleted);

                                workerList.Add(picWorker);

                                //ItemPic任务对象
                                ItemTask itemPicTask = new ItemTask();
                                itemPicTask.ItemList = items;
                                itemPicTask.ShopSid  = sid;
                                picWorker.RunWorkerAsync(itemPicTask);
                            }
                            #endregion
                        }

                        progressCurrent = 0;
                        //信号量,阻塞当前线程,这里阻塞的是下载主线程
                        autoReset.WaitOne();
                    }
                }
                catch (Exception ex)
                {
                    BeginInvoke(new Action(() => { listBoxCtrl.Items.Insert(0, ex.Message); }));
                    return;
                }
            }
        }
예제 #7
0
        private void btnDowmItems_Click(object sender, EventArgs e)
        {
            try
            {
                if (cmbNick.Text == string.Empty)
                {
                    XtraMessageBox.Show("请先选择店铺!", "提示");
                    return;
                }
                this.btnDowmItems.Enabled = false; //下载按钮不可用
                this.btnRetry.Enabled     = false;
                itemCompleteNum           = 0;     //下载完成数置0
                threadCompleteNum         = 0;     //完成线程数置0
                int     pageSize = 200;
                int     pageNo   = 1;
                string  fields   = "iid,cid";
                ItemRsp myrsp    = null;
                string  session  = SystemHelper.GetSessionKey(cmbNick.Text);
                myrsp = TopService.ItemsAllGet(session, fields, 1, pageSize);
                if (myrsp.TotalResults == 0)
                {
                    this.btnDowmItems.Enabled = true;
                    XtraMessageBox.Show("无宝贝数据!");
                    return;
                }
                listBoxDetail.Items.Insert(0, string.Format("检测到店铺内宝贝数{0}个", myrsp.TotalResults));
                listBoxDetail.Items.Insert(0, "开始下载……");
                List <string> totalIidList = new List <string>();
                /*把iid加入到iidlist中*/
                if (myrsp.Items != null && myrsp.Items.Item != null)
                {
                    foreach (Taobao.Entity.Item item in myrsp.Items.Item)
                    {
                        totalIidList.Add(item.Iid);
                    }
                }

                #region 计算是否需要分页获取
                if (myrsp.TotalResults % pageSize == 0)
                {
                    pageNo = myrsp.TotalResults / pageSize;
                }
                else
                {
                    pageNo = myrsp.TotalResults / pageSize + 1;
                }
                if (pageNo >= 2)
                {
                    for (int i = 2; i <= pageNo; i++)
                    {
                        myrsp = TopService.ItemsAllGet(session, "iid", i, pageSize);
                        if (myrsp.Items != null && myrsp.Items.Item != null)
                        {
                            foreach (Taobao.Entity.Item item in myrsp.Items.Item)
                            {
                                if (!totalIidList.Contains(item.Iid))
                                {
                                    totalIidList.Add(item.Iid);
                                }
                            }
                        }
                    } //for
                }     //if
                #endregion
                //进度条最大值赋值
                this.progressBarTotal.Properties.Maximum = totalIidList.Count;

                //线程数,全局变量
                threadnum = (int)spinEditThreadCount.Value;
                int size = 0;
                if (totalIidList.Count < threadnum)
                {
                    threadnum = totalIidList.Count;
                    size      = 1;
                }
                else
                {
                    size = totalIidList.Count % threadnum == 0 ? totalIidList.Count / threadnum : totalIidList.Count / threadnum + 1;
                }
                for (int i = 0; i < threadnum; i++)
                {
                    List <string>    iidlist = totalIidList.Skip(i * size).Take(size).ToList();
                    BackgroundWorker worker  = new BackgroundWorker();
                    worker.WorkerReportsProgress      = true;
                    worker.WorkerSupportsCancellation = true;
                    worker.DoWork             += new DoWorkEventHandler(worker_DoWork);
                    worker.ProgressChanged    += new ProgressChangedEventHandler(worker_ProgressChanged);
                    worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
                    listBoxDetail.Items.Insert(0, string.Format("{0}线程{1}开始下载……", DateTime.Now.ToString(Constants.DATE_TIME_FORMAT), i + 1));
                    ItemTask itemTask = new ItemTask();
                    itemTask.iidList     = iidlist;
                    itemTask.threadIndex = i + 1;
                    itemTask.sessionKey  = session;
                    itemTask.shopNic     = cmbNick.Text;
                    worker.RunWorkerAsync(itemTask);
                }
            }
            catch (System.Exception ex)
            {
                this.btnDowmItems.Enabled = true;
                listBoxDetail.Items.Insert(0, ex.Message);
                XtraMessageBox.Show(ex.Message, Constants.SYSTEM_PROMPT, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
예제 #8
0
        void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            ItemTask         itemTask = e.Argument as ItemTask;
            List <string>    iidlist  = itemTask.iidList;
            BackgroundWorker worker   = (BackgroundWorker)sender;
            int n = iidlist.Count;

            for (int i = 0; i < n; i++)
            {
                //完成数加1
                itemCompleteNum++;
                if (isCancel)
                {
                    e.Cancel = true;
                    break;
                }
                string     iid        = iidlist[i];
                ReturnType returntype = ItemService.IsItemExisted(iid);
                if (checkEditIsUpdate.CheckState != CheckState.Checked && returntype == ReturnType.PropertyExisted)
                {
                    /*跳过本次下载*/
                    worker.ReportProgress(-2, string.Format("线程号{0},数据库已存在第{1}个宝贝,跳过下载", itemTask.threadIndex, i + 1));
                    continue;
                }
                string session = itemTask.sessionKey;
                string nick    = itemTask.shopNic;
                try
                {
                    ItemRsp myrsp = TopService.ItemGet(session, nick, iid, string.Empty);
                    if (myrsp != null && myrsp.Item != null)
                    {
                        Alading.Entity.Item item = new Alading.Entity.Item();
                        UIHelper.ItemCopyData(item, myrsp.Item);
                        ItemService.AddItem(item, checkEditIsUpdate.Checked);
                    }
                    else
                    {
                        if (failedDownload.iidList == null)
                        {
                            failedDownload.iidList = new List <string>();
                        }
                        failedDownload.iidList.Add(iid);
                        failedDownload.shopNick   = nick;
                        failedDownload.sessionKey = session;
                    }
                    //int progress = (int)((float)(i + 1) / (float)n * 100);
                    worker.ReportProgress(itemCompleteNum, string.Format("{0}已成功下载第{1}个宝贝,线程号{2}", DateTime.Now.ToString(Constants.DATE_TIME_FORMAT), itemCompleteNum, itemTask.threadIndex));
                }
                catch (System.Exception ex)
                {
                    MyException myexc = new MyException();
                    myexc.position    = i + 1;
                    myexc.iid         = iid;
                    myexc.msg         = ex.Message;
                    myexc.threadIndex = itemTask.threadIndex;
                    worker.ReportProgress(-1, myexc);

                    if (failedDownload.iidList == null)
                    {
                        failedDownload.iidList = new List <string>();
                    }
                    failedDownload.iidList.Add(iid);
                    failedDownload.shopNick   = nick;
                    failedDownload.sessionKey = session;
                }
            }
            e.Result = itemTask.threadIndex;
        }