/// <summary> /// Подсчёт количества событий /// </summary> public static int CountEvents ( [NotNull] List <ReaderInfo> readers, DateTime fromDay, DateTime toDay, [NotNull] string department, bool visit ) { if (ReferenceEquals(readers, null)) { throw new ArgumentNullException("readers"); } if (string.IsNullOrEmpty(department)) { throw new ArgumentNullException("department"); } string fromDayString = new IrbisDate(fromDay).Text; string toDayString = new IrbisDate(toDay).Text; int result = readers .SelectMany(r => r.Visits) .Count(v => (v.DateGivenString.SafeCompare(fromDayString) >= 0) && (v.DateGivenString.SafeCompare(toDayString) <= 0) && v.Department.SameString(department) && (v.IsVisit == visit)); return(result); }
public void IrbisDate_ToString_1() { const string expected = "20170225"; IrbisDate date = expected; Assert.AreEqual(expected, date.ToString()); }
public void IrbisDateConvertStringToDate_3() { DateTime actual = IrbisDate.ConvertStringToDate("201702251015"); DateTime expected = new DateTime(2017, 2, 25); Assert.AreEqual(expected, actual); }
public void IrbisDate_Constructor_4() { DateTime date1 = new DateTime(2017, 2, 25); IrbisDate date2 = new IrbisDate(date1); Assert.AreEqual("20170225", date2.Text); }
public void IrbisDate_Operator_IrbisDate_1() { DateTime date1 = new DateTime(2017, 2, 25); IrbisDate date2 = date1; Assert.AreEqual(date1, date2.Date); }
public void IrbisDate_Constructor_3() { string date1 = "20160101"; IrbisDate date2 = date1; string date3 = date2; Assert.AreEqual(date1, date3); }
public void IrbisDate_Operator_DateTime_2() { DateTime expected = new DateTime(2017, 2, 25); IrbisDate date = expected; DateTime actual = date; Assert.AreEqual(expected, actual); }
public void IrbisDate_ConvertStringToTime_4() { TimeSpan time = IrbisDate.ConvertStringToTime("101112"); Assert.AreEqual(10, time.Hours); Assert.AreEqual(11, time.Minutes); Assert.AreEqual(12, time.Seconds); }
public void IrbisDate_Constructor_2() { IrbisDate date1 = new IrbisDate("20170225"); DateTime date2 = date1.Date; Assert.AreEqual(2017, date2.Year); Assert.AreEqual(2, date2.Month); Assert.AreEqual(25, date2.Day); }
public void IrbisDate_Operator_DateTime_1() { IrbisDate date1 = "20170225"; DateTime date2 = date1; Assert.AreEqual(2017, date2.Year); Assert.AreEqual(2, date2.Month); Assert.AreEqual(25, date2.Day); }
public void IrbisDate_Constructor_1() { DateTime today = DateTime.Today; IrbisDate date = new IrbisDate(); Assert.AreEqual ( today.ToString("yyyyMMdd"), date.Text ); }
private void _TestSerialization ( IrbisDate first ) { byte[] bytes = first.SaveToMemory(); IrbisDate second = bytes .RestoreObjectFromMemory <IrbisDate>(); Assert.AreEqual(first.Text, second.Text); Assert.AreEqual(first.Date, second.Date); }
static void AnalyzeTerms() { TermParameters parameters = new TermParameters { Database = connection.Database, StartTerm = "RD=", NumberOfTerms = 10000 }; TermInfo[] terms = connection.ReadTerms(parameters); terms = terms.Where(ti => ti.Text.SafeStarts("RD=201")) .ToArray(); terms = TermInfo.TrimPrefix(terms, "RD="); foreach (TermInfo term in terms) { DateTime date = IrbisDate.ConvertStringToDate(term.Text); Console.WriteLine("{0:yyyy-MM-dd}\t{1}", date, term.Count); } }
public static VisitInfo[] GetEvents ( [NotNull] this VisitInfo[] events, DateTime day ) { if (ReferenceEquals(events, null)) { throw new ArgumentNullException("events"); } string dayString = IrbisDate.ConvertDateToString(day); VisitInfo[] result = events .AsParallel() .Where(v => v.DateGivenString.SameString(dayString)) .ToArray(); return(result); }
public static VisitInfo[] GetEvents ( [NotNull] this VisitInfo[] events, DateTime fromDay, DateTime toDay ) { if (ReferenceEquals(events, null)) { throw new ArgumentNullException("events"); } string fromDayString = IrbisDate.ConvertDateToString(fromDay); string toDayString = IrbisDate.ConvertDateToString(toDay); VisitInfo[] result = events .AsParallel() .Where(v => (v.DateGivenString.SafeCompare(fromDayString) >= 0) && (v.DateGivenString.SafeCompare(toDayString) <= 0)) .ToArray(); return(result); }
/// <summary> /// Подсчёт количества событий. /// </summary> public static int CountEvents ( [NotNull] List <ReaderInfo> readers, DateTime fromDay, DateTime toDay, bool visit ) { if (ReferenceEquals(readers, null)) { throw new ArgumentNullException("readers"); } string fromDayString = IrbisDate.ConvertDateToString(fromDay); string toDayString = IrbisDate.ConvertDateToString(toDay); int result = readers .SelectMany(r => r.Visits) .Count(v => (v.DateGivenString.SafeCompare(fromDayString) >= 0) && (v.DateGivenString.SafeCompare(toDayString) <= 0) && (v.IsVisit == visit)); return(result); }
private static void Main() { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); try { string connectionString = ConfigurationUtility .GetString("connectionString") .ThrowIfNull("connectionString not set"); Threshold = IrbisDate.ConvertStringToDate ( ConfigurationUtility .GetString("threshold") .ThrowIfNull("threshold not set") ); LowerBound = DateTime.MinValue; string lowerText = ConfigurationUtility.GetString("lowerBound"); if (!string.IsNullOrEmpty(lowerText)) { LowerBound = IrbisDate.ConvertStringToDate(lowerText); } Console.WriteLine("Loading readers"); List <ReaderInfo> allReaders = new List <ReaderInfo>(); OldReaders = new BlockingCollection <ReaderInfo>(); using (IrbisConnection connection = new IrbisConnection(connectionString)) { ReaderManager manager = new ReaderManager(connection) { OmitDeletedRecords = true }; manager.BatchRead += (obj, ea) => Console.Write("."); string[] databases = ConfigurationUtility.GetString("databases") .ThrowIfNull("databases not specified") .Split ( new[] { ' ', ';', ',' }, StringSplitOptions.RemoveEmptyEntries ); foreach (string database in databases) { Console.WriteLine ( "Database: {0}, records: {1}", database, connection.GetMaxMfn(database) - 1 ); allReaders.AddRange ( manager.GetAllReaders(database) ); Console.WriteLine(); } } WriteDelimiter(); Console.WriteLine("Merging"); Console.WriteLine("Records before merging: {0}", allReaders.Count); allReaders = ReaderManager.MergeReaders(allReaders); Console.WriteLine("Records after merging: {0}", allReaders.Count); WriteDelimiter(); Console.WriteLine("Filtering"); ParallelOptions options = new ParallelOptions { MaxDegreeOfParallelism = 4 }; Parallel.ForEach(allReaders, options, ProcessReader); ReaderInfo[] oldReaders = OldReaders.ToArray(); WriteDelimiter(); Console.WriteLine("Sorting"); oldReaders = oldReaders.OrderBy ( reader => reader.FullName ) .ToArray(); WriteDelimiter(); Console.WriteLine ( "Create table: {0} lines", oldReaders.Length ); Workbook workbook = new Workbook(); workbook.CreateNewDocument(); Worksheet worksheet = workbook.Worksheets[0]; int row = 0; worksheet.Cells[row, 0].Value = "ФИО"; worksheet.Cells[row, 1].Value = "Билет"; worksheet.Cells[row, 2].Value = "Регистрация"; worksheet.Cells[row, 3].Value = "Кол-во"; worksheet.Cells[row, 4].Value = "Последнее событие"; worksheet.Cells[row, 5].Value = "Отделы"; DrawBorders(worksheet, row); row++; for (int i = 0; i < oldReaders.Length; i++) { if (i % 100 == 0) { Console.Write("."); } ReaderInfo reader = oldReaders[i]; string lastDate = (string)reader.UserData; if (string.IsNullOrEmpty(lastDate)) { lastDate = "--"; } string departments = StringUtility.Join ( ", ", reader.Registrations .Select(reg => reg.Chair) .Concat ( reader.Visits .Select(visit => visit.Department) ) .NonEmptyLines() .Distinct() ); worksheet.Cells[row, 0].Value = reader.FullName; worksheet.Cells[row, 1].Value = reader.Ticket; worksheet.Cells[row, 2].Value = reader.RegistrationDate .ToShortDateString(); worksheet.Cells[row, 3].Value = reader.Visits.Length + reader.Registrations.Length; worksheet.Cells[row, 4].Value = lastDate; worksheet.Cells[row, 5].Value = departments; DrawBorders(worksheet, row); row++; } WriteDelimiter(); workbook.SaveDocument(OutputFile); Console.WriteLine("All done"); stopwatch.Stop(); TimeSpan elapsed = stopwatch.Elapsed; Console.WriteLine("Elapsed: {0}", elapsed); Console.WriteLine("Old readers: {0}", oldReaders.Length); } catch (Exception exception) { Console.WriteLine(exception); } }
public void IrbisDate_ConvertStringToDate_1() { DateTime date = IrbisDate.ConvertStringToDate(null); Assert.AreEqual(DateTime.MinValue, date); }
public void IrbisDate_Serialization_1() { IrbisDate date = "20121212"; _TestSerialization(date); }
static EffectiveStat ProcessBook ( [NotNull] MarcRecord record, [NotNull] string ksu ) { Code.NotNull(record, "record"); BookInfo book = new BookInfo(_provider, record); ExemplarInfo[] selected = book.Exemplars.Where ( ex => ex.KsuNumber1.SameString(ksu) ) .ToArray(); Debug.Assert(selected.Length != 0, "exemplars.Length != 0"); EffectiveStat result = new EffectiveStat { Description = _outputBooks ? book.Description : string.Empty, TitleCount = 1 }; int totalExemplars = 0; foreach (ExemplarInfo exemplar in book.Exemplars) { int amount = exemplar.Amount.SafeToInt32(); if (amount == 0) { amount = 1; } totalExemplars += amount; } List <string> siglas = new List <string>(); foreach (ExemplarInfo exemplar in selected) { DateTime date = IrbisDate.ConvertStringToDate(exemplar.Date); if (date != DateTime.MinValue) { if (result.Date == DateTime.MinValue) { result.Date = date; } else if (date < result.Date) { result.Date = date; } } int amount = exemplar.Amount.SafeToInt32(); if (amount == 0) { amount = 1; } result.ExemplarCount += amount; decimal price = exemplar.Price.SafeToDecimal(0); if (price == 0) { price = book.Price; } siglas.Add(exemplar.Place); result.TotalCost += amount * price; } decimal loanCount = book.UsageCount; if (result.ExemplarCount != totalExemplars) { loanCount = loanCount * result.ExemplarCount / totalExemplars; } result.Bbk = record.FM(621).SafeSubstring(0, 2); result.LoanCount = (int)loanCount; result.Sigla = string.Join(" ", siglas.Distinct() .Where(s => !string.IsNullOrEmpty(s)) .Select(s => s.ToUpperInvariant())); return(result); }
private static void ProcessRecord ( int mfn ) { connection.Database = MainDatabase; MarcRecord mainRecord = connection.ReadRecord(mfn); string linkValue = mainRecord.FM(LinkTag); connection.Database = BackupDatabase; MarcRecord backupRecord = connection.SearchReadOneRecord ( "\"{0}{1}\"", LinkPrefix, linkValue ); if (ReferenceEquals(backupRecord, null)) { Console.WriteLine ( "Не нашлось парной записи для MFN={0} ({1}{2})", mfn, LinkPrefix, linkValue ); Console.WriteLine(new string('=', 70)); return; } Console.WriteLine("MFN={0}", mfn); RevisionInfo[] revisions = RevisionInfo.Parse(mainRecord) .Where(rev => rev.Name != "avd") .ToArray(); if (revisions.Length == 0) { Console.WriteLine("Запись без ревизий!"); Console.WriteLine(new string('=', 70)); return; } RevisionInfo lastRevision = revisions.Last(); DateTime lastEdit = IrbisDate.ConvertStringToDate(lastRevision.Date); Console.WriteLine ( "Последнее редактирование: {0} {1:d}", lastRevision.Name, lastEdit ); if (lastEdit > ThresholdDate) { Console.WriteLine("Запись редактировалась, надо восстанавливать вручную"); Console.WriteLine(new string('=', 70)); return; } if (CompareRecords(mainRecord, backupRecord)) { Console.WriteLine("Нет различий между MAIN и BACKUP"); goto DONE; } if (DoRestore) { RecordField[] residuaryFields = mainRecord.Fields .Where(field => field.Tag.OneOf(ResiduaryTags)) .Select(field => field.Clone()) .ToArray(); RecordField[] backupFields = backupRecord.Fields .Where(field => !field.Tag.OneOf(ResiduaryTags)) .Select(field => field.Clone()) .ToArray(); mainRecord.Fields.Clear(); mainRecord.Fields.AddRange(backupFields); mainRecord.Fields.AddRange(residuaryFields); Console.WriteLine ( "Сформирована новая версия записи: {0} новых и {1} старых полей", residuaryFields.Length, backupFields.Length ); connection.WriteRecord(mainRecord); } DONE: Console.WriteLine(new string('=', 70)); Console.WriteLine(); }
public void IrbisDate_ConvertStringToTime_2() { TimeSpan time = IrbisDate.ConvertStringToTime("1"); Assert.AreEqual(0, time.Ticks); }