示例#1
0
        public bool UpdateShop(string name, Alading.HtmlEditor.Editor editor)
        {
            Alading.Entity.Shop focusShop = gridViewShop.GetFocusedRow() as Alading.Entity.Shop;
            if (focusShop != null)
            {
                string  session = SystemHelper.GetSessionKey(focusShop.nick);
                string  value   = editor.BodyHtml;
                ShopRsp shopRsp = TopService.ShopUpdate(session, name, value);

                ShopRsp getShopRsp = TopService.ShopGet(focusShop.nick);
                if (getShopRsp != null)
                {
                    if (name == "desc")
                    {
                        focusShop.desc = getShopRsp.Shop.Description;
                    }
                    else
                    {
                        focusShop.bulletin = getShopRsp.Shop.Bulletin;
                    }
                    focusShop.sid      = getShopRsp.Shop.Sid;
                    focusShop.modified = DateTime.Parse(getShopRsp.Shop.Modified);
                    ShopService.UpdateShop(focusShop);
                }
                return(true);
            }
            else
            {
                XtraMessageBox.Show("请先选择数据", Constants.SYSTEM_PROMPT, MessageBoxButtons.OK, MessageBoxIcon.Information);
                return(false);
            }
        }
示例#2
0
        /// <summary>
        /// 从淘宝获取最新数据
        /// </summary>
        /// <param name="pageno"></param>
        /// <param name="pageSize"></param>
        /// <param name="totalResults"></param>
        /// <param name="tradeRefundList"></param>
        public void GetNewTradeRefund(string session, int pageno, int pageSize, out int totalResults
                                      , List <Alading.Entity.TradeRefund> tradeRefundList, List <string> refundIDList)
        {
            TradeReq tradeReq = new TradeReq();

            tradeReq.PageNo   = pageno;                        //页数
            tradeReq.PageSize = pageSize;                      //每页的数量
            string fields = "refund_id,order_status,modified"; //API参数

            TradeRsp tradeRsp = TopService.RefundsReceiveGet(session, fields, tradeReq);

            /*未获取到数据*/
            if (tradeRsp == null || tradeRsp.TotalResults == 0)
            {
                totalResults = 0;
                return;
            }

            totalResults = tradeRsp.TotalResults;
            foreach (Alading.Taobao.Entity.Refund refund in tradeRsp.Refunds.Refund)
            {
                Alading.Entity.TradeRefund newTradeRefund = new Alading.Entity.TradeRefund();
                newTradeRefund.refund_id    = refund.Rid;                                                     //退货单号
                newTradeRefund.order_status = refund.OrderStatus == null ? string.Empty : refund.OrderStatus; //退款对应的订单交易状态
                newTradeRefund.modified     = DateTime.Parse(refund.Modified);                                //对象修改时间
                tradeRefundList.Add(newTradeRefund);
                refundIDList.Add(refund.Rid);
            }
        }
示例#3
0
        /// <summary>
        /// 获取退货单的详细信息并保存到数据库
        /// </summary>
        /// <param name="tradeRefundList"></param>
        /// <param name="refundIDList"></param>
        public void GetNewRefundDetail(string session, List <Alading.Entity.TradeRefund> tradeRefundList, List <string> refundIDList)
        {
            //存放数据库中不存在的退货详细信息
            List <Alading.Entity.TradeRefund> newRefundList = new List <Alading.Entity.TradeRefund>();

            List <Alading.Entity.TradeRefund> oldRefundList = TradeRefundService.GetTradeRefund(refundIDList);

            foreach (Alading.Entity.TradeRefund tradeRefund in tradeRefundList)
            {
                Alading.Entity.TradeRefund oldRefund = oldRefundList.Find(c => c.refund_id == tradeRefund.refund_id);
                if (oldRefund != null)//数据库中已存在此数据
                {
                    continue;
                }
                else//不存在则取淘宝网获取
                {
                    TradeRsp tradeRsp = TopService.RefundGet(session, tradeRefund.refund_id);

                    /*未获取到数据*/
                    if (tradeRsp == null)
                    {
                        continue;
                    }

                    oldRefund              = new TradeRefund();
                    oldRefund.modified     = tradeRefund.modified;
                    oldRefund.order_status = tradeRefund.order_status;
                    TradeRefundCopyData(oldRefund, tradeRsp.Refund);
                    newRefundList.Add(oldRefund);
                }
            }
            TradeRefundService.AddTradeRefund(newRefundList);
        }
示例#4
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);
            }
        }
示例#5
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);
        }
示例#6
0
        /// <summary>
        /// 点击更新店铺
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void barBtnDownload_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            WaitDialogForm waitFrm = null;

            try
            {
                Alading.Entity.Shop focusShop = gridViewShop.GetFocusedRow() as Alading.Entity.Shop;
                if (focusShop == null)//未选中
                {
                    XtraMessageBox.Show("请先选中更新的店铺", Constants.SYSTEM_PROMPT, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                waitFrm = new WaitDialogForm(Constants.WAIT_LOAD_DATA);
                ShopRsp shopRsp = TopService.ShopGet(focusShop.nick);
                string  session = SystemHelper.GetSessionKey(focusShop.nick);
                UserRsp userRsp = TopService.UserGet(session, focusShop.nick, string.Empty);

                Alading.Entity.Shop shop = new Alading.Entity.Shop();

                if (shopRsp == null || userRsp == null)//从淘宝网未获取到数据
                {
                    waitFrm.Close();
                    XtraMessageBox.Show("未获取到数据", Constants.SYSTEM_PROMPT, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                ShopCopyData((int)shopShowType, shop, shopRsp.Shop, userRsp.User);

                Alading.Entity.Shop oldShop = ShopService.GetShopByNick(shop.nick);

                if (oldShop == null)//不存在时添加
                {
                    ShopService.AddShop(shop);
                }
                else//存在时更新
                {
                    ShopService.UpdateShop(shop);
                }

                LoadShop(shopShowType);//重新刷新界面
                waitFrm.Close();
                XtraMessageBox.Show("更新成功", Constants.SYSTEM_PROMPT, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                waitFrm.Close();
                XtraMessageBox.Show(ex.Message, Constants.SYSTEM_PROMPT, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
示例#7
0
        void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            List <string>    nicklist = (List <string>)e.Argument;
            int              n        = nicklist.Count;
            int              temp     = 0;//作用是避免进度值propgress没有改变时得重复报告
            BackgroundWorker worker   = (BackgroundWorker)sender;

            for (int i = 0; i < n; i++)
            {
                if (worker.CancellationPending)
                {
                    e.Cancel = true;
                    break;
                }

                try
                {
                    string  session = SystemHelper.GetSessionKey(nicklist[i]);
                    ShopRsp shopRsp = TopService.ShopGet(nicklist[i]);
                    UserRsp userRsp = TopService.UserGet(session, nicklist[i], string.Empty);
                    if (shopRsp != null || userRsp != null)
                    {
                        Alading.Entity.Shop shop = new Alading.Entity.Shop();
                        UIHelper.ShopCopyData(shop, shopRsp.Shop, userRsp.User);
                        ShopService.UpdateShop(shop);
                    }

                    //进度报告
                    int propgress = (int)((float)(i + 1) / n * 100);
                    if (propgress > temp)
                    {
                        MyInfo myInfo = new MyInfo();
                        myInfo.nick      = nicklist[i];
                        myInfo.isSucceed = true;
                        worker.ReportProgress(propgress, myInfo);
                    }
                    temp = propgress;
                }
                catch (System.Exception ex)
                {
                    MyInfo myInfo = new MyInfo();
                    myInfo.nick      = nicklist[i];
                    myInfo.isSucceed = false;
                    myInfo.msg       = ex.Message;
                    worker.ReportProgress(0, myInfo);
                }
            }
        }
示例#8
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);
        }
示例#9
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;
     }
 }
示例#10
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;
        }
示例#11
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;
                }
            }
        }
