예제 #1
0
        public int GetBusyElectronicExemplarCount()
        {
            BJDatabaseWrapper dbw   = new BJDatabaseWrapper(this.Fund);
            DataTable         table = dbw.GetBusyElectronicExemplarCount(this.ID);

            return(table.Rows.Count);
        }
예제 #2
0
        public DateTime GetLastIncrementDate(string fund)
        {
            BJDatabaseWrapper db    = new BJDatabaseWrapper(fund);
            DataTable         table = db.GetLastIncrementDate();

            return((DateTime)table.Rows[0][0]);
        }
예제 #3
0
        public bool IsElectronicCopyIssued()
        {
            BJDatabaseWrapper dbw   = new BJDatabaseWrapper(this.Fund);
            DataTable         table = dbw.IsElectronicCopyIssued(this.ID);

            return((table.Rows.Count != 0) ? true : false);
        }
예제 #4
0
        public string GetElectronicViewKeyForReader(int IDREADER)
        {
            BJDatabaseWrapper dbw   = new BJDatabaseWrapper(this.Fund);
            DataTable         table = dbw.GetElectronicViewKeyForReader(this.ID, IDREADER);

            return(table.Rows[0]["VIEWKEY"].ToString());
        }
예제 #5
0
        public bool IsElectronicCopyIsuuedToReader(int IDREADER)
        {
            BJDatabaseWrapper dbw   = new BJDatabaseWrapper(this.Fund);
            DataTable         table = dbw.IsElectronicCopyIsuuedToReader(this.ID, IDREADER);

            return((table.Rows.Count != 0)? true : false);
        }
예제 #6
0
        //этот метод закрыть с потрохами
        public bool IsIssuedToReader()
        {
            switch (this.Fund)
            {
            case "BJVVV":
                BJDatabaseWrapper dbw   = new BJDatabaseWrapper(this.Fund);
                DataTable         table = dbw.IsIssuedToReader(this.IdData);
                return((table.Rows.Count == 0) ? false : true);

            default:
                return(false);
            }
        }
예제 #7
0
        public bool IsSelfIssuedOrOrderedEmployee(int IdReader)
        {
            switch (this.Fund)
            {
            case "BJVVV":
                BJDatabaseWrapper dbw   = new BJDatabaseWrapper(this.Fund);
                DataTable         table = dbw.IsSelfIssuedOrOrderedEmployee(this.IdData, this.IDMAIN, IdReader);
                return((table.Rows.Count == 0) ? false : true);

            default:
                return(false);
            }
        }
예제 #8
0
        public static BJExemplarInfo GetExemplarByInventoryNumber(string inv, string fund)
        {
            BJDatabaseWrapper dbw   = new BJDatabaseWrapper(fund);
            DataTable         table = dbw.GetExemplar(inv);

            if (table.Rows.Count == 0)
            {
                return(null);
            }
            BJExemplarInfo exemplar = BJExemplarInfo.GetExemplarByIdData((int)table.Rows[0]["IDDATA"], fund);

            return(exemplar);
        }
예제 #9
0
        public static BJBookInfo GetBookInfoByInventoryNumber(string inv, string fund)
        {
            BJDatabaseWrapper dbw   = new BJDatabaseWrapper(fund);
            DataTable         table = dbw.GetExemplar(inv);

            if (table.Rows.Count == 0)
            {
                return(null);
            }
            BJBookInfo result = BJBookInfo.GetBookInfoByPIN((int)table.Rows[0]["IDMAIN"], fund);

            return(result);
        }
예제 #10
0
        public string GetEmployeeStatus()
        {
            switch (this.Fund)
            {
            case "BJVVV":
                BJDatabaseWrapper dbw   = new BJDatabaseWrapper(this.Fund);
                DataTable         table = dbw.GetEmployeeStatus(this.IDMAIN);
                return((table.Rows.Count == 0) ? "" : table.Rows[0][0].ToString());

            default:
                return("");
            }
        }
