public static int Save(Market m) { var ctx = new AutoNewsEntities(); if (m.Id == 0) { if (ctx.Markets.Count(o => (o.Name == m.Name && o.MarketTypeId == m.MarketTypeId) || o.MarketCrmId == m.MarketCrmId) > 0) { throw new Exception("名称或CRM ID已存在!"); } ctx.Markets.Add(m); return 1; } //id != 0 if (ctx.Markets.Count(o => ((o.Name == m.Name && o.MarketTypeId == m.MarketTypeId) || o.MarketCrmId == m.MarketCrmId) && o.Id != m.Id) > 0) { throw new Exception("名称或CRM ID已存在!"); } var market = ctx.Markets.Single(o => o.Id == m.Id); market.Auto = m.Auto; market.EndTime = m.EndTime; market.MarketCrmId = m.MarketCrmId; market.Name = m.Name; market.StartTime = m.StartTime; ctx.SaveChanges(); return 2; }
public void LoadMarkets(int marketTypeId) { using (var ctx = new AutoNewsEntities()) { Markets = ctx.Markets.Where(o => o.MarketTypeId == marketTypeId).ToList(); } }
private void RunPlanedCrawler(object sender, EventArgs e) { // try { using (var ctx = new AutoNewsEntities()) { //get the markets to run crawlers according to the start time var nowTime = TimeSpan.Parse(DateTime.Now.ToShortTimeString()); var crawlers2Run = ctx.Markets.Where(o => o.Auto && o.StartTime <= nowTime && (o.EndTime == null || o.EndTime > nowTime)).ToList(); //if the market is not in the list, then put it into the list; foreach (var market in crawlers2Run) { if (CrawlTasks.All(o => o.Market.Id != market.Id)) { CrawlTasks.Add(new CrawlTask { Market = market, Status = CrawlTaskStatus.Pending, IsContinueing = true, TheTask = null }); } } //Handle the finish and aborted: if now is within end time, then set it to pending var finishedTasks = CrawlTasks.Where(o => o.Status == CrawlTaskStatus.Finished || o.Status == CrawlTaskStatus.Aborted); foreach (var finishedTask in finishedTasks) { if ((finishedTask.Market.EndTime == null || finishedTask.Market.EndTime.Value > nowTime) && finishedTask.Market.StartTime <= nowTime) { finishedTask.Status = CrawlTaskStatus.Pending; } } //run the pending tasks var markets2Crawl = CrawlTasks.Where(o => o.Status == CrawlTaskStatus.Pending).ToList(); foreach (var crawlTask in markets2Crawl) { CrawlTask ctask = crawlTask; ctask.Status = CrawlTaskStatus.Running; var t = new Task(() => RunMarketCrawler(ctask)); ctask.TheTask = t; t.Start(); } //remove the timeout task var timeoutTasksCount = CrawlTasks.RemoveAll(o => ((o.Market.EndTime != null && o.Market.EndTime < nowTime) || (o.Market.StartTime != null && o.Market.StartTime > nowTime)) && o.Status != CrawlTaskStatus.Pending && o.Status != CrawlTaskStatus.Running); //todo ? : restart the failed task the push back the end time by 5 minutes } } catch (Exception) { } }
public static void RegLastUpdated(int id, DateTime updated) { using (var ctx = new AutoNewsEntities()) { var news = ctx.News.Single(o => o.Id == id); news.Updated = updated; ctx.SaveChanges(); } }
public MainWindowVM() { using (var ctx = new AutoNewsEntities()) { _marketTypes = ctx.MarketTypes.ToList(); _markets = new List<Market>(); _newses = new List<News>(); } }
public List<ICrawler> GetCrawlers(int marketId) { var result = new List<ICrawler>(); using (var ctx = new AutoNewsEntities()) { var crawlers = ctx.Crawlers.Where(o => o.MarketId == marketId).ToList(); foreach (var crawler in crawlers) { Type t = Type.GetType(crawler.Name); if (t != null) { result.Add((ICrawler) Activator.CreateInstance(t, null)); } } return result; } }
public static void Save(News n) { //if id = 0 then add new News; else update existed news according to the id using (var ctx = new AutoNewsEntities()) { if (n.Id == 0) { ctx.News.Add(n); } else { var existedNews = ctx.News.Single(o => o.Id == n.Id); existedNews.MarketId = n.MarketId; existedNews.Name = n.Name; existedNews.ProductId = n.ProductId; } ctx.SaveChanges(); } }
public static bool SavePrice(Price p) { //get the news id by price token and market_crm_id using (var ctx = new AutoNewsEntities()) { if (ctx.Prices.Count(o => o.Token == p.Token && o.Date == p.Date && o.MarketCrmId == p.MarketCrmId) > 0) { //existed return false; } var n = ctx.News.Include("Market").SingleOrDefault(o => o.Name == p.Token && o.Market.MarketCrmId == p.MarketCrmId); if (n != null) { p.NewsId = n.Id; } else { var m = ctx.Markets.Single(o => o.MarketCrmId == p.MarketCrmId); var nn = new News { Name = p.Token, MarketId = m.Id, Updated = DateTime.Now }; nn =ctx.News.Add(nn); p.NewsId = nn.Id; } ctx.Prices.Add(p); if (n != null && n.ProductId != null) { LogHelper.AddLog(n.Name + "已更新", n.MarketId, "success"); n.Updated = DateTime.Now; } ctx.SaveChanges(); return true; } }
public MarketEditorVM(int marketTypeId, int marketId = 0) { MarketId = marketId; MarketTypeId = marketTypeId; var ctx = new AutoNewsEntities(); var marketType = ctx.MarketTypes.Single(o => o.Id == marketTypeId); if (MarketId > 0) { Title = "编辑市场"; var m = ctx.Markets.Single(o => o.Id == MarketId); _name = m.Name; _crmId = m.MarketCrmId; _auto = m.Auto; _startTime = m.StartTime; _endTime = m.EndTime; } else { Title = "新增市场"; _auto = false; } Title += "-" + marketType.Name; }
public void LoadNews(int marketId) { using (var ctx = new AutoNewsEntities()) { Newses = ctx.News.Where(o => o.MarketId == marketId).ToList(); } }