Example #1
0
        public int InsertUpdateReview(Review review)
        {
            IItemDBManager itemDBManager = new ItemDBManager();

            itemDBManager.InsertUpdateReview(review);
            return(1);
        }
Example #2
0
        public ItemReviewResponse GetReviewsWineID(int WineId)
        {
            ItemReviewResponse itemReviewResponse = new ItemReviewResponse();
            IList <Review>     raingList          = new List <Review>();
            IItemDBManager     itemDBManager      = new ItemDBManager();
            IList <RetrieveReviewsByWineIdResult> reviewsSKUresult = itemDBManager.GetReviewsWineID(WineId).ToList();

            foreach (RetrieveReviewsByWineIdResult result in reviewsSKUresult)
            {
                raingList.Add(new Review
                {
                    SKU          = Convert.ToInt32(result.SKU),
                    RatingStars  = result.RatingStars,
                    Date         = Convert.ToDateTime(result.Date),
                    Username     = result.UserName.ToString(),
                    Name         = result.Name,
                    Vintage      = result.Vintage.ToString(),
                    Region       = result.Region,
                    Country      = result.Country,
                    RatingText   = result.RatingText,
                    ReviewId     = result.ReviewId,
                    WineId       = result.WineId,
                    ReviewUserId = Convert.ToInt32(result.ReviewUserId)
                });
            }
            itemReviewResponse.Reviews = raingList;
            return(itemReviewResponse);
        }
Example #3
0
        public int UpdateCustomer(Customer CustomerObj)
        {
            IItemDBManager itemDBManager = new ItemDBManager();
            int            ret           = itemDBManager.UpdateCustomerDetails(CustomerObj);

            return(ret);
        }
Example #4
0
        public ItemListResponse GetItemList(int plantFinal, int userid)
        {
            ItemListResponse itemListResponse = new ItemListResponse();
            List <Item>      itemList         = new List <Item>();

            IItemDBManager itemDBManager = new ItemDBManager();
            IList <RetrieveAvailableWinesResult> wineResults = itemDBManager.GetLists(plantFinal, userid).ToList();

            foreach (RetrieveAvailableWinesResult result in wineResults)
            {
                itemList.Add(new Item
                {
                    SKU           = result.SKU,
                    Name          = result.Name,
                    Region        = result.Region,
                    Country       = result.Country,
                    SalePrice     = Convert.ToDouble(result.SalePrice),
                    RegPrice      = Convert.ToDouble(result.RegPrice),
                    AverageRating = Convert.ToDecimal(result.AverageRating),
                    IsLike        = Convert.ToBoolean(result.Liked),
                    SmallImageUrl = result.SmallImageURL,
                    Vintage       = result.Vintage,
                    WineId        = Convert.ToInt32(result.WineId),
                    DispenserCode = Convert.ToInt32(result.DispenserCode),
                    PositionTap   = Convert.ToInt32(result.PositionTap)
                });
            }
            itemListResponse.ItemList = itemList;
            return(itemListResponse);
        }
Example #5
0
        public TastingListResponse GetMyTastingsList(int customerID)
        {
            TastingListResponse respObj = new TastingListResponse();
            List <Tastings>     itemObj = new List <Tastings>();

            respObj.TastingList = itemObj;

            IItemDBManager dbObj = new ItemDBManager();
            IList <RetrieveMyTastingsResult> wineDetailsObj = dbObj.GetMyTastings(customerID);

            if (wineDetailsObj != null)
            {
                foreach (RetrieveMyTastingsResult resultObj in wineDetailsObj)
                {
                    itemObj.Add(new Tastings
                    {
                        SKU         = resultObj.SKU.ToString(),
                        Name        = resultObj.Name,
                        Vintage     = Convert.ToInt32(resultObj.Vintage),
                        SalePrice   = Convert.ToDouble(resultObj.SalePrice),
                        RegPrice    = Convert.ToDouble(resultObj.RegPrice),
                        Description = resultObj.Description,
                        TastingDate = resultObj.TastingDate
                    });
                }
                respObj.TastingList = itemObj;
            }
            return(respObj);
        }