示例#12
0
        void w_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;
            SycTaskArgs      task   = e.Argument as SycTaskArgs;

            foreach (var p in task.PageNoList)
            {
                #region get trade information
                //这里改成mainWorker,即主线程取消子线程工作全部停止
                if (mainWorker.CancellationPending)
                {
                    e.Cancel = true;
                    return;
                }

                TradeReq request  = new TradeReq();
                TradeRsp response = null;
                request.Status       = null;
                request.PageSize     = task.PageSize;
                request.PageNo       = p;
                request.StartCreated = task.QueryBeginTime.ToString("yyyy-MM-dd HH:mm:ss");
                request.EndCreated   = task.QueryEndTime.ToString("yyyy-MM-dd HH:mm:ss");
                string sessionkey = SystemHelper.GetSessionKey(task.ShopNick);
                response = TopService.TradesSoldGet(sessionkey, request);

                #endregion

                #region if getting trade failed do next

                if (response == null || response.Trades == null)
                {
                    lock (vlock)
                    {
                        sub_done += task.PageSize;
                    }
                    continue;
                }

                #endregion

                foreach (var t in response.Trades.Trade)
                {
                    //if (worker.CancellationPending)
                    //这里改成mainWorker,即主线程取消子线程工作全部停止
                    if (mainWorker.CancellationPending)
                    {
                        e.Cancel = true;
                        return;
                    }

                    lock (vlock)
                    {
                        sub_done++;
                    }

                    TradeRsp fulltrade = TopService.TradeFullinfoGet(sessionkey, t.Tid);

                    #region if getting trade detail failed do next

                    if (fulltrade == null || fulltrade.Trade == null)
                    {
                        ReportState state = new ReportState
                        {
                            Total   = sub_total,
                            Current = sub_done,
                            Message = string.Format("同步客户 {0} 失败:无法获取交易信息!", t.BuyerNick),
                        };
                        worker.ReportProgress(0, state);
                        continue;
                    }

                    #endregion

                    UserRsp buyer = TopService.UserGet(sessionkey, fulltrade.Trade.BuyerNick, fulltrade.Trade.AlipayNo);

                    #region if getting buyer detail failed do next

                    if (buyer == null || buyer.User == null)
                    {
                        ReportState state = new ReportState
                        {
                            Total   = sub_total,
                            Current = sub_done,
                            Message = string.Format("同步客户 {0} 失败:无法获取买家信息!", t.BuyerNick),
                        };
                        worker.ReportProgress(0, state);
                        continue;
                    }

                    #endregion

                    Alading.Entity.Consumer consumer = Alading.Business.ConsumerService.GetConsumer(fulltrade.Trade.BuyerNick);

                    if (consumer == null)
                    {
                        #region Consumer is not existed and save it

                        consumer = new Alading.Entity.Consumer();

                        consumer.nick              = buyer.User.Nick;
                        consumer.sex               = buyer.User.Sex;
                        consumer.buyer_zip         = buyer.User.Location.Zip;
                        consumer.location_city     = buyer.User.Location.City;
                        consumer.location_state    = buyer.User.Location.State;
                        consumer.location_district = buyer.User.Location.District;
                        consumer.location_address  = buyer.User.Location.Address;
                        consumer.location_country  = buyer.User.Location.Address;
                        consumer.birthday          = buyer.User.Birthday;
                        consumer.credit            = buyer.User.BuyerCredit.ToString();
                        consumer.level             = buyer.User.BuyerCredit.Level;
                        consumer.score             = buyer.User.BuyerCredit.Score;
                        consumer.status            = buyer.User.Status;
                        consumer.created           = DateTime.Parse(buyer.User.Created);
                        consumer.last_visit        = buyer.User.LastVisit;
                        consumer.mobilephone       = fulltrade.Trade.ReceiverMobile;
                        consumer.phone             = fulltrade.Trade.ReceiverPhone;
                        consumer.email             = fulltrade.Trade.BuyerEmail;
                        consumer.buyer_name        = fulltrade.Trade.ReceiverName;
                        consumer.alipay            = fulltrade.Trade.AlipayNo;

                        ReturnType result = Alading.Business.ConsumerService.AddConsumer(consumer);

                        if (result == ReturnType.Success)
                        {
                            ReportState state = new ReportState
                            {
                                Total   = sub_total,
                                Current = sub_done,
                                Message = string.Format("同步客户 {0} 信息成功!", consumer.nick),
                            };
                            worker.ReportProgress(1, state);

                            Alading.Entity.ConsumerAddress addr = Alading.Business.ConsumerAddressService.GetConsumerAddress(
                                c => c.tid == fulltrade.Trade.Tid).FirstOrDefault();

                            if (addr == null)
                            {
                                addr = new Alading.Entity.ConsumerAddress
                                {
                                    buyer_nick        = fulltrade.Trade.BuyerNick,
                                    location_address  = fulltrade.Trade.ReceiverAddress,
                                    location_city     = fulltrade.Trade.ReceiverCity,
                                    location_country  = buyer.User.Location.Country,
                                    location_district = fulltrade.Trade.ReceiverDistrict,
                                    location_state    = fulltrade.Trade.ReceiverState,
                                    location_zip      = fulltrade.Trade.ReceiverZip,
                                    receiver_mobile   = fulltrade.Trade.ReceiverMobile,
                                    receiver_name     = fulltrade.Trade.ReceiverName,
                                    receiver_phone    = fulltrade.Trade.ReceiverPhone,
                                    receiver_zip      = fulltrade.Trade.ReceiverZip,
                                    tid = fulltrade.Trade.Tid,
                                };

                                result = Alading.Business.ConsumerAddressService.AddConsumerAddress(addr);

                                if (result == ReturnType.Success)
                                {
                                    state = new ReportState
                                    {
                                        Total   = sub_total,
                                        Current = sub_done,
                                        Message = string.Format("同步客户 {0} 地址信息成功!", consumer.nick),
                                    };
                                    worker.ReportProgress(1, state);
                                }
                                else
                                {
                                    state = new ReportState
                                    {
                                        Total   = sub_total,
                                        Current = sub_done,
                                        Message = string.Format("同步客户 {0} 地址信息失败:数据保存失败!", consumer.nick),
                                    };
                                    worker.ReportProgress(1, state);
                                }
                            }
                        }
                        else
                        {
                            ReportState state = new ReportState
                            {
                                Total   = sub_total,
                                Current = sub_done,
                                Message = string.Format("同步客户 {0} 信息失败:数据保存失败!", consumer.nick),
                            };
                            worker.ReportProgress(1, state);
                            continue;
                        }
                        #endregion
                    }
                    else
                    {
                        #region Consumer existed and update address information

                        ReportState state0 = new ReportState
                        {
                            Total   = sub_total,
                            Current = sub_done,
                            Message = string.Format("客户 {0} 已存在!", consumer.nick),
                        };
                        worker.ReportProgress(0, state0);

                        Alading.Entity.ConsumerAddress addr = Alading.Business.ConsumerAddressService.GetConsumerAddress(
                            c => c.tid == fulltrade.Trade.Tid).FirstOrDefault();

                        if (addr == null)
                        {
                            addr = new Alading.Entity.ConsumerAddress
                            {
                                buyer_nick        = fulltrade.Trade.BuyerNick,
                                location_address  = fulltrade.Trade.ReceiverAddress,
                                location_city     = fulltrade.Trade.ReceiverCity,
                                location_country  = buyer.User.Location.Country,
                                location_district = fulltrade.Trade.ReceiverDistrict,
                                location_state    = fulltrade.Trade.ReceiverState,
                                location_zip      = fulltrade.Trade.ReceiverZip,
                                receiver_mobile   = fulltrade.Trade.ReceiverMobile,
                                receiver_name     = fulltrade.Trade.ReceiverName,
                                receiver_phone    = fulltrade.Trade.ReceiverPhone,
                                receiver_zip      = fulltrade.Trade.ReceiverZip,
                                tid = fulltrade.Trade.Tid,
                            };

                            ReturnType result = Alading.Business.ConsumerAddressService.AddConsumerAddress(addr);

                            if (result == ReturnType.Success)
                            {
                                ReportState state = new ReportState
                                {
                                    Total   = sub_total,
                                    Current = sub_done,
                                    Message = string.Format("同步客户 {0} 地址信息成功!", consumer.nick),
                                };
                                worker.ReportProgress(1, state);
                            }
                            else
                            {
                                ReportState state = new ReportState
                                {
                                    Total   = sub_total,
                                    Current = sub_done,
                                    Message = string.Format("同步客户 {0} 地址信息失败:数据保存失败!", consumer.nick),
                                };
                                worker.ReportProgress(1, state);
                            }
                        }

                        #endregion
                    }
                }
            }
        }
