示例#1
0
        private void RateWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                DateTime sTime = (DateTime)e.Argument;

                StockAnalyser   analyser = new StockAnalyser();
                List <DateTime> dataList = new List <DateTime>();

                RateWorker.ReportProgress(0, "Rate Start");

                using (stockdbaEntities db = new stockdbaEntities())
                {
                    dataList.AddRange(db.DailySummary.Where(o => o.receiveDate >= sTime).GroupBy(o => o.receiveDate).Select(o => o.Key));
                }

                foreach (var item in dataList)
                //Parallel.ForEach(dataList, item =>
                {
                    RateWorker.ReportProgress(0, item);

                    analyser.DoDailyRate(item);

                    analyser.DoWeeklyRate(item);

                    analyser.DoTotalRate(item);
                }//);

                RateWorker.ReportProgress(0, "Rate Done");
            }
            catch (Exception ex)
            {
                RateWorker.ReportProgress(0, ex.Message);
            }
        }
示例#2
0
 protected void Application_End(object sender, EventArgs e)
 {
     using (stockdbaEntities db = new stockdbaEntities())
     {
         db.ServiceLog.Add(new ServiceLog()
         {
             updateTime = DateTime.Now, updateLog = "MainService_End"
         });
         db.SaveChanges();
     }
 }