Example #6
0
        public int UpdateDeviceToken(int CustomerId, string DeviceToken)
        {
            IItemDBManager itemDBManager = new ItemDBManager();
            int            ret           = itemDBManager.UpdateDeviceToken(CustomerId, DeviceToken);

            return(ret);
        }
Example #7
0
        public int UpdateVerfiedEmail(string activationCode)
        {
            IItemDBManager itemDBManager = new ItemDBManager();

            itemDBManager.UpdateVerfiedEmail(activationCode);
            return(1);
        }
Example #8
0
        public CustomerResponse GetCustomerDetails(int CustomerID)
        {
            CustomerResponse respObj = new CustomerResponse();
            Customer         CustObj = new Customer();

            respObj.customer = CustObj;
            IItemDBManager dbObj = new ItemDBManager();
            IList <RetrieveProfileDetailsResult> CustomerDetailsObj = dbObj.GetCustomerDetails(CustomerID);

            if (CustomerDetailsObj != null)
            {
                foreach (RetrieveProfileDetailsResult result in CustomerDetailsObj)
                {
                    CustObj = new Customer
                    {
                        CustomerID     = Convert.ToInt32(result.CustomerID),
                        FirstName      = result.FirstName,
                        LastName       = result.LastName,
                        PhoneNumber    = result.PhoneNumber,
                        Phone2         = result.Phone2,
                        Email          = result.Email,
                        Address1       = result.Address1,
                        Address2       = result.Address2,
                        City           = result.City,
                        State          = result.State,
                        CustomerType   = result.CustomerType,
                        CustsomerAdded = Convert.ToDateTime(result.CustomerAdded),
                        CardNumber     = result.CardNumber,
                        Notes1         = result.Notes1
                    };
                }
            }
            respObj.customer = CustObj;
            return(respObj);
        }
Example #9
0
        public ItemListResponse GetItemFavsUID(int userId)
        {
            ItemListResponse respObj = new ItemListResponse();
            List <Item>      itemObj = new List <Item>();

            respObj.ItemList = itemObj;

            IItemDBManager dbObj = new ItemDBManager();
            IList <RetrieveFavouriteWinesByUserIdResult> wineDetailsObj = dbObj.GetItemFavsUID(userId);

            if (wineDetailsObj.Any())
            {
                foreach (RetrieveFavouriteWinesByUserIdResult resultObj in wineDetailsObj)
                {
                    itemObj.Add(new Item
                    {
                        SKU           = resultObj.SKU.ToString(),
                        Name          = resultObj.Name,
                        Vintage       = resultObj.Vintage,
                        SalePrice     = Convert.ToDouble(resultObj.SalePrice),
                        RegPrice      = Convert.ToDouble(resultObj.RegPrice),
                        IsLike        = Convert.ToBoolean(resultObj.Liked),
                        WineId        = Convert.ToInt32(resultObj.WineId),
                        AverageRating = Convert.ToInt32(resultObj.AverageRating)
                    });
                }
                respObj.ItemList = itemObj;
            }
            return(respObj);
        }
        private Item GetNextJob()
        {
            Item item = ItemDBManager.GetNextRepostTrackingJob();

            if (item == null)
            {
                return(null);
            }
            item.Tracking_Forward.FollowStatus = Enums.CrawlStatus.Crawling;
            ItemDBManager.UpdateDB <Item>(item, "ItemID", new Tuple <string, BsonValueType>[] { new Tuple <string, BsonValueType>("Tracking_Forward", BsonValueType.Document) }, MongoDB.Driver.SafeMode.False);
            return(item);
        }
Example #11
0
        public int InsertActivationCode(string activationCode, string email)
        {
            int            retObj        = 0;
            IItemDBManager itemDBManager = new ItemDBManager();
            IList <InsertActivationCodeResult> resultObj = itemDBManager.InsertActivationCode(activationCode, email);

            foreach (InsertActivationCodeResult i in resultObj)
            {
                retObj = i.RowCounts;
            }
            return(retObj);
        }
