private void CompleteItem(IUnitOfWork unit, SlurpQueue QueueItem) { QueueItem.IsCompleted = true; QueueItem.CompletionTime = DateTime.Now; log.InfoFormat("Finished task for {0}", PluginType.Name); unit.Save(); }
private void Schedule() { #region Scheduling using (var unit = GetUnitOfWork()) { var schedule = unit.Scope.Repository <SlurpSchedule>().GetAll().ToList(); foreach (var item in schedule) { log.DebugFormat("Processing schedule {0}", item.SlurpScheduleID); if (item.ProductID.HasValue) { products.Add(item.Product); } else { var pgm = unit.Scope.Repository <ProductGroupMapping>().GetSingle(x => x.ProductGroupMappingID == item.ProductGroupMappingID); GetProductByProductGroupHierarchy(pgm); // var records = unit.Scope.Repository<ContentProductGroup>().GetAll(x => x.ProductGroupMappingID == item.ProductGroupMappingID).OrderByDescending(x => x.ProductID); //products.AddRange(records.Select(x => x.Product).Distinct()); } log.DebugFormat("Schedule has {0} products", products.Count); foreach (var product in products) { var openRecord = unit.Scope.Repository <SlurpQueue>().GetSingle(x => !x.IsCompleted && x.ProductID == product.ProductID && x.ProductCompareSourceID == item.ProductCompareSourceID); if (openRecord == null) // no open job, so check for interval { DateTime?lastDate = product.SlurpQueues.Where(x => x.IsCompleted).Max(x => x.CompletionTime); if (NeedsScan(item, lastDate)) { openRecord = new SlurpQueue() { ProductID = product.ProductID, SlurpScheduleID = item.SlurpScheduleID, ProductCompareSourceID = item.ProductCompareSourceID, IsCompleted = false, CreationTime = DateTime.Now }; unit.Scope.Repository <SlurpQueue>().Add(openRecord); } } unit.Save(); } } } #endregion }