예제 #11
0
        public void IssueElectronicCopyToReader(int IDREADER)
        {
            ReaderInfo        reader = ReaderInfo.GetReader(IDREADER);
            BJDatabaseWrapper dbw    = new BJDatabaseWrapper(this.Fund);

            byte[] random = new byte[20];
            RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();

            rng.GetBytes(random); // The array is now filled with cryptographically strong random bytes.
            string ViewKey         = Convert.ToBase64String(random);
            int    IssuePeriodDays = 30;

            dbw.IssueElectronicCopyToReader(this.ID, IssuePeriodDays, ViewKey, IDREADER, reader.TypeReader);
        }
예제 #12
0
        public DateTime GetNearestFreeDateForElectronicIssue()
        {
            BJDatabaseWrapper dbw   = new BJDatabaseWrapper(this.Fund);
            DataTable         table = dbw.GetNearestFreeDateForElectronicIssue(this.ID);

            if (table.Rows.Count == 0)
            {
                return(DateTime.Today);
            }
            object o = table.Rows[0][0];

            if (o == DBNull.Value)
            {
                return(DateTime.Today);
            }
            return((DateTime)table.Rows[0][0]);
        }
예제 #13
0
        public bool IsOneDayPastAfterReturn(int IDREADER)
        {
            BJDatabaseWrapper dbw   = new BJDatabaseWrapper(this.Fund);
            DataTable         table = dbw.IsOneDayPastAfterReturn(this.ID, IDREADER);

            foreach (DataRow r in table.Rows)
            {
                TimeSpan ts = (DateTime.Now.Date - (DateTime)r["DATERETURN"]);
                if (ts.Days >= 1)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            return(true);
        }
예제 #14
0
        private static BJConvoluteInfo GetConvoluteInfo(string InventoryNumber, string fund)
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();
            BJDatabaseWrapper dbw = new BJDatabaseWrapper(fund);
            //DataTable table = dbw.GetExemplar(InventoryNumber);
            DataTable table = dbw.GetConvolute(InventoryNumber);

            sw.Stop();
            if (table.Rows.Count == 0)
            {
                return(null);
            }
            BJConvoluteInfo convolute = new BJConvoluteInfo();

            convolute.Fund   = fund;
            convolute.IDDATA = (int)table.Rows[0]["IDDATA"];
            convolute.IDMAIN = (int)table.Rows[0]["IDMAIN"];
            return(convolute);
        }
예제 #15
0
        public override object GetCurrentIncrement()
        {
            BJDatabaseWrapper      dbWrapper = new BJDatabaseWrapper(this.Fund);
            List <IncrementStruct> Increment = new List <IncrementStruct>();

            StringBuilder sb = new StringBuilder();

            DataTable table = dbWrapper.GetIncrementUpdate();

            foreach (DataRow row in table.Rows)
            {
                sb.Clear();
                sb.AppendFormat("{0}_{1}", this.Fund, row["IDMAIN"].ToString());
                Increment.Add(new IncrementStruct("updated", sb.ToString()));
                //Debug.Assert(sb.Length < 7, row["IDMAIN"].ToString());
            }

            table = dbWrapper.GetIncrementDeleted();
            foreach (DataRow row in table.Rows)
            {
                sb.Clear();
                sb.AppendFormat("{0}_{1}", this.Fund, row["IDMAIN"].ToString());
                Increment.Add(new IncrementStruct("deleted", sb.ToString()));
            }

            table = dbWrapper.GetIncrementCovers();
            foreach (DataRow row in table.Rows)
            {
                sb.Clear();
                sb.AppendFormat("{0}_{1}", this.Fund, row["IDMAIN"].ToString());
                Increment.Add(new IncrementStruct("cover", sb.ToString()));
            }



            return(Increment);
        }
예제 #16
0
 public BJExemplarLoader(string Fund)
 {
     this.Fund = Fund;
     dbWrapper = new BJDatabaseWrapper(Fund);
 }
예제 #17
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("Завершено.");
        }
