Esempio n. 1
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);
        }
Esempio n. 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);
            }
        }
Esempio n. 3
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);
            }
        }
Esempio n. 4
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
                    }
                }
            }
        }
Esempio n. 5
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;
        }
Esempio n. 6
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 对店铺遍历*/
        }