예제 #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(Stead.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 == Stead.ContainerTag)
                            {
                                if (reader.HasAttributes)
                                {
                                    var result = Utils.GetXmlForElement(reader);
                                    try
                                    {
                                        var c = new Stead(result);
                                        OnSteadParsed(this, c);
                                        _count++;
                                        if (_count > _take)
                                        {
                                            OnComplete(this);
                                            return;
                                        }
                                    }
                                    catch (Exception e)
                                    {
                                        Debug.WriteLine($"{e.Message} {e.StackTrace}");
                                    }
                                }
                            }

                            break;
                        }
                    }
                }

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

            dataTable.TableName = "FIAS_Stead";

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

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

            //ToDo   экспорт в базу
            dataTable.Rows.Clear();
        }
예제 #3
0
        /// <summary>
        /// Получение DbStead
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static DbStead Get(this Stead s)
        {
            if (s.Number?.Length > 120)
#pragma warning disable 642
            {
                ; // ловим превышение длины
            }
#pragma warning restore 642
            return(new DbStead
            {
                STEADID = s.STEADID,
                IFNSUL = s.IFNSUL.ToNullInt(),
                OKATO = s.OKATO.ToNullLong(),
                RegionCode = s.RegionCode,
                PostalCode = s.PostalCode.ToNullInt(),
                NORMDOC = s.NORMDOC.ToNullGuid(),
                OKTMO = s.OKTMO.ToNullLong(),
                TERRIFNSUL = s.TERRIFNSUL.ToNullInt(),
                IFNSFL = s.IFNSFL.ToNullInt(),
                TERRIFNSFL = s.TERRIFNSFL.ToNullInt(),
                STEADGUID = s.STEADGUID,
                CADNUM = s.CADNUM,
                DIVTYPE = s.DIVTYPE,
                ENDDATE = s.ENDDATE,
                LIVESTATUS = s.LIVESTATUS,
                NEXTID = s.NEXTID.ToNullGuid(),
                Number = s.Number,
                OPERSTATUS = s.OPERSTATUS,
                PARENTGUID = s.PARENTGUID.ToNullGuid(),
                PREVID = s.PREVID.ToNullGuid(),
                STARTDATE = s.STARTDATE,
                UPDATEDATE = s.UPDATEDATE
            });
        }
예제 #4
0
        void WrongStead()
        {
            var result = @"<Stead STEADGUID=""7b25c696-e425-43c8-b065-a7a985158db6"" NUMBER=""20Д"" REGIONCODE=""22"" POSTALCODE=""658047"" IFNSFL=""2208"" IFNSUL=""2208"" TERRIFNSFL=""2263"" TERRIFNSUL=""2263"" OKATO=""01232820001"" UPDATEDATE=""2017-03-07"" PARENTGUID="""" STEADID=""7b25c696-e425-43c8-b065-a7a985158db6"" OPERSTATUS=""10"" STARTDATE=""2010-02-01"" ENDDATE=""2010-02-02"" NEXTID=""3930b99c-b6b8-421f-ab04-bbf6ab6acd68"" OKTMO=""01632420101"" LIVESTATUS=""0"" DIVTYPE=""0"" NORMDOC=""40c9847c-ec60-444a-8e88-d0f59b8f0608""  />";
            var sbs    = result.Substring(214);
            var ret    = Guid.Parse("");

            var c = new Stead(result);
        }
예제 #5
0
 /// <summary>
 /// Обработчик добавления Stead.
 /// </summary>
 /// <param name="s">Отправитель</param>
 /// <param name="doc">Обработанный документ</param>
 protected virtual void OnSteadParsed(object s, Stead doc)
 {
     SteadParsed?.Invoke(s, new SteadEventArgs(doc, _count));
 }
예제 #6
0
 /// <summary>
 /// Конструктор
 /// </summary>
 /// <param name="doc">Документ</param>
 /// <param name="count">Количество уже обработанных</param>
 public SteadEventArgs(Stead doc, long count)
 {
     Document = doc;
     Count    = count;
 }