Example #12
0
        public ItemDetailsResponse GetItemDetails(int WineId)
        {
            ItemDetailsResponse itemDetailsResponse = new ItemDetailsResponse();
            ItemDetails         itemDetailsList     = new ItemDetails();


            itemDetailsResponse.ItemDetails = itemDetailsList;

            #region DB Interaction

            IItemDBManager itemDBManager = new ItemDBManager();
            IList <RetrieveWineDetailsResult> wineDetailsResults = itemDBManager.GetDetails(WineId).ToList();

            if (wineDetailsResults.Any())
            {
                foreach (RetrieveWineDetailsResult result in wineDetailsResults)
                {
                    itemDetailsList = new ItemDetails
                    {
                        SKU           = result.SKU.ToString(),
                        Name          = result.Name,
                        Region        = result.Region,
                        Country       = result.Country,
                        SalePrice     = Convert.ToDouble(result.SalePrice),
                        RegPrice      = Convert.ToDouble(result.RegPrice),
                        AverageRating = Convert.ToDecimal(result.AverageRating),
                        IsLike        = Convert.ToBoolean(result.Liked),
                        LargeImageUrl = result.LargeImageUrl,
                        //Sub_Region = result.Sub_Region,
                        //GrapeVerietal = result.GrapeVerietal,
                        Vintage        = Convert.ToInt32(result.Vintage),
                        UsersRating    = Convert.ToDecimal(result.UsersRating),
                        Description    = result.Description,
                        WineProperties = new Dictionary <string, string>(),
                        WineId         = Convert.ToInt32(result.WineId)
                                         //Type = result.Type,
                                         //BottleSize = result.BottleSize.ToString(),
                                         //Tasting_Notes = result.t,
                                         //Alcohol_Levels = result.Alcohol_Levels,
                                         //Food_Pairings = result.Food_Pairings,
                                         //ServingAt = result.ServingAt,
                                         //WineMakerNotes = result.WineMakerNotes,
                                         //TechnicalNotes = result.TechnicalNotes,
                                         //Notes = result.Notes,
                                         //OtherText = result.OtherText,
                                         //Producer = result.Producer
                    };
                }
                itemDetailsResponse.ItemDetails = itemDetailsList;
            }
            #endregion
            return(itemDetailsResponse);
        }
Example #13
0
 public int DeleteReview(int WineId, int reviewUserId)
 {
     try
     {
         IItemDBManager itemDBManager = new ItemDBManager();
         itemDBManager.DeleteReview(WineId, reviewUserId);
         return(1);
     }
     catch (Exception ex)
     {
         return(0);
     }
 }
Example #14
0
        public CustomerResponse AuthenticateUser1(string Email)
        {
            CustomerResponse respObj                  = new CustomerResponse();
            Customer         userObj                  = new Customer();
            IItemDBManager   itemDBManager            = new ItemDBManager();
            IList <AuthenticateUser1Result> resultObj = itemDBManager.AuthenticateUser1(Email).ToList();

            if (resultObj != null)
            {
                foreach (AuthenticateUser1Result result in resultObj)
                {
                    userObj = new Customer
                    {
                        CustomerID = Convert.ToInt32(result.CustomerID),
                        FirstName  = result.FirstName
                    };
                }
            }
            respObj.customer = userObj;
            return(respObj);
        }