示例#3
0
 void Application_End(object sender, EventArgs e)
 {
     //  應用程式關閉時執行的程式碼
     using (stockdbaEntities db = new stockdbaEntities())
     {
         db.ServiceLog.Add(new ServiceLog()
         {
             updateTime = DateTime.Now, updateLog = "MyStock_End"
         });
         db.SaveChanges();
     }
 }
        public WorkItem GetWork()
        {
            WorkItem  item = null;
            DateTime  receiveDate;
            DailyWork dailyWork;

            try
            {
                if (workStack.Count == 0)
                {
                    using (stockdbaEntities db = new stockdbaEntities())
                    {
                        receiveDate = db.DailyWork.OrderByDescending(o => o.receiveDate).First().receiveDate;
                        workStack.PushRange(db.DailyWork.Where(o => o.currentPage != o.totalPage && o.receiveDate == receiveDate).ToArray());
                    }
                }

                if (workStack.Count != 0)
                {
                    if (workStack.TryPop(out dailyWork) == true)
                    {
                        item             = new WorkItem();
                        item.receiveDate = dailyWork.receiveDate;
                        item.stockId     = dailyWork.stockId;
                        item.current     = (int)dailyWork.currentPage;
                        item.total       = (int)dailyWork.totalPage;

                        using (stockdbaEntities db = new stockdbaEntities())
                        {
                            db.ServiceLog.Add(new ServiceLog()
                            {
                                updateTime = DateTime.Now, updateLog = string.Format("GetWork:{0}", item.stockId)
                            });
                            db.SaveChanges();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                using (stockdbaEntities db = new stockdbaEntities())
                {
                    db.ServiceLog.Add(new ServiceLog()
                    {
                        updateTime = DateTime.Now, updateLog = String.Format("GetWork:{0}", ex.Message)
                    });
                    db.SaveChanges();
                }
            }

            return(item);
        }
示例#5
0
        void Application_Start(object sender, EventArgs e)
        {
            // 應用程式啟動時執行的程式碼
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterOpenAuth();

            using (stockdbaEntities db = new stockdbaEntities())
            {
                db.ServiceLog.Add(new ServiceLog()
                {
                    updateTime = DateTime.Now, updateLog = "MyStock_Start"
                });
                db.SaveChanges();
            }
        }
示例#6
0
        void DoWeeklyRate(string receiveDate)
        {
            StockAnalyser analyser = new StockAnalyser();

            //analyser.DoWeeklyRate(DateTime.Parse(receiveDate));

            using (stockdbaEntities db = new stockdbaEntities())
            {
                DateTime sTime = DateTime.Parse(receiveDate);

                List <DateTime> dataList = new List <DateTime>();

                dataList.AddRange(db.DailySummary.Where(o => o.receiveDate >= sTime).GroupBy(o => o.receiveDate).Select(o => o.Key));
                foreach (var item in dataList)
                {
                    analyser.DoWeeklyRate(item);
                }
            }
        }
示例#7
0
        static void DetailQuery()
        {
            StockQuery worker = new StockQuery();
            StockAnalyser analyser = new StockAnalyser();

            DateTime receiveDate;
            List<DailyWork> workList = new List<DailyWork>();

            ParallelOptions option = new ParallelOptions();
            option.MaxDegreeOfParallelism = 10;

            int retryCnt = 0;
            Random rnd = new Random();

            while (true)
            {
                using (stockdbaEntities db = new stockdbaEntities())
                {
                    receiveDate = db.DailyWork.OrderByDescending(o => o.receiveDate).First().receiveDate;
                    workList.AddRange(db.DailyWork.Where(o => o.currentPage != o.totalPage && o.receiveDate == receiveDate));
                }

                if (workList.Count() > 0)
                {
                    Parallel.ForEach(workList, option, item =>
                    {
                        try
                        {
                            Thread.Sleep(rnd.Next(100, 1000));
                            for (int i = (int)item.currentPage + 1; i <= (int)item.totalPage; i++)
                            {
                                worker.QuerySinglePage(i, item.stockId);
                                using (stockdbaEntities db = new stockdbaEntities())
                                {
                                    db.DailyWork.Where(o => o.receiveDate == item.receiveDate && o.stockId == item.stockId).First().currentPage = i;
                                    db.ServiceLog.Add(new ServiceLog() { updateTime = DateTime.Now, updateLog = string.Format("Run:{0}:{1}/{2}", item.stockId, i, item.totalPage) });
                                    db.SaveChanges();

                                    Logger(string.Format("Run:{0}:{1}/{2}", item.stockId, i, item.totalPage));

                                    if (i == item.totalPage)
                                    {
                                        string stockName = "-";
                                        var obj = db.Company.Where(o => o.stockId == item.stockId).FirstOrDefault();
                                        if (obj != null)
                                        {
                                            stockName = obj.name;
                                        }
                                        // 結算
                                        analyser.DoSettlement(item.receiveDate, item.stockId);
                                        // 集中率
                                        analyser.DoDailyRate(item.receiveDate, item.stockId, stockName);
                                        analyser.DoWeeklyRate(item.receiveDate, item.stockId, stockName);
                                        analyser.DoTotalRate(item.receiveDate, item.stockId, stockName);

                                        Logger(string.Format("Run:{0}: Settlement", item.stockId));
                                    }
                                }
                                Thread.Sleep(10000);
                            }
                        }
                        catch (Exception ex)
                        {
                            using (stockdbaEntities db = new stockdbaEntities())
                            {
                                db.ServiceLog.Add(new ServiceLog() { updateTime = DateTime.Now, updateLog = String.Format("Run:{0}", ex.Message) });
                                db.SaveChanges();
                            }
                        }
                    });
                    workList.Clear();
                }
                else
                {
                    if (retryCnt < 60)
                    {
                        retryCnt++;
                        Thread.Sleep(60000); // 1min
                    }
                    else
                    {
                        break;
                    }
                }
            }
        }
        public string Run()
        {
            Task nodeTask = new Task(() =>
            {
                MainServiceReference.MainServiceSoapClient client = new MainServiceReference.MainServiceSoapClient();
                MainServiceReference.WorkItem item;

                StockQuery worker = new StockQuery();

                while ((item = client.GetWork()) != null)
                {
                    try
                    {
                        using (stockdbaEntities db = new stockdbaEntities())
                        {
                            db.ServiceLog.Add(new ServiceLog()
                            {
                                updateTime = DateTime.Now, updateLog = string.Format("Run:{0}", item.stockId)
                            });
                            db.SaveChanges();
                        }

                        for (int i = item.current + 1; i <= item.total; i++)
                        {
                            worker.QuerySinglePage(i, item.stockId);
                            using (stockdbaEntities db = new stockdbaEntities())
                            {
                                db.DailyWork.Where(o => o.receiveDate == item.receiveDate && o.stockId == item.stockId).First().currentPage = i;
                                db.ServiceLog.Add(new ServiceLog()
                                {
                                    updateTime = DateTime.Now, updateLog = string.Format("Run:{0}:{1}/{2}", item.stockId, i, item.total)
                                });
                                db.SaveChanges();
                            }
                            Thread.Sleep(10000);
                        }
                    }
                    catch (Exception ex)
                    {
                        using (stockdbaEntities db = new stockdbaEntities())
                        {
                            db.ServiceLog.Add(new ServiceLog()
                            {
                                updateTime = DateTime.Now, updateLog = String.Format("Run:{0}", ex.Message)
                            });
                            db.SaveChanges();
                        }
                    }
                }
                Interlocked.Decrement(ref taskNum);
            });

            if (taskNum < 10)
            {
                nodeTask.Start();
                Interlocked.Increment(ref taskNum);
                return(String.Format("New Task, TaskNum:{0}", taskNum));
            }

            return(String.Format("TaskNum:{0}", taskNum));
        }