示例#13
0
        void mainWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker   = (BackgroundWorker)sender;
            StringBuilder    str_fail = new StringBuilder();

            TradeReq tradeReq = new TradeReq();

            //获取状态
            tradeReq.Status = TradeStatus;

            //总交易量清空
            TotalProessNum = 0;
            //错误列表清空
            failedTrade = new FailedTrade();

            tradeReq.PageSize = 100; //每页总数
            tradeReq.PageNo   = 1;   //页数

            /*计算总的交易量  即总进度条计算*/
            for (int j = 0; j < shop_List.Count; j++)
            {
                try
                {
                    #region 时间设置
                    /*选择近十五天*/
                    if (cmbSelectTime.SelectedIndex == 0)
                    {
                        tradeReq.StartCreated = this.dateEditBegin.DateTime.ToString("yyyy-MM-dd HH:mm:ss");
                        tradeReq.EndCreated   = this.dateEditEnd.DateTime.ToString("yyyy-MM-dd HH:mm:ss");
                    }
                    else/*开店至今*/
                    {
                        tradeReq.StartCreated = shop_List[j].created.ToString("yyyy-MM-dd HH:mm:ss");
                        tradeReq.EndCreated   = DateTime.Now.AddDays(-15).ToString("yyyy-MM-dd HH:mm:ss");
                    }
                    #endregion
                    //获取sessionkey
                    string sessionkey = SystemHelper.GetSessionKey(shop_List[j].nick);
                    //从淘宝上获取数据
                    TradeRsp tradeRsp = TopService.TradesSoldGet(sessionkey, tradeReq);
                    //订单获取失败
                    if (tradeRsp != null || tradeRsp.Trades != null)
                    {
                        TotalProessNum += tradeRsp.TotalResults;
                    }
                }
                catch (System.Exception ex)
                {
                    BeginInvoke(new Action(() => { OrderDown.Items.Insert(0, string.Format("{0}   {1}", DateTime.Now.ToString("HH:mm:ss"), ex.Message)); }));
                    return;
                }
            }

            /*各个店铺的交易处理*/
            for (int j = 0; j < shop_List.Count; j++)
            {
                //清空线程列表
                workerList.Clear();
                //清空总线程量
                totalThreadCount = 0;
                //当前交易量
                currentProessNum = 0;

                /*信息*/
                UserState DoState = new UserState();
                DoState.shopNick = shop_List[j].nick;
                DoState.message  = "开始处理!";
                mainWorker.ReportProgress(0, DoState);
                try
                {
                    //交易列表
                    List <string> tidList = new List <string>();

                    #region 时间设置
                    /*选择近十五天*/
                    if (cmbSelectTime.SelectedIndex == 0)
                    {
                        tradeReq.StartCreated = this.dateEditBegin.DateTime.ToString("yyyy-MM-dd HH:mm:ss");
                        tradeReq.EndCreated   = this.dateEditEnd.DateTime.ToString("yyyy-MM-dd HH:mm:ss");
                    }
                    else/*开店至今*/
                    {
                        tradeReq.StartCreated = shop_List[j].created.ToString("yyyy-MM-dd HH:mm:ss");
                        tradeReq.EndCreated   = DateTime.Now.AddDays(-15).ToString("yyyy-MM-dd HH:mm:ss");
                    }
                    #endregion

                    //获取sessionkey
                    string sessionkey = SystemHelper.GetSessionKey(shop_List[j].nick);
                    //从淘宝上获取数据
                    TradeRsp tradeRsp = TopService.TradesSoldGet(sessionkey, tradeReq);
                    //订单获取失败
                    if (tradeRsp == null || tradeRsp.Trades == null)
                    {
                        //异步操作
                        BeginInvoke(new Action(() => { OrderDown.Items.Insert(0, string.Format("{0}   网络异常,{1}店铺的订单下载失败!", DateTime.Now.ToString("HH:mm:ss"), shop_List[j].nick)); }));
                        str_fail.Append(shop_List[j].nick);
                        str_fail.Append(" ");
                        continue;
                    }
                    if (tradeRsp != null)
                    {
                        foreach (Alading.Taobao.Entity.Trade tradeObj in tradeRsp.Trades.Trade)
                        {
                            tidList.Add(tradeObj.Tid);
                        } /*foreach*/
                    }     /*if*/

                    //店铺的总交易量
                    int totalResults = tradeRsp.TotalResults;
                    BeginInvoke(new Action(() =>
                    {
                        OrderDown.Items.Insert(0, string.Format("{0}   店铺{1}共{2}订单!", DateTime.Now.ToString("HH:mm:ss"), shop_List[j].nick, totalResults));
                    }));
                    #region 计算是否需要分页获取
                    int PageTotalNum  = 0; /*总页数*/
                    int PageCurrentNo = 0; /*当前页数*/

                    //计算总页数
                    PageTotalNum = (tradeRsp.TotalResults % tradeReq.PageSize == 0) ? (tradeRsp.TotalResults / tradeReq.PageSize) : (tradeRsp.TotalResults / tradeReq.PageSize + 1);

                    /*有多余两页的订单*/
                    if (PageTotalNum >= 2)
                    {
                        for (PageCurrentNo = 2; PageCurrentNo < PageTotalNum + 1; PageCurrentNo++)
                        {
                            tradeReq.PageNo = PageCurrentNo;
                            tradeRsp        = TopService.TradesSoldGet(sessionkey, tradeReq);
                            if (tradeRsp != null && tradeRsp.Trades != null)
                            {
                                foreach (Taobao.Entity.Trade tradeObj in tradeRsp.Trades.Trade)
                                {
                                    if (!tidList.Contains(tradeObj.Tid))
                                    {
                                        tidList.Add(tradeObj.Tid);
                                    }
                                }
                            }    //if
                            else /*获取失败*/
                            {
                                if (!str_fail.ToString().Contains(shop_List[j].nick))
                                {
                                    str_fail.Append(shop_List[j].nick);
                                    str_fail.Append(" ");
                                    BeginInvoke(new Action(() => { OrderDown.Items.Insert(0, string.Format("{0}   网络异常,{1}店铺的订单下载失败!", DateTime.Now.ToString("HH:mm:ss"), shop_List[j].nick)); }));
                                }
                                break;
                            }
                        } //for
                    }     //if
                    #endregion

                    /*总交易数小于线程数*/
                    if (totalResults < threadCount)
                    {
                        threadCount = totalResults;
                    }
                    //每个线程交易下载量
                    int tradePageSize = (totalResults % threadCount == 0) ? (totalResults / threadCount) : (totalResults / threadCount + 1);
                    #region 开启多线程
                    for (int i = 0; i < threadCount; i++)
                    {
                        //获取分给每个线程的tid列表
                        List <string> TradeTidList = tidList.Skip(i * tradePageSize).Take(tradePageSize).ToList();

                        /*线程配置*/
                        BackgroundWorker TradeWorker = new BackgroundWorker();
                        TradeWorker.WorkerReportsProgress      = true;
                        TradeWorker.WorkerSupportsCancellation = true;
                        TradeWorker.RunWorkerCompleted        += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
                        TradeWorker.ProgressChanged           += new ProgressChangedEventHandler(worker_ProgressChanged);
                        TradeWorker.DoWork += new DoWorkEventHandler(worker_DoWork);

                        //添加到线程列表
                        workerList.Add(TradeWorker);

                        /*参数传递*/
                        TradeTask tradeTask = new TradeTask();
                        tradeTask.shopNic       = shop_List[j].nick;
                        tradeTask.ShopTradeList = TradeTidList;
                        tradeTask.threadIndex   = i + 1;
                        tradeTask.sessionKey    = sessionkey;
                        tradeTask.totalNum      = totalResults;
                        TradeWorker.RunWorkerAsync(tradeTask);
                    }
                    #endregion
                }
                catch (System.Exception ex)
                {
                    BeginInvoke(new Action(() => {
                        if (ex.Message.Contains("Remote service error"))
                        {
                            OrderDown.Items.Insert(0, string.Format("{0}   {1}", DateTime.Now.ToString("HH:mm:ss"), "不能连接远程服务器,请多尝试几次下载!".ToString()));
                        }
                    }));
                    /*进度记录*/
                    ProcessRecord  = 0;
                    TotalProessNum = 0;
                    TotalProessNum = 0;
                    BeginInvoke(new Action(() => { btnDownOrders.Enabled = true; }));
                    return;
                }
                //信号量,阻塞当前线程,这里阻塞的是下载主线程
                autoReset.WaitOne();
            }/*foreach 对店铺遍历*/
        }
