예제 #1
0
        public string GetView(BJBookInfo book)
        {
            BJVuFindConverter converter = new BJVuFindConverter(book.Fund);
            VufindDoc         vfDoc     = converter.CreateVufindDocument(book.ID);
            string            json      = JsonConvert.SerializeObject(book, Formatting.Indented);

            return(json);
        }
예제 #2
0
        static void BJIncrementUpdate(string Fund)
        {
            ///////////////////////////////////////////////////////////////////////
            //BJVuFindConverter converter1 = new BJVuFindConverter(Fund);

            //BJDatabaseWrapper wrapper1 = new BJDatabaseWrapper(Fund);
            //int IDMAIN1 = 909236;
            //DataTable BJRecord1 = wrapper1.GetBJRecord(IDMAIN1);
            //if (BJRecord1.Rows.Count == 0)
            //{
            //    return;
            //}
            //VufindDoc doc1 = converter1.CreateVufindDocument(IDMAIN1);
            ///////////////////////////////////////////////////////////////////////



            logger.Info("Начало инкрементной загрузки " + Fund + "...");
            Console.WriteLine("Начало инкрементной загрузки " + Fund + "...");
            BJVufindIndexUpdater bj = new BJVufindIndexUpdater(@"catalog.libfl.ru", Fund);

            //получаем инкремент
            List <IncrementStruct> Increment       = new List <IncrementStruct>();
            List <IncrementStruct> IncrementCovers = new List <IncrementStruct>();

            try
            {
                Increment = (List <IncrementStruct>)bj.GetCurrentIncrement();
            }
            catch (Exception ex)
            {
                logger.Error("Загрузка инкремента завершилось неудачей. " + ex.Message);
                Console.WriteLine("Error...");
                //Console.ReadKey();
                return;
            }
            logger.Info("Загрузка инкремента " + Fund + " успешно завершена...");
            Console.WriteLine("Загрузка инкремента " + Fund + " успешно завершена...");

            //вычленияем удалённые записи и удаляем их из индекса
            List <IncrementStruct> RemovedBooks      = Increment.FindAll(x => x.Flag == "deleted");
            List <IncrementStruct> UpdatedBooks      = Increment.FindAll(x => x.Flag == "updated");
            List <IncrementStruct> CoverUpdatedBooks = Increment.FindAll(x => x.Flag == "cover");

            List <string> BooksToDeleteIds = new List <string>();

            foreach (IncrementStruct elt in Increment)
            {
                StringBuilder sb = new StringBuilder();
                if (elt.Flag != "cover")
                {
                    sb.AppendFormat("{0}", elt.Id);
                    BooksToDeleteIds.Add(sb.ToString());
                }
            }

            Console.WriteLine("Начинаю удаление изменённых/удалённых " + Fund + " записей из индекса...");
            logger.Info("Начинаю удаление изменённых/удалённых " + Fund + " записей из индекса...");

            try
            {
                bj.DeleteFromIndex(BooksToDeleteIds);//удаляем сразу все одним запросом.
            }
            catch (Exception ex)
            {
                logger.Error("Удаление завершилось неудачей. \n" + ex.Message);
                Console.WriteLine("Удаление завершилось неудачей. \n" + ex.Message);
                //Console.ReadKey();
                return;
            }
            foreach (string elt in BooksToDeleteIds)
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendFormat("Запись {0} удалена из индекса", elt);
                Console.WriteLine(sb.ToString());
                logger.Info(sb.ToString());
            }

            //теперь добавляем новые и изменяем изменённые. Изменённые заменяться автоматически
            Console.WriteLine("Начинаю обновление " + Fund + " изменённых записей...");
            logger.Info("Начинаю обновление " + Fund + " изменённых записей...");

            BJVuFindConverter converter        = new BJVuFindConverter(Fund);
            List <VufindDoc>  UpdatedBooksList = new List <VufindDoc>();
            VufindDoc         doc;

            //для отладки
            //UpdatedBooks = UpdatedBooks.Take(5).ToList();
            try
            {
                foreach (IncrementStruct elt in UpdatedBooks)
                {
                    BJDatabaseWrapper wrapper = new BJDatabaseWrapper(Fund);
                    int       IDMAIN          = int.Parse(elt.Id.Substring(elt.Id.IndexOf("_") + 1));
                    DataTable BJRecord        = wrapper.GetBJRecord(IDMAIN);
                    if (BJRecord.Rows.Count == 0)
                    {
                        continue;
                    }
                    doc = converter.CreateVufindDocument(IDMAIN);
                    if (doc == null)
                    {
                        continue;
                    }
                    UpdatedBooksList.Add(doc);
                }
            }
            catch (Exception ex)
            {
                logger.Error("Формирование списка обновляемых записей завершилось неудачей.  \n" + ex.Message);
                Console.WriteLine("Error...");
            }


            try
            {
                bj.AddToIndex(UpdatedBooksList);
            }
            catch (Exception ex)
            {
                logger.Error("Добавление в индекс завершилось неудачей.  \n" + ex.Message);
                Console.WriteLine("Error...");
                //Console.ReadKey();
                return;
            }
            foreach (VufindDoc vfdoc in UpdatedBooksList)
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendFormat("Запись {0} обновлена. ", vfdoc.id);
                Console.WriteLine(sb.ToString());
                logger.Info(sb.ToString());
            }


            Console.WriteLine("Начинаю обновление обложек " + Fund + "...");
            logger.Info("Начинаю обновление обложек " + Fund + "...");
            foreach (IncrementStruct elt in CoverUpdatedBooks)
            {
                //скачиваем обложечку
                try
                {
                    converter.ExportSingleCover(elt.Id);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Скачивание  обложки " + elt.Id + " завершилось неудачей. " + ex.Message);
                    logger.Error("Скачивание  обложки " + elt.Id + " завершилось неудачей. " + ex.Message);
                    continue;
                }
                Console.WriteLine("Обложка  " + elt.Id + " скачана успешно. ");
                logger.Info("Обложка  " + elt.Id + " скачана успешно. ");
            }


            bj.SetLastIncrementDate(Fund);

            logger.Info("Завершено.");
            Console.WriteLine("Завершено.");
        }