Example #15
0
        public string DoOneJob(IPipeline Pipeline)
        {
            int      SuccCount = 0, ErrCount = 0;
            DateTime nextWorkTime = Utilities.Epoch;


            while (!StopFlag)
            {
                if (DateTime.Now > nextWorkTime)
                {
                    Author author = GetNextJob();
                    if (author != null)
                    {
                        try
                        {
                            author.RefreshStatus = Enums.CrawlStatus.Stop;

                            try
                            {
                                SendMsg(string.Format("正在更新用户{0}的个人信息", author.AuthorName));
                                //更新用户个人信息
                                NetDimension.Weibo.Entities.user.Entity user = WeiboAPI.GetAuthorInfo(author.AuthorID);
                                var author_new = AuthorDBManager.ConvertToAuthor(user, author.AuthorSource);
                                AuthorDBManager.InsertOrUpdateAuthorInfo(author);
                            }
                            catch (IOException)
                            {
                                ErrCount++;
                                nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                            }
                            catch (Exception ex)
                            {
                                SendMsg("获取个人信息时发生错误,见日志");
                                ErrCount++;
                                nextWorkTime         = WeiboAPI.rateLimitStatus.ResetTime;
                                author.RefreshStatus = Enums.CrawlStatus.Normal;
                                Logger.Error(ex.ToString());
                            }

                            SendMsg(string.Format("用户{0}的个人信息更新完毕,开始刷新其最新微博", author.AuthorName));
                            List <NetDimension.Weibo.Entities.status.Entity> result = new List <NetDimension.Weibo.Entities.status.Entity>();
                            try
                            {
                                //获取最新若干微博
                                WeiboAPI.GetAuthorLatestStatus(author, result, author.PostSampleMethode);
                            }
                            catch (IOException)
                            {
                                ErrCount++;
                                nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                            }
                            catch (Exception ex)
                            {
                                SendMsg("获取最新微博时发生错误,见日志");
                                ErrCount++;
                                nextWorkTime         = WeiboAPI.rateLimitStatus.ResetTime;
                                author.RefreshStatus = Enums.CrawlStatus.Normal;
                                Logger.Error(ex.ToString());
                            }

                            SendMsg(string.Format("找到{0}的{1}条最新微博,开始插入数据库并统计相关信息", author.AuthorName, result.Count));
                            //同时更新平均转发数和评论数
                            double avgForward = 0, avgReply = 0;
                            for (int i = 0; i < result.Count; ++i)
                            {
                                avgForward += (double)result[i].RepostsCount / (double)result.Count;
                                avgReply   += (double)result[i].CommentsCount / (double)result.Count;
                                var item = ItemDBManager.ConvertToItem(result[i], author.AuthorSource, CrawlID);
                                ItemDBManager.InsertOrUpdateItem(item);
                                CntData.Tick();
                            }

                            author.AvgForward = (int)avgForward;
                            author.AvgReply   = (int)avgReply;
                            SuccCount++;
                            continue;
                        }
                        catch (Exception ex)
                        {
                            ErrCount++;
                            nextWorkTime         = WeiboAPI.rateLimitStatus.ResetTime;
                            author.RefreshStatus = Enums.CrawlStatus.Normal;
                            SendMsg(ex.ToString());
                        }
                        finally
                        {
                            author.UpdateCount++;
                            author.UpdateTime      = DateTime.Now;
                            author.NextRefreshTime = author.UpdateTime.AddDays(author.IntervalDays);
                            AuthorDBManager.PushbackCensusJob(author);
                            SendMsg(string.Format("用户{0}的普查任务完成", author.AuthorName));
                        }
                    }
                }
                SendMsg(string.Format("休息{0}秒", IntervalMS / 1000));
                Thread.Sleep(IntervalMS);
            }
            StopFlag = false;
            return(SuccCount == 0 && ErrCount == 0 ? "Nothing to do" : string.Format("OneJob Done. Succ {0} Err {1}", SuccCount, ErrCount));
        }
        public string DoOneJob(IPipeline Pipeline)
        {
            int      SuccCount = 0, ErrCount = 0;
            DateTime nextWorkTime = Utilities.Epoch;


            while (!StopFlag)
            {
                if (DateTime.Now > nextWorkTime)
                {
                    LoginAccountEntity account = GetNextJob();
                    if (account != null)
                    {
                        try
                        {
                            //刷新订阅的微博
                            List <NetDimension.Weibo.Entities.status.Entity> result = new List <NetDimension.Weibo.Entities.status.Entity>();
                            try
                            {
                                SendMsg(string.Format("正在刷新{0}关注的最新微博", account.UserName));
                                WeiboAPI.FetchStatus(account, result);
                            }
                            catch (IOException)
                            {
                                ErrCount++;
                                nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                            }
                            catch (Exception ex)
                            {
                                SendMsg("获取新微博时发生错误,见日志");
                                ErrCount++;
                                nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                                SendMsg(ex.ToString());
                                Logger.Error(ex.ToString());
                            }

                            SendMsg(string.Format("{0}关注的微博抓取到{1}条,开始插入", account.UserName, result.Count));
                            for (int i = 0; i < result.Count; ++i)
                            {
                                var item = ItemDBManager.ConvertToItem(result[i], Enums.AuthorSource.PublicLeader, CrawlID);
                                ItemDBManager.InsertOrUpdateItem(item);
                                CntData.Tick();
                            }

                            SendMsg(string.Format("{0}的关注微博刷新任务完成", account.UserName));
                            SuccCount++;
                            continue;
                        }
                        catch (Exception ex)
                        {
                            ErrCount++;
                            nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                            SendMsg(ex.ToString());
                            Logger.Error(ex.ToString());
                        }
                        finally
                        {
                            AccountDBManager.PushbackSubscribeJob(account);
                        }
                    }
                }
                SendMsg(string.Format("休息{0}秒", IntervalMS / 1000));
                Thread.Sleep(IntervalMS);
            }
            StopFlag = false;
            return(SuccCount == 0 && ErrCount == 0 ? "Nothing to do" : string.Format("OneJob Done. Succ {0} Err {1}", SuccCount, ErrCount));
        }
Example #17
0
        public string DoOneJob(IPipeline Pipeline)
        {
            int      SuccCount = 0, ErrCount = 0;
            DateTime nextWorkTime = Utilities.Epoch;


            while (!StopFlag)
            {
                if (DateTime.Now > nextWorkTime)
                {
                    Location loc = GetNextJob();
                    if (loc != null)
                    {
                        try
                        {
                            DateTime lastTime = loc.LastRefreshTime;
                            loc.LastRefreshTime = DateTime.Now;
                            loc.NextRefreshTime = DateTime.Now.AddMinutes(loc.IntervalMins);
                            //获取CBD周围的人
                            List <dynamic> users    = new List <dynamic>();
                            List <dynamic> statuses = new List <dynamic>();

                            try
                            {
                                SendMsg(string.Format("正在刷新{0}周围的位置动态", loc.Title));
                                WeiboAPI.GetUsersNearCBD(loc.Lon, loc.Lat, loc.Radius, Utilities.DateTime2UnixTime(lastTime), Utilities.DateTime2UnixTime(DateTime.Now), loc.LocationSampleMethode, users, statuses);
                            }
                            catch (IOException)
                            {
                                ErrCount++;
                                nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                            }
                            catch (WeiboException ex)
                            {
                                SendMsg("获取CBD周围动态时发生错误,见日志");
                                ErrCount++;
                                nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                                Logger.Error(ex.ToString());
                            }

                            SendMsg(string.Format("{0}的位置动态获取到{1}条,开始插入数据库", loc.Title, users.Count()));
                            for (int i = 0; i < users.Count; ++i)
                            {
                                if (i >= statuses.Count)
                                {
                                    break;
                                }
                                if (statuses[i] == null || users[i] == null)
                                {
                                    continue;
                                }
                                Item item = ItemDBManager.ConvertToItem(Enums.AuthorSource.LocationScan, CrawlID, statuses[i], users[i]);
                                if (item.PoID == null)
                                {
                                    item.PoID = item.PoIDSource = loc.CategoryID;
                                }
                                ItemDBManager.InsertOrUpdateItem(item);
                                Author author = AuthorDBManager.ConvertToAuthor(users[i], Enums.AuthorSource.LocationScan);
                                AuthorDBManager.InsertOrUpdateAuthorInfo(author);
                                CntData.Tick();
                            }

                            SuccCount++;
                            SendMsg(string.Format("{0}的任务完成", loc.Title));
                            continue;
                        }
                        catch (Exception ex)
                        {
                            ErrCount++;
                            nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                            SendMsg(ex.ToString());
                            Logger.Error(ex.ToString());
                        }
                        finally
                        {
                            loc.RefreshCount++;
                            loc.RefreshStatus = Enums.CrawlStatus.Normal;
                            LocationDBManager.PushbackLoationJob(loc);
                        }
                    }
                }
                SendMsg(string.Format("休息{0}秒", IntervalMS / 1000));
                Thread.Sleep(IntervalMS);
            }
            StopFlag = false;
            return(SuccCount == 0 && ErrCount == 0 ? "Nothing to do" : string.Format("OneJob Done. Succ {0} Err {1}", SuccCount, ErrCount));
        }