示例#14
0
        private void btnItemCat_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            WaitDialogForm waitFrm = new WaitDialogForm(Constants.WAIT_LOAD_DATA);

            try
            {
                listBoxCtrl.Items.Insert(0, DateTime.Now.ToString(Constants.DATE_TIME_FORMAT) + " 启动淘宝类目下载");
                ItemCatRsp results = TopService.ItemCatsGet(null, null, "1970-01-01 00:00:00");
                listBoxCtrl.Items.Insert(0, DateTime.Now.ToString(Constants.DATE_TIME_FORMAT) + " 淘宝类目下载完毕");

                if (results != null && results.ItemCats != null && results.ItemCats.ItemCat != null)
                {
                    listBoxCtrl.Items.Insert(0, "ItemCats数量为" + results.ItemCats.ItemCat.Length);
                    Application.DoEvents();
                    //重新置空全局变量
                    itemcatlist.Clear();

                    DataTable table = new DataTable();
                    table.Columns.Add("cid", typeof(string));
                    table.Columns.Add("parent_cid", typeof(string));
                    table.Columns.Add("name", typeof(string));
                    table.Columns.Add("is_parent", typeof(bool));
                    table.Columns.Add("status", typeof(string));
                    table.Columns.Add("sort_order", typeof(Int32));
                    table.Columns.Add("PropTag", typeof(bool));
                    foreach (ItemCat itemCat in results.ItemCats.ItemCat)
                    {
                        Alading.Entity.ItemCat cat = new Alading.Entity.ItemCat();
                        cat.cid        = itemCat.Cid;
                        cat.parent_cid = itemCat.ParentCid;
                        cat.name       = string.IsNullOrEmpty(itemCat.Name) ? "无" : itemCat.Name;
                        cat.is_parent  = itemCat.IsParent;
                        cat.status     = itemCat.Status;
                        cat.sort_order = itemCat.SortOrder;
                        cat.PropTag    = false;
                        itemcatlist.Add(cat);

                        DataRow row = table.NewRow();
                        row["cid"]        = itemCat.Cid;
                        row["parent_cid"] = itemCat.ParentCid;
                        row["name"]       = string.IsNullOrEmpty(itemCat.Name) ? "无" : itemCat.Name;
                        row["is_parent"]  = itemCat.IsParent;
                        row["status"]     = itemCat.Status;
                        row["sort_order"] = itemCat.SortOrder;
                        row["PropTag"]    = false;
                        table.Rows.Add(row);
                    }
                    //排序
                    itemcatlist = itemcatlist.OrderBy(c => c.cid).ToList();
                    listBoxCtrl.Items.Insert(0, DateTime.Now.ToString(Constants.DATE_TIME_FORMAT) + " 启动淘宝类目存储");
                    Application.DoEvents();
                    ItemCatService.AddItemCatSqlBulkCopy(table);
                    listBoxCtrl.Items.Insert(0, DateTime.Now.ToString(Constants.DATE_TIME_FORMAT) + " 淘宝类目存储完毕");
                    //重新加载节点
                    treeListItemCat.Nodes.Clear();
                    LoadItemCat(treeListItemCat);
                    waitFrm.Close();
                }
            }
            catch (Exception ex)
            {
                waitFrm.Close();
                XtraMessageBox.Show(ex.Message, Constants.SYSTEM_PROMPT, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
示例#15
0
        /// <summary>
        /// 批量更新类目cid下所有属性值的is_parent字段,条件是必须保证cid下的所有属性及属性值已完全下载
        /// </summary>
        private void UpdatePropValueIsParent(List <string> cidlist, BackgroundWorker worker)
        {
            DataTable table = new DataTable();

            table.Columns.Add("cid", typeof(string));
            table.Columns.Add("is_parent", typeof(bool));
            table.Columns.Add("name", typeof(string));
            table.Columns.Add("name_alias", typeof(string));
            table.Columns.Add("pid", typeof(string));
            table.Columns.Add("prop_name", typeof(string));
            table.Columns.Add("vid", typeof(string));
            table.Columns.Add("status", typeof(string));
            table.Columns.Add("sort_order", typeof(Int32));

            List <Taobao.Entity.PropValue> pValueListNeedUpdate = new List <Taobao.Entity.PropValue>();

            /*每执行一次调用一次API,读取两次数据库
             * 这里不能用foreach,因为方法体里面有
             * cidlist.Remove(cid)语句,会造成无法
             * 枚举的异常
             * */
            for (int c = 0; c < cidlist.Count; c++)
            {
                string cid = cidlist[c];
                /*读取存在子属性的关键属性的pid*/
                List <string> keyPropsPidList = ItemPropService.GetKeyPropPid(cid);
                if (keyPropsPidList.Count == 0)
                {
                    return;
                }

                #region 循环获取keyPropsPidList的属性值,每执行一次调用一次API,读取一次数据库
                float n = keyPropsPidList.Count;
                //int temp = 0;//作用是避免进度值propgress没有改变时得重复报告
                for (int i = 0; i < n; i++)
                {
                    ////进度报告
                    //int propgress = (int)((float)(i + 1) / n * 100);
                    //if (propgress > temp)
                    //{
                    //    worker.ReportProgress(propgress, null);
                    //}
                    //temp = propgress;

                    string     pid = keyPropsPidList[i];
                    ItemCatRsp rsp = new ItemCatRsp();
                    try
                    {
                        rsp = TopService.ItemPropsGet(cid, pid, null);
                    }
                    catch (Exception ex)
                    {
                        worker.ReportProgress(int.Parse(cid), string.Format("异常信息{0}", ex.Message));
                        //加入错误列表
                        if (ciderrorlist == null)
                        {
                            ciderrorlist = new List <string>();
                        }
                        ciderrorlist.Add(cid);

                        //从需要更新列表中删除
                        cidlist.Remove(cid);
                        continue;
                    }
                    if (rsp.ItemProps == null || rsp.ItemProps.ItemProp == null)
                    {
                        /*说明下载失败*/
                        continue;
                    }

                    #region 加一条“自定义”记录至table里,读取了一次数据库
                    if (!ItemPropValueService.IsExistedPropValueName(cid, pid, "自定义"))
                    {
                        DataRow row = table.NewRow();
                        row["cid"]        = cid;
                        row["is_parent"]  = false;
                        row["name"]       = row["name_alias"] = "自定义";
                        row["pid"]        = pid;
                        row["vid"]        = 0;
                        row["status"]     = "normal";
                        row["sort_order"] = 1000;
                        if (rsp.ItemProps.ItemProp != null && rsp.ItemProps.ItemProp.Length > 0)
                        {
                            row["prop_name"] = rsp.ItemProps.ItemProp[0].Name ?? string.Empty;
                        }
                        else
                        {
                            row["prop_name"] = string.Empty;
                        }
                        table.Rows.Add(row);
                    }
                    #endregion

                    #region 将is_parent为TRUE的属性值加入pValueListNeedUpdate
                    foreach (Taobao.Entity.ItemProp prop in rsp.ItemProps.ItemProp)
                    {
                        Taobao.Entity.PropValues propvalues = prop.PropValues;
                        if (propvalues != null && propvalues.PropValue != null)
                        {
                            List <Alading.Taobao.Entity.PropValue> propValueWhereToList = propvalues.PropValue.Where(p => p.IsParent).ToList();
                            foreach (Taobao.Entity.PropValue pv in propValueWhereToList)
                            {
                                pv.Cid = cid;
                                pv.Pid = pid;
                            }
                            pValueListNeedUpdate.AddRange(propValueWhereToList);
                        }
                    } //foreach
                }     //for
                #endregion

                #endregion
            }
            //将自定义加入数据库
            if (table.Rows.Count > 0)
            {
                ItemPropValueService.AddItemPropValueSqlBulkCopy(table);
            }

            //更新is_parent
            if (pValueListNeedUpdate.Count > 0)
            {
                ItemPropValueService.UpdateItemPropValueDataParameters(pValueListNeedUpdate);
            }
        }
示例#16
0
        /// <summary>
        /// 批量下载类目cid下的所有属性,不能返回prop_values
        /// </summary>
        private void DownItemProp(List <string> cidlist, BackgroundWorker worker)
        {
            DataTable table = new DataTable();

            table.Columns.Add("cid", typeof(string));
            table.Columns.Add("child_template", typeof(string));
            table.Columns.Add("is_allow_alias", typeof(bool));
            table.Columns.Add("is_color_prop", typeof(bool));
            table.Columns.Add("is_enum_prop", typeof(bool));
            table.Columns.Add("is_input_prop", typeof(bool));
            table.Columns.Add("is_item_prop", typeof(bool));
            table.Columns.Add("is_key_prop", typeof(bool));
            table.Columns.Add("is_sale_prop", typeof(bool));
            table.Columns.Add("multi", typeof(bool));
            table.Columns.Add("must", typeof(bool));
            table.Columns.Add("name", typeof(string));
            table.Columns.Add("parent_pid", typeof(string));
            table.Columns.Add("parent_vid", typeof(string));
            table.Columns.Add("pid", typeof(string));
            table.Columns.Add("prop_name", typeof(string));
            table.Columns.Add("prop_values", typeof(string));
            table.Columns.Add("status", typeof(string));
            table.Columns.Add("sort_order", typeof(Int32));
            for (int c = 0; c < cidlist.Count; c++)
            {
                string cid = cidlist[c];
                if (ItemPropService.IsPropExistedCid(cid))
                {
                    continue;
                }
                ItemCatRsp rsp = new ItemCatRsp();
                try
                {
                    rsp = TopService.ItemPropsGet(cid);
                }
                catch (Exception ex)
                {
                    worker.ReportProgress(int.Parse(cid), string.Format("异常信息{0}", ex.Message));
                    //加入错误列表
                    if (ciderrorlist == null)
                    {
                        ciderrorlist = new List <string>();
                    }
                    ciderrorlist.Add(cid);

                    //从需要更新列表中删除
                    cidlist.Remove(cid);
                    continue;
                }
                if (rsp.ItemProps != null && rsp.ItemProps.ItemProp != null)
                {
                    ItemProp[] propArr = rsp.ItemProps.ItemProp;
                    for (int i = 0; i < propArr.Length; i++)
                    {
                        #region 数据赋值
                        DataRow row = table.NewRow();
                        row["cid"]            = cid;
                        row["child_template"] = propArr[i].ChildPropTemplate ?? string.Empty;
                        row["is_allow_alias"] = propArr[i].IsAllowAlias;
                        row["is_color_prop"]  = propArr[i].IsColorProp;
                        row["is_enum_prop"]   = propArr[i].IsEnumProp;
                        row["is_input_prop"]  = propArr[i].IsInputProp;
                        row["is_item_prop"]   = propArr[i].IsItemProp;
                        row["is_key_prop"]    = propArr[i].IsKeyProp;
                        row["is_sale_prop"]   = propArr[i].IsSaleProp;
                        row["multi"]          = propArr[i].IsMulti;
                        row["must"]           = propArr[i].IsMust;
                        row["name"]           = propArr[i].Name ?? string.Empty;
                        row["parent_pid"]     = propArr[i].ParentPid;
                        row["parent_vid"]     = propArr[i].ParentVid;
                        row["pid"]            = propArr[i].Pid;
                        row["prop_values"]    = JsonConvert.SerializeObject(propArr[i].PropValues) ?? string.Empty;
                        row["sort_order"]     = propArr[i].SortOrder;
                        row["status"]         = propArr[i].Status ?? string.Empty;
                        #endregion
                        table.Rows.Add(row);
                    }//for
                }
            }
            if (table.Rows.Count > 0)
            {
                ItemPropService.AddItemPropSqlBulkCopy(table);
            }
        }
示例#17
0
        /// <summary>
        ///批量 先下载类目cid下的所有属性值,不能返回is_parent字段
        /// </summary>
        private void DownItemPropvalue(List <string> cidlist, BackgroundWorker worker)
        {
            DataTable table = new DataTable();

            table.Columns.Add("cid", typeof(string));
            table.Columns.Add("is_parent", typeof(bool));
            table.Columns.Add("name", typeof(string));
            table.Columns.Add("name_alias", typeof(string));
            table.Columns.Add("pid", typeof(string));
            table.Columns.Add("prop_name", typeof(string));
            table.Columns.Add("vid", typeof(string));
            table.Columns.Add("status", typeof(string));
            table.Columns.Add("sort_order", typeof(Int32));
            for (int c = 0; c < cidlist.Count; c++)
            {
                string cid = cidlist[c];
                if (ItemPropValueService.IsExistedCid(cid))
                {
                    continue;
                }
                ItemCatRsp myrsp = new ItemCatRsp();
                try
                {
                    myrsp = TopService.ItemPropValuesGet(cid, null, "2005-01-01 00:00:00");
                }
                catch (Exception ex)
                {
                    worker.ReportProgress(int.Parse(cid), string.Format("异常信息{0}", ex.Message));
                    //加入错误列表
                    if (ciderrorlist == null)
                    {
                        ciderrorlist = new List <string>();
                    }
                    ciderrorlist.Add(cid);

                    //从需要更新列表中删除
                    cidlist.Remove(cid);
                    continue;
                }
                if (myrsp.PropValues != null && myrsp.PropValues.PropValue != null)
                {
                    Alading.Taobao.Entity.PropValue[] pvalueArr = myrsp.PropValues.PropValue;
                    for (int i = 0; i < pvalueArr.Length; i++)
                    {
                        DataRow row = table.NewRow();
                        row["cid"]        = pvalueArr[i].Cid;
                        row["is_parent"]  = pvalueArr[i].IsParent;//API不能返回此值
                        row["name"]       = pvalueArr[i].Name ?? string.Empty;
                        row["name_alias"] = pvalueArr[i].NameAlias ?? string.Empty;
                        row["pid"]        = pvalueArr[i].Pid;
                        row["prop_name"]  = pvalueArr[i].PropName ?? string.Empty;
                        row["vid"]        = pvalueArr[i].Vid;
                        row["status"]     = pvalueArr[i].Status ?? string.Empty;
                        row["sort_order"] = pvalueArr[i].SortOrder;
                        table.Rows.Add(row);
                    }
                }
            }
            if (table.Rows.Count > 0)
            {
                ItemPropValueService.AddItemPropValueSqlBulkCopy(table);
            }
        }
示例#18
0
        protected override Task ExecuteJob(IJobExecutionContext context)
        {
            var dataMap = context.MergedJobDataMap;

            ScriptPath   = dataMap.GetString("shell-script-path");
            ShellName    = dataMap.GetString("shell") ?? "/bin/bash";
            DbType       = dataMap.GetString("db-type") ?? "MySql";
            DbConnString = dataMap.GetString("conn-string") ?? "";

            AfterShellSql  = dataMap.GetString("after-shell-sql") ?? "";
            BeforeShellSql = dataMap.GetString("before-shell-sql") ?? "";
            AutoDelete     = dataMap.GetString("auto-delete") ?? "";
            var       logService = new LogService(DbType, DbConnString);
            var       topService = new TopService(DbType, DbConnString);
            Stopwatch stopwatch  = new Stopwatch();

            if (IsActive)
            {
                Logger.Info("存在执行中任务,跳过该周期!");
            }
            else
            {
                IsActive = true;
                string command      = string.Empty;
                string querySql     = string.Empty;
                long?  task_id      = 0;
                string ttime        = string.Empty;
                string thour        = string.Empty;
                string phone_number = string.Empty;
                string tableName    = string.Empty;
                string filePath     = string.Empty;
                string operate_type = "5";
                int    step_no      = 1;
                try
                {
                    DbConnection conn;
                    switch (DbType)
                    {
                    case "MsSql":
                        conn = new SqlConnection(DbConnString);
                        //querySql = @"select task_id,list_order,UTCstr,logtime,logmillisecond,MSISDN from sig_ue_mr_top200_plan";
                        break;

                    default:
                        conn = new MySqlConnection(DbConnString);
                        //querySql = @"select task_id,list_order,UTCstr,logtime,logmillisecond,MSISDN from sig_ue_mr_top200_plan";
                        break;
                    }
                    using (conn)
                    {
                        try
                        {
                            conn.Open();
                            var cmd = conn.CreateCommand();
                            cmd.CommandType = System.Data.CommandType.Text;
                            TableEntity.sig_ue_mr_top200_job sig_ue_mr_top200_job = new TableEntity.sig_ue_mr_top200_job();
                            sig_ue_mr_top200_job = topService.Query("select * from sig_ue_mr_top200_job where completeTime is null or completeTime='' order by createTime limit 1");
                            if (sig_ue_mr_top200_job != null)
                            {
                                //更新任务状态
                                sig_ue_mr_top200_job.state = ExecStatus.运算中.ToString();
                                topService.Update(sig_ue_mr_top200_job);

                                cmd.CommandText = @"drop table if exists sig_ue_mr_top200_plan_tmp";
                                cmd.ExecuteNonQuery();

                                cmd.CommandText = @"create table sig_ue_mr_top200_plan_tmp(task_id int,list_order int,
                                                                  UTCstr nvarchar(20),
                                                                  logtime nvarchar(22),
                                                                  logmillisecond nvarchar(10),
                                                                  MSISDN nvarchar(15))";
                                cmd.ExecuteNonQuery();
                                //选取数据到临时表
                                cmd.CommandText = string.Format(@"insert into sig_ue_mr_top200_plan_tmp select task_id,list_order,UTCstr,logtime,logmillisecond,MSISDN from sig_ue_mr_top200_plan where task_id={0}", sig_ue_mr_top200_job.task_id);
                                cmd.ExecuteNonQuery();


                                querySql           = string.Format(@"select task_id,list_order,UTCstr,logtime,logmillisecond,MSISDN from sig_ue_mr_top200_plan_tmp where task_id={0}", sig_ue_mr_top200_job.task_id);
                                cmd.CommandText    = querySql;
                                cmd.CommandTimeout = 0;
                                var reader = cmd.ExecuteReader();
                                if (reader.HasRows)
                                {
                                    List <string> arguments = new List <string>()
                                    {
                                    };
                                    StringBuilder str = new StringBuilder();
                                    while (reader.Read())
                                    {
                                        task_id = reader.GetInt64(0);
                                        str.Append(reader.GetString(5));
                                        str.Append(",");
                                        str.Append(reader.GetString(2));
                                        str.Append("|");
                                    }
                                    str.Remove(str.Length - 1, 1);
                                    phone_number = str.ToString();
                                    ShellName.Split(";").ToList().ForEach(shell =>
                                    {
                                        arguments.Add($"{shell} {ttime} {thour} {phone_number} {filePath} {operate_type}");
                                    });
                                    conn.Close();

                                    Logger.Info($"[BeforeShellSql:]-- {BeforeShellSql}");
                                    if (!string.IsNullOrEmpty(BeforeShellSql))
                                    {
                                        conn.Open();
                                        cmd.CommandText = BeforeShellSql.Replace("@select_date", ttime);//替换日期占位符


                                        //记录日志到数据表
                                        var step_1 = logService.Insert(new TableEntity.SingleUserAnalysisHistoryInfo()
                                        {
                                            col_create_time = DateTime.Now,
                                            error_msg       = "",                                  //异常信息
                                            run_status      = RunStatus.执行中.ToString(),
                                            spend_time      = 0,                                   //耗时
                                            step_name       = "(BeforeShellSql)执行shell脚本之前的sql脚本", //步骤名称
                                            step_no         = step_no,                             //步骤编号
                                            step_remark     = "",                                  //备注
                                            task_detail_id  = task_id ?? 0                         //task_id
                                        });
                                        stopwatch.Restart();                                       //计时器开始
                                        int asqResult = 0;

                                        try
                                        {
                                            asqResult = cmd.ExecuteNonQuery();
                                            Logger.Info($" {asqResult} 行受影响");
                                        }
                                        catch (Exception ex)
                                        {
                                            step_1.error_msg = ex.Message;
                                        }

                                        stopwatch.Stop();//计时器停止
                                        step_1.run_status  = RunStatus.已执行.ToString();
                                        step_1.step_remark = $" {asqResult} 行受影响";
                                        step_1.spend_time  = (int)stopwatch.Elapsed.TotalSeconds;
                                        logService.Update(step_1);

                                        conn.Close();
                                    }
                                    Logger.Info($"--------------开始执行SHELL命令--------------");

                                    arguments.ForEach(argument =>
                                    {
                                        step_no++;
                                        //执行shell脚本
                                        Logger.Info($"/bin/bash {argument}");
                                        //记录日志到数据表
                                        var step_2 = logService.Insert(new TableEntity.SingleUserAnalysisHistoryInfo()
                                        {
                                            col_create_time = DateTime.Now,
                                            error_msg       = "",                          //异常信息
                                            run_status      = RunStatus.执行中.ToString(),
                                            spend_time      = 0,                           //耗时
                                            step_name       = "执行shell脚本,脚本参数" + argument, //步骤名称
                                            step_no         = step_no,                     //步骤编号
                                            step_remark     = "",                          //备注
                                            task_detail_id  = task_id ?? 0                 //task_id
                                        });
                                        stopwatch.Restart();                               //计时器开始

                                        var result = ShellUtil.ExecuteCommand("/bin/bash", argument, null);

                                        stopwatch.Stop();//计时器停止
                                        step_2.run_status   = RunStatus.已执行.ToString();
                                        step_2.step_remark += "执行结果:" + (result.Item1 == true ? "无错误" : string.Concat("有错误,", result.Item2));
                                        step_2.spend_time   = (int)stopwatch.Elapsed.TotalSeconds;
                                        logService.Update(step_2);
                                    });
                                    Logger.Info($"--------------执行SHELL命令完成--------------");

                                    Logger.Info($"[AfterShellSql:]-- {AfterShellSql}");
                                    if (!string.IsNullOrEmpty(AfterShellSql))
                                    {
                                        conn.Open();
                                        cmd.CommandText = AfterShellSql.Replace("@select_date", ttime).Replace("@select_hour", thour);//替换日期占位符

                                        //记录日志到数据表
                                        var step_3 = logService.Insert(new TableEntity.SingleUserAnalysisHistoryInfo()
                                        {
                                            col_create_time = DateTime.Now,
                                            error_msg       = "",                                 //异常信息
                                            run_status      = RunStatus.执行中.ToString(),
                                            spend_time      = 0,                                  //耗时
                                            step_name       = "(AfterShellSql)执行shell脚本之后的sql脚本", //步骤名称
                                            step_no         = step_no,                            //步骤编号
                                            step_remark     = "",                                 //备注
                                            task_detail_id  = task_id ?? 0                        //task_id
                                        });
                                        stopwatch.Restart();                                      //计时器开始
                                        int asqResult = 0;

                                        try
                                        {
                                            asqResult = cmd.ExecuteNonQuery();
                                            Logger.Info($" {asqResult} 行受影响");
                                        }
                                        catch (Exception ex)
                                        {
                                            step_3.error_msg = ex.Message;
                                        }

                                        stopwatch.Stop();//计时器停止
                                        step_3.run_status  = RunStatus.已执行.ToString();
                                        step_3.step_remark = $" {asqResult} 行受影响";
                                        step_3.spend_time  = (int)stopwatch.Elapsed.TotalSeconds;
                                        logService.Update(step_3);

                                        conn.Close();
                                    }

                                    step_no++;
                                    //记录日志到数据表
                                    var step_4 = logService.Insert(new TableEntity.SingleUserAnalysisHistoryInfo()
                                    {
                                        col_create_time = DateTime.Now,
                                        error_msg       = "",             //异常信息
                                        run_status      = RunStatus.执行中.ToString(),
                                        spend_time      = 0,              //耗时
                                        step_name       = "查询完成,并更新任务状态", //步骤名称
                                        step_no         = step_no,        //步骤编号
                                        step_remark     = "",             //备注
                                        task_detail_id  = task_id ?? 0    //task_id
                                    });
                                    stopwatch.Restart();                  //计时器开始
                                    sig_ue_mr_top200_job.completeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ms");
                                    sig_ue_mr_top200_job.state        = ExecStatus.已完成.ToString();
                                    topService.Update(sig_ue_mr_top200_job);
                                    stopwatch.Stop();//计时器停止
                                    step_4.run_status  = RunStatus.已执行.ToString();
                                    step_4.step_remark = "Top200用户批量UE_MR查询完成";
                                    step_4.spend_time  = (int)stopwatch.Elapsed.TotalSeconds;
                                    logService.Update(step_4);
                                    if (!string.IsNullOrEmpty(AutoDelete))
                                    {
                                        Logger.Info($"[DeleteOldData:task_id]-- {task_id}");
                                        conn.Open();
                                        cmd.CommandText = string.Format(@"delete from sig_ue_mr_top200_plan where task_id={0}", task_id);
                                        cmd.ExecuteNonQuery();
                                        Logger.Info($"[DeleteOldData:task_id]--completed");
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Logger.Error(ex);
                        }
                        finally
                        {
                            conn.Close();
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logger.Error(ex);
                }
                finally
                {
                    IsActive = false;
                }
            }
            return(TaskUtil.CompletedTask);
        }
示例#19
0
        void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            TradeTask tradeTask = (TradeTask)e.Argument;

            int           total_num  = tradeTask.totalNum;
            string        shopNick   = tradeTask.shopNic;
            string        sessionKey = tradeTask.sessionKey;
            List <string> tidList    = tradeTask.ShopTradeList;

            int CurrentNum          = 0;
            BackgroundWorker worker = (BackgroundWorker)sender;

            //用于记录下载失败的订单信息
            failedTrade = new FailedTrade();
            //买家昵称列表
            List <string> buyerNickList = new List <string>();

            for (int i = 0; i < tidList.Count; i++)
            {
                /*线程取消*/
                if (worker.CancellationPending)
                {
                    e.Cancel = true;
                    break;
                }

                try
                {
                    TradeRsp fullinfoTraderspReturn = TopService.TradeFullinfoGet(sessionKey, tidList[i]);

                    if (fullinfoTraderspReturn == null || fullinfoTraderspReturn.Trade == null)
                    {
                        //加锁
                        lock (lockObject)
                        {
                            /*记录下载失败的交易*/
                            failedTrade.tidList.Add(tidList[i]);
                            failedTrade.sessionKey = sessionKey;
                            failedTrade.shopNick   = shopNick;
                        }

                        UserState stateFail = new UserState();
                        stateFail.taskIndex = tradeTask.threadIndex;
                        stateFail.tidIndex  = i + 1;
                        stateFail.tid       = tidList[i];
                        ProcessRecord++;
                        currentProessNum++;
                        stateFail.message = "交易获取失败!";
                        /*订单下载失败*/
                        worker.ReportProgress(-1, stateFail);/*下载失败*/
                        continue;
                    }

                    UserState stateSuccess = new UserState();
                    stateSuccess.taskIndex = tradeTask.threadIndex;
                    stateSuccess.tidIndex  = i + 1;
                    currentProessNum++;

                    stateSuccess.tid = tidList[i];
                    stateSuccess.currentProessNum = (int)((currentProessNum * 100) / (float)total_num);
                    ProcessRecord++;
                    stateSuccess.totalProcessNum = (int)((ProcessRecord * 100) / (float)TotalProessNum);
                    worker.ReportProgress(stateSuccess.currentProessNum, stateSuccess);/*下载成功*/

                    Alading.Taobao.Entity.Trade fullinfoTradersp = fullinfoTraderspReturn.Trade;

                    if (TradeService.AddTradeOrderBuyer(fullinfoTradersp) != ReturnType.Success)
                    {
                        UserState SaveFailState = new UserState();
                        SaveFailState.shopNick = shopNick;
                        SaveFailState.message  = "保存失败!";
                        worker.ReportProgress(1, SaveFailState);/*参数2:表示保存失败*/
                    }
                }/*try*/
                catch (System.Exception ex)
                {
                    ProcessRecord++;
                    currentProessNum++;
                    //加锁
                    lock (lockObject)
                    {
                        /*记录下载失败的交易*/
                        failedTrade.tidList.Add(tidList[i]);
                        failedTrade.sessionKey = sessionKey;
                        failedTrade.shopNick   = shopNick;
                    }

                    UserState exceptionState = new UserState();
                    exceptionState.message   = ex.Message.ToString();
                    exceptionState.taskIndex = tradeTask.threadIndex;
                    exceptionState.tidIndex  = i + 1;
                    exceptionState.tid       = tidList[i];
                    worker.ReportProgress(-1, exceptionState);
                }
            }/*for 对tid遍历*/

            e.Result = tradeTask.threadIndex;
        }
示例#20
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;
        }
示例#21
0
        void mainWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                BackgroundWorker worker = sender as BackgroundWorker;
                //threadCount = Convert.ToInt32(spinEditThreadCount.Value);//这里不必要了,在点击按钮时已经赋值
                int pageSize = 40;

                for (int k = 0; k < downShopList.Count; k++)
                {
                    var shop = downShopList[k];

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

                    ReportState state = new ReportState()
                    {
                        Current = k + 1,
                        Total   = downShopList.Count,
                        Message = string.Format("正在同步店铺 {0} 的客户...", shop.title),
                    };

                    worker.ReportProgress(1, state);

                    #region initialize query time

                    DateTime begin = DateTime.Now;
                    DateTime end   = DateTime.Now;

                    switch (typeIndex)
                    {
                    // 15 days
                    case 0:
                        begin = DateTime.Now.AddDays(-15);
                        break;

                    // customize
                    case 1:
                        begin = this.dateEditBegin.DateTime;
                        end   = this.dateEditEnd.DateTime;
                        break;

                    // since shop created
                    case 2:
                        begin = shop.created;
                        break;
                    }

                    #endregion

                    #region Get total trade count

                    TradeReq request = new TradeReq();
                    request.Status       = null;
                    request.PageSize     = pageSize;
                    request.PageNo       = 1;
                    request.StartCreated = begin.ToString("yyyy-MM-dd HH:mm:ss");
                    request.EndCreated   = end.ToString("yyyy-MM-dd HH:mm:ss");

                    string   sessionkey = SystemHelper.GetSessionKey(shop.nick);
                    TradeRsp response   = TopService.TradesSoldGet(sessionkey, request);

                    sub_done  = 0;
                    sub_total = response.TotalResults;

                    #endregion

                    if (sub_total == 0)
                    {
                        continue;
                    }

                    #region Dispatch task to thread

                    threadList.Clear();

                    if (sub_total <= pageSize)
                    {
                        #region total count < page size

                        SycTaskArgs task = new SycTaskArgs
                        {
                            ShopNick       = shop.nick,
                            PageSize       = pageSize,
                            QueryBeginTime = begin,
                            QueryEndTime   = end,
                        };
                        task.PageNoList.Add(1);

                        BackgroundWorker w = new BackgroundWorker
                        {
                            WorkerReportsProgress      = true,
                            WorkerSupportsCancellation = true,
                        };
                        w.RunWorkerCompleted += new RunWorkerCompletedEventHandler(w_RunWorkerCompleted);
                        w.ProgressChanged    += new ProgressChangedEventHandler(w_ProgressChanged);
                        w.DoWork             += new DoWorkEventHandler(w_DoWork);

                        taskList.Add(task);
                        threadList.Add(w);

                        threadCount = 1;

                        #endregion
                    }
                    else
                    {
                        int pageCount = (sub_total % pageSize == 0) ? (sub_total / pageSize) : (sub_total / pageSize + 1);

                        if (threadCount < pageCount)
                        {
                            #region page count < thread count

                            threadCount = pageCount;

                            for (int i = 0; i < threadCount; i++)
                            {
                                SycTaskArgs task = new SycTaskArgs
                                {
                                    ShopNick       = shop.nick,
                                    PageSize       = 40,
                                    QueryBeginTime = begin,
                                    QueryEndTime   = end,
                                };
                                task.PageNoList.Add(i + 1);

                                BackgroundWorker w = new BackgroundWorker
                                {
                                    WorkerReportsProgress      = true,
                                    WorkerSupportsCancellation = true,
                                };

                                w.RunWorkerCompleted += new RunWorkerCompletedEventHandler(w_RunWorkerCompleted);
                                w.ProgressChanged    += new ProgressChangedEventHandler(w_ProgressChanged);
                                w.DoWork             += new DoWorkEventHandler(w_DoWork);

                                taskList.Add(task);
                                threadList.Add(w);
                            }

                            #endregion
                        }
                        else
                        {
                            #region page count > thread count

                            for (int i = 0; i < threadCount; i++)
                            {
                                SycTaskArgs task = new SycTaskArgs
                                {
                                    ShopNick       = shop.nick,
                                    PageSize       = 40,
                                    QueryBeginTime = begin,
                                    QueryEndTime   = end,
                                };

                                BackgroundWorker w = new BackgroundWorker
                                {
                                    WorkerReportsProgress      = true,
                                    WorkerSupportsCancellation = true,
                                };

                                w.RunWorkerCompleted += new RunWorkerCompletedEventHandler(w_RunWorkerCompleted);
                                w.ProgressChanged    += new ProgressChangedEventHandler(w_ProgressChanged);
                                w.DoWork             += new DoWorkEventHandler(w_DoWork);

                                taskList.Add(task);
                                threadList.Add(w);
                            }

                            int index = 0;
                            for (int i = 0; i < pageCount; i++, index++)
                            {
                                if (index >= taskList.Count)
                                {
                                    index = 0;
                                }
                                taskList[i].PageNoList.Add(i + 1);
                            }

                            #endregion
                        }
                    }

                    #endregion

                    #region run tasks

                    signal = new AutoResetEvent(false);

                    for (int i = 0; i < threadCount; i++)
                    {
                        threadList[i].RunWorkerAsync(taskList[i]);
                    }

                    signal.WaitOne();

                    #endregion
                }
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(ex.Message);
            }
        }
示例#22
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);
            }
        }