Beispiel #1
0
        /// <summary>
        /// Запуск обработки файла
        /// </summary>
        /// <param name="take">Количество обрабатываемых адресов</param>
        public async Task Run(long take = long.MaxValue)
        {
            _take             = take;
            using var archive = ZipFile.OpenRead(_fullPath);
            foreach (var entry in archive.Entries)
            {
                if (!entry.Name.ToUpperInvariant().StartsWith(NormativeDocument.Start.ToUpperInvariant()))
                {
                    continue;
                }
                NodeName = entry.Name;
                try
                {
                    await using var stream = entry.Open();
                    var settings = new XmlReaderSettings()
                    {
                        Async = true
                    };

                    var reader = XmlReader.Create(stream, settings);
                    while (await reader.ReadAsync())
                    {
                        switch (reader.NodeType)
                        {
                        case XmlNodeType.Element:
                            if (reader.Name == NormativeDocument.ContainerTag)
                            {
                                if (reader.HasAttributes)
                                {
                                    var result = Utils.GetXmlForElement(reader);
                                    try
                                    {
                                        var c = new NormativeDocument(result);
                                        OnDocumentParsed(this, c);
                                        _count++;
                                        if (_count > _take)
                                        {
                                            OnComplete(this);
                                            return;
                                        }
                                    }
                                    catch (Exception e)
                                    {
                                        Debug.WriteLine(e.Message);
                                    }
                                }
                            }

                            break;
                        }
                    }
                }

                catch (Exception e)
                {
                    Debug.WriteLine(e.Message + " " + e.StackTrace);
                }
                OnComplete(this);
            }
        }
Beispiel #2
0
        public void ReadNormativeDocumentXmlEntity(XmlReader reader)
        {
            var dataTable = DataTableFromXmlEntity.DataTableFromXmlEntity.CreateDataTableFromEntity(new NormativeDocument());

            dataTable.TableName = "FIAS_NormativeDocument";

            while (reader.Read())
            {
                reader.ReadToFollowing("NormativeDocument");
                XmlSerializer     serializer        = new XmlSerializer(typeof(NormativeDocument));
                NormativeDocument normativeDocument = (NormativeDocument)serializer.Deserialize(reader);
                if (normativeDocument != null)
                {
                    DataTableFromXmlEntity.DataTableFromXmlEntity.SetDataRow(dataTable, normativeDocument);
                }

                if (dataTable.Rows.Count == MAX_EXPORT_COUNT_NORMANIVE_DOCUMENT)
                {
                    //ToDo   экспорт в базу
                    dataTable.Rows.Clear();
                }
            }

            //ToDo   экспорт в базу
            dataTable.Rows.Clear();
        }
Beispiel #3
0
        /// <summary>
        /// Получение нормативного обьекта
        /// </summary>
        /// <param name="d"></param>
        /// <returns></returns>
        public static DbNormativeDocument Get(this NormativeDocument d)
        {
            if (d.DocNum?.Length > 200)
#pragma warning disable 642
            {
                ; // ловим превышение длины
            }
#pragma warning restore 642
            return(new DbNormativeDocument
            {
                DocDate = d.DocDate.ToNullDateTime(),
                DocImgId = d.DocImgId.ToNullGuid(),
                DocName = d.DocName,
                DocNum = d.DocNum,
                DocType = d.DocNum.ToNullShort(),
                NormDocId = d.NormDocId
            });
        }
Beispiel #4
0
 /// <summary>
 /// Обработчик добавления документа.
 /// </summary>
 /// <param name="s">Отправитель</param>
 /// <param name="doc">Обработанный документ</param>
 protected virtual void OnDocumentParsed(object s, NormativeDocument doc)
 {
     DocumentParsed?.Invoke(s, new NormativeDocumentEventArgs(doc, _count));
 }
Beispiel #5
0
 /// <summary>
 /// Конструктор
 /// </summary>
 /// <param name="doc">Документ</param>
 /// <param name="count">Общее количество обработанных элементов</param>
 public NormativeDocumentEventArgs(NormativeDocument doc, long count)
 {
     Document = doc;
     Count    = count;
 }