Example #18
0
    static void Init()
    {
        ItemDBManager window = (ItemDBManager)EditorWindow.CreateInstance(typeof(ItemDBManager));

        window.Show();
    }
Example #19
0
        public int InsertUpdateSKULike(SKULike skuLike)
        {
            IItemDBManager itemDBManager = new ItemDBManager();

            return(itemDBManager.InsertUpdateSKULike(skuLike));
        }
Example #20
0
        public string DoOneJob(IPipeline Pipeline)
        {
            int      SuccCount = 0, ErrCount = 0;
            DateTime nextWorkTime = Utilities.Epoch;


            while (!StopFlag)
            {
                if (DateTime.Now > nextWorkTime)
                {
                    Author author = GetNextJob();
                    if (author != null)
                    {
                        try
                        {
                            //获取最新若干带有地点信息的微博
                            List <dynamic> result = new List <dynamic>();
                            try
                            {
                                SendMsg(string.Format("正在刷新{0}的位置动态", author.AuthorName));
                                WeiboAPI.GetUserStatusLocationHistory(author, result, author.LocationSampleMethode);
                            }
                            catch (IOException)
                            {
                                ErrCount++;
                                nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                            }
                            catch (Exception ex)
                            {
                                SendMsg("获取位置动态时发生错误,见日志");
                                ErrCount++;
                                nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                                SendMsg(ex.ToString());
                                Logger.Error(ex.ToString());
                            }

                            SendMsg(string.Format("{0}的位置动态获取到{1}条,开始插入数据库", author.AuthorName, result.Count()));
                            for (int i = 0; i < result.Count; ++i)
                            {
                                Item item = ItemDBManager.ConvertToItem(author.AuthorSource, CrawlID, result[i], null, author);
                                if (item.PoID == null)
                                {
                                    continue;
                                }
                                ItemDBManager.InsertOrUpdateItem(item);
                                CntData.Tick();
                            }

                            SuccCount++;
                            SendMsg(string.Format("{0}的任务完成", author.AuthorName));
                            continue;
                        }
                        catch (Exception ex)
                        {
                            ErrCount++;
                            nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                            SendMsg(ex.ToString());
                            Logger.Error(ex.ToString());
                        }
                        finally
                        {
                            author.Location_RefreshStatus   = Enums.CrawlStatus.Normal;
                            author.Location_UpdateTime      = DateTime.Now;
                            author.Location_NextRefreshTime = DateTime.Now.AddDays(author.Location_IntervalDays);
                            author.Location_UpdateCount++;
                            AuthorDBManager.PushbackLocHistJob(author);
                        }
                    }
                }
                SendMsg(string.Format("休息{0}秒", IntervalMS / 1000));
                Thread.Sleep(IntervalMS);
            }
            StopFlag = false;
            return(SuccCount == 0 && ErrCount == 0 ? "Nothing to do" : string.Format("OneJob Done. Succ {0} Err {1}", SuccCount, ErrCount));
        }