예제 #18
0
파일: Form1.cs 프로젝트: infra-hdc/LIBFL
 private void button1_Click(object sender, EventArgs e)
 {
     BJDatabaseWrapper dbWrapper = new BJDatabaseWrapper("BJVVV");
     DataTable         record    = dbWrapper.GetBJRecord(17132);
     int cnt = record.Rows.Count;
 }
예제 #19
0
 public BJBookLoader(string Fund)
 {
     this.Fund = Fund;
     dbWrapper = new BJDatabaseWrapper(Fund);
 }
예제 #20
0
        public static BJExemplarInfo GetExemplarByIdData(int iddata, string fund)
        {
            BJDatabaseWrapper dbw   = new BJDatabaseWrapper(fund);
            DataTable         table = dbw.GetExemplar(iddata);

            if (table.Rows.Count == 0)
            {
                return(null);
            }
            BJExemplarInfo exemplar = new BJExemplarInfo((int)table.Rows[0]["IDDATA"]);

            exemplar.IDMAIN = (int)table.Rows[0]["IDMAIN"];
            exemplar.Fund   = fund;


            foreach (DataRow row in table.Rows)//записываем все поля в объект
            {
                if (fund == "BJACC")
                {
                    if (row["MNFIELD"].ToString() + row["MSFIELD"].ToString() == "899$w") //в американской базе нет инвентарных номеров. берем штрихкод
                    {
                        exemplar.Created = (DateTime)row["Created"];                      //за дату создания берем дату присвоения штрихкода
                    }
                }
                else
                {
                    if (row["MNFIELD"].ToString() + row["MSFIELD"].ToString() == "899$p") //в остальных есть и берём дату создания поля инвентарный номер
                    {
                        exemplar.Created = (DateTime)row["Created"];                      //за дату создания берем дату присвоения инвентаря
                    }
                }
                if (row["MNFIELD"].ToString() + row["MSFIELD"].ToString() == "899$a")
                {
                    exemplar.Fields.AddField(row["NAME"].ToString(), (int)row["MNFIELD"], row["MSFIELD"].ToString()); //местонахождение берём из LIST_8, а не из DATAEXTPLAIN, потому что в поле PLAIN меняются некоторые символы
                    continue;
                }
                exemplar.Fields.AddField(row["PLAIN"].ToString(), (int)row["MNFIELD"], row["MSFIELD"].ToString());//добавляем все поля блока 260 к объекту экземпляра
            }
            try
            {
                exemplar.ExemplarAccess = BJExemplarInfo.GetExemplarAccess(exemplar);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            if (exemplar.Fields["482$a"].MNFIELD != 0)//это приплётышь
            {
                BJConvoluteInfo convolute = BJExemplarInfo.GetConvoluteInfo(exemplar.Fields["482$a"].ToString(), exemplar.Fund);
                //BJExemplarInfo Convolute = BJExemplarInfo.GetExemplarByInventoryNumber(exemplar.Fields["482$a"].ToString(), exemplar.Fund);
                if (convolute != null)//нашёлся конволют
                {
                    exemplar.ConvolutePin    = $"{convolute.Fund}_{convolute.IDMAIN}";
                    exemplar.ConvoluteIdData = convolute.IDDATA;
                }
                else//не нашёлся конволют
                {
                    exemplar.ConvolutePin = null;
                }
            }
            else
            {
                //это не приплётышь ConvolutePin
                exemplar.ConvolutePin = null;
            }


            exemplar.Cipher = string.IsNullOrEmpty(exemplar.Fields["899$j"].ToString()) ? dbw.GetCipher(exemplar.Fields["899$b"].ToString(), exemplar.IDMAIN) : exemplar.Fields["899$j"].ToString();
            exemplar.Bar    = exemplar.Fields["899$w"].ToString();

            return(exemplar);
        }
예제 #21
0
        public void SetLastIncrementDate(string fund)
        {
            BJDatabaseWrapper db = new BJDatabaseWrapper(fund);

            db.SetLastIncrementDate(DateTime.Now.AddHours(-1));
        }