/// <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); } }
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(); }
/// <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 }); }
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); }
/// <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)); }
/// <summary> /// Конструктор /// </summary> /// <param name="doc">Документ</param> /// <param name="count">Количество уже обработанных</param> public SteadEventArgs(Stead doc, long count) { Document = doc; Count = count; }