Example #21
0
        public string DoOneJob(IPipeline Pipeline)
        {
            SendMsg("暂时不执行回复跟踪任务");
            StopFlag = true;
            int      SuccCount = 0, ErrCount = 0;
            DateTime nextWorkTime = Utilities.Epoch;

            while (!StopFlag)
            {
                if (DateTime.Now > nextWorkTime)
                {
                    Item item = GetNextJob();
                    if (item != null)
                    {
                        try
                        {
                            //最新评论列表
                            List <NetDimension.Weibo.Entities.comment.Entity> result = new List <NetDimension.Weibo.Entities.comment.Entity>();
                            try
                            {
                                WeiboAPI.GetCommentsOfStatus(item, result);
                            }
                            catch (WeiboException ex)
                            {
                                ErrCount++;
                                nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                                SendMsg(ex.ToString());
                            }
                            for (int i = 0; i < result.Count; ++i)
                            {
                                var reply = ItemReplyDBManager.ConvertToItemReply(result[i]);
                                ItemReplyDBManager.InsertItemReply(reply);
                            }

                            item.Tracking.ReplyCount += result.Count;
                            item.Tracking.FollowCount++;
                            if (WeiboUtilities.ShouldKeepFollow(item))
                            {
                                item.Tracking.FollowStatus = Enums.CrawlStatus.Normal;
                            }
                            else
                            {
                                item.Tracking.FollowStatus = Enums.CrawlStatus.Stop;
                            }
                            SuccCount++;
                            continue;
                        }
                        catch (WeiboException ex)
                        {
                            item.Tracking.FollowStatus = Enums.CrawlStatus.Normal;
                            ErrCount++;
                            nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                            SendMsg(ex.ToString());
                        }
                        finally
                        {
                            item.Tracking.FollowNextTime = DateTime.Now.AddMinutes(DefaultSettings.ReplyTrackingInterval.TotalMinutes);
                            ItemDBManager.PushbackReplyTrackingJob(item);
                        }
                    }
                }
                Thread.Sleep(IntervalMS);
            }
            StopFlag = false;
            return(SuccCount == 0 && ErrCount == 0 ? "Nothing to do" : string.Format("OneJob Done. Succ {0} Err {1}", SuccCount, ErrCount));
        }
        public string DoOneJob(IPipeline Pipeline)
        {
            int      SuccCount = 0, ErrCount = 0;
            DateTime nextWorkTime = Utilities.Epoch;

            while (!StopFlag)
            {
                if (DateTime.Now > nextWorkTime)
                {
                    Item item = GetNextJob();
                    if (item != null)
                    {
                        try
                        {
                            #region 获取最新转发列表
                            List <NetDimension.Weibo.Entities.status.Entity> result = new List <NetDimension.Weibo.Entities.status.Entity>();
                            try
                            {
                                WeiboAPI.GetRepostOfStatus(item, result);
                            }
                            catch (WeiboException ex)
                            {
                                ErrCount++;
                                nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                                SendMsg(ex.ToString());
                            }
                            for (int i = 0; i < result.Count; ++i)
                            {
                                var newItem = ItemDBManager.ConvertToItem(result[i], Enums.AuthorSource.TopicTrack, CrawlID);
                                ItemDBManager.InsertOrUpdateItem(newItem);
                            }
                            #endregion

                            #region 更新转发评论数的历史记录
                            try
                            {
                                var countData = WeiboAPI.GetRepostAndReplyCount(item.ClientItemID);
                                item.CurrentCount.FetchTime    = DateTime.Now;
                                item.CurrentCount.ForwardCount = countData.Item1;
                                item.CurrentCount.ReplyCount   = countData.Item2;
                            }
                            catch (WeiboException ex)
                            {
                                ErrCount++;
                                nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                                SendMsg(ex.ToString());
                            }

                            List <ItemCountData> count = null;
                            if (item.CountHistory == null)
                            {
                                count = new List <ItemCountData>();
                            }
                            else
                            {
                                count = new List <ItemCountData>(item.CountHistory);
                            }
                            count.Add(item.CurrentCount);
                            item.CountHistory = count.ToArray();
                            #endregion

                            item.Tracking_Forward.FollowCount++;
                            if (WeiboUtilities.ShouldKeepFollow(item))
                            {
                                item.Tracking_Forward.FollowStatus = Enums.CrawlStatus.Normal;
                            }
                            else
                            {
                                item.Tracking_Forward.FollowStatus = Enums.CrawlStatus.Stop;
                            }

                            SuccCount++;
                            continue;
                        }
                        catch (Exception ex)
                        {
                            item.Tracking_Forward.FollowStatus = Enums.CrawlStatus.Normal;
                            ErrCount++;
                            nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                            SendMsg(ex.ToString());
                        }
                        finally
                        {
                            item.Tracking_Forward.FollowNextTime = DateTime.Now.AddMinutes(DefaultSettings.RepostTrackingInterval.TotalMinutes);
                            ItemDBManager.PushbackRepostTrackingJob(item);
                        }
                    }
                }
                Thread.Sleep(IntervalMS);
            }
            StopFlag = false;
            return(SuccCount == 0 && ErrCount == 0 ? "Nothing to do" : string.Format("OneJob Done. Succ {0} Err {1}", SuccCount, ErrCount));
        }