private void UpdateSpcObjByPilot(SpcObject spcObject) { var needToChange = false; var loader = new ObjectLoader(_objectsRepository); loader.Load(spcObject.GlobalId, obj => { if (obj == null) { return; } var builder = _objectModifier.Edit(obj); foreach (var spcColumn in spcObject.Columns) { var spcColVal = ValueTextClear(spcColumn.Value); // проверка нужно ли изменять объект foreach (var attrObj in obj.Attributes) { if (attrObj.Key != spcColumn.TypeName) { continue; } if (attrObj.Value.ToString() == spcColVal) { continue; } needToChange = true; if (int.TryParse(spcColVal, out var i)) { builder.SetAttribute(spcColumn.TypeName, i); } else { builder.SetAttribute(spcColumn.TypeName, spcColVal); } } } // получаем pdf файл из Обозревателя var fileFromPilot = obj.Files.FirstOrDefault(f => IsFileExtension(f.Name, ".pdf")); var doc = spcObject.Documents.FirstOrDefault(f => IsFileExtension(f.FileName, SOURCE_DOC_EXT)); if (doc != null && fileFromPilot != null) { var pdfFile = spcObject.PreviewDocument; // md5 в нижнем регистре расчитывается и возвращается пилотом var fileNameMd5 = CalculatorMd5Checksum.Go(pdfFile); if (!string.IsNullOrEmpty(fileNameMd5) && fileFromPilot.Md5 != fileNameMd5) { needToChange = true; builder.CreateFileSnapshot("").AddFile(pdfFile); } } if (needToChange) { _objectModifier.Apply(); } }); }
private void RunParsingSpw() { if (_xDoc == null) { return; } SpcSections = new List <SpcSection>(); ListSpcProps = new List <DocProp>(); ListSpcObjects = new List <SpcObject>(); var properties = _xDoc.Descendants("property"); foreach (var prop in properties) { string id = null, val = null; foreach (var attr in prop.Attributes()) { if (attr.Name == "id") { id = attr.Value; } if (attr.Name == "value") { val = attr.Value; } } var propertyDescriptions = _xDoc.Descendants("propertyDescription"); foreach (var propertyDescription in propertyDescriptions) { string id2 = null, name = null, typeValue = null, natureId = null, unitId = null; foreach (var attr in propertyDescription.Attributes()) { if (attr.Name == "id") { id2 = attr.Value; } if (attr.Name == "name") { name = attr.Value; } if (attr.Name == "typeValue") { typeValue = attr.Value; } if (attr.Name == "natureId") { natureId = attr.Value; } if (attr.Name == "unitId") { unitId = attr.Value; } } if (id == null || id != id2) { continue; } var spcProp = new DocProp { Name = name, Value = val, TypeValue = typeValue, NatureId = natureId, UnitId = unitId }; ListSpcProps.Add(spcProp); } } var style = _xDoc.Descendants("spcDescription") .FirstOrDefault()? .Descendants("style") .FirstOrDefault(); var strTmp = style?.Attributes().FirstOrDefault(x => x.Name == "id")?.Value.Replace(".", ","); if (decimal.TryParse(strTmp, out decimal resultTmp)) { IdStyle = (int)resultTmp; } else { IdStyle = 0; } var sections = _xDoc.Descendants("section"); bool isName = false, isNumber = false; foreach (var section in sections) { var spcSection = new SpcSection(); foreach (var attr in section.Attributes()) { if (attr.Name == "name") { spcSection.Name = attr.Value; isName = true; } if (attr.Name != "number") { continue; } var strnum = attr.Value; if (int.TryParse(strnum, out var number)) { spcSection.Number = number; } isNumber = true; } if (isName && isNumber) { SpcSections.Add(spcSection); } isName = false; isNumber = false; } var spcObjects = _xDoc.Descendants("spcObjects"); foreach (var e in spcObjects) { foreach (var o in e.Elements()) { var spcObject = new SpcObject(); foreach (var attr in o.Attributes().Where(attr => attr.Name == "id")) { spcObject.Id = attr.Value; } foreach (var context in o.Elements()) { if (context.Name.ToString() == "section") { foreach (var strnum in from attr in context.Attributes() where attr.Name == "number" select attr.Value) { if (int.TryParse(strnum, out var number)) { spcObject.SectionNumber = number; } } } if (context.Name.ToString() == "columns") { foreach (var column in context.Elements()) { var col = new SpcColumn(); foreach (var attr in column.Attributes()) { if (attr.Name == "name") { col.Name = attr.Value; } if (attr.Name == "typeName") { col.TypeName = attr.Value; } if (attr.Name == "number") { col.Number = Convert.ToInt32(attr.Value); } if (attr.Name == "blockNumber") { col.BlockNumber = Convert.ToInt32(attr.Value); } if (attr.Name == "value") { col.Value = attr.Value; } } // добавляем колонку спецификации в объект spcObject.Columns.Add(col); } } if (context.Name.ToString() == "additionalColumns") { foreach (var column in context.Elements()) { var col = new AddColumn(); foreach (var attr in column.Attributes()) { if (attr.Name == "name") { col.Name = attr.Value; } if (attr.Name == "typeName") { col.TypeName = attr.Value; } if (attr.Name == "number") { col.Number = Convert.ToInt32(attr.Value); } if (attr.Name == "blockNumber") { col.BlockNumber = Convert.ToInt32(attr.Value); } if (attr.Name == "value") { col.Value = attr.Value; } } // добавляем колонку спецификации в объект spcObject.AColumns.Add(col); } } if (context.Name.ToString() != "documents") { continue; } foreach (var document in context.Elements()) { var doc = new SpcDocument(); foreach (var attr in document.Attributes().Where(attr => attr.Name == "fileName")) { doc.FileName = attr.Value; } // добавить документы связанные с объектом спецификации spcObject.Documents.Add(doc); } } // добавляем в список объект спецификации ListSpcObjects.Add(spcObject); } // парсинг объектов завершён } // все циклы завершены JointSpcNameAndSpcObj(); // вызываем событие о завершении парсинга. IsCompleted = true; }
private void CreateNewSpcObjToPilot(IDataObject parent, SpcObject spcObject) { var t = GetTypeBySectionName(spcObject.SectionName); if (t == null) { return; } var builder = _objectModifier.Create(parent, t); spcObject.GlobalId = builder.DataObject.Id; foreach (var attr in spcObject.Columns) { var val = attr.Value; if (string.IsNullOrEmpty(attr.TypeName) || string.IsNullOrEmpty(val)) { continue; } // очишаем значение от служебных символов и выражений val = ValueTextClear(val); // в качестве наименование передаётся внутренее имя (а не то которое отображается) if (int.TryParse(val, out var i)) { builder.SetAttribute(attr.TypeName, i); } else { builder.SetAttribute(attr.TypeName, val); } } var doc = spcObject.Documents.FirstOrDefault(f => IsFileExtension(f.FileName, SOURCE_DOC_EXT)); if (doc == null) { return; } var fileName = doc.FileName; string[] paths = { fileName }; var storageObjects = _objectsRepository.GetStorageObjects(paths); var storageObject = storageObjects.FirstOrDefault(); if (File.Exists(spcObject.PreviewDocument)) { builder.AddFile(spcObject.PreviewDocument); } _objectModifier.Apply(); if (storageObject == null) { return; } if (storageObject.DataObject.Id == Guid.Empty) { return; } var loader = new ObjectLoader(_objectsRepository); loader.Load(spcObject.GlobalId, obj => { foreach (var relation in obj.Relations.Where(x => x.Type == ObjectRelationType.SourceFiles)) { _objectModifier.RemoveLink(obj, relation); } var relationId = Guid.NewGuid(); var relationName = relationId.ToString(); const ObjectRelationType relationType = ObjectRelationType.SourceFiles; var selectedRelation = new Relation { Id = relationId, Type = relationType, Name = storageObject.DataObject.DisplayName, TargetId = storageObject.DataObject.Id }; var chosenRelation = new Relation { Id = relationId, Type = relationType, Name = relationName, TargetId = builder.DataObject.Id }; _objectModifier.CreateLink(selectedRelation, chosenRelation); _objectModifier.Apply(); }); }
private void RunParsingSpw() { if (_xDoc == null) return; SpcSections = new List<SpcSection>(); ListSpcProps = new List<SpcProp>(); ListSpcObjects = new List<SpcObject>(); var properties = _xDoc.Descendants("property"); foreach (var prop in properties) { string id = null, val = null; foreach (var attr in prop.Attributes()) { if (attr.Name == "id") id = attr.Value; if (attr.Name == "value") val = attr.Value; } var propertyDescriptions = _xDoc.Descendants("propertyDescription"); foreach (var propertyDescription in propertyDescriptions) { string id2 = null, name = null, typeValue = null, natureId = null, unitId = null; foreach (var attr in propertyDescription.Attributes()) { if (attr.Name == "id") id2 = attr.Value; if (attr.Name == "name") name = attr.Value; if (attr.Name == "typeValue") typeValue = attr.Value; if (attr.Name == "natureId") natureId = attr.Value; if (attr.Name == "unitId") unitId = attr.Value; } if (id == null || id != id2) continue; var spcProp = new SpcProp { Name = name, Value = val, TypeValue = typeValue, NatureId = natureId, UnitId = unitId }; ListSpcProps.Add(spcProp); } } var sections = _xDoc.Descendants("section"); bool isName = false, isNumber = false; foreach (var section in sections) { var spcSection = new SpcSection(); foreach (var attr in section.Attributes()) { if (attr.Name == "name") { spcSection.Name = attr.Value; isName = true; } if (attr.Name != "number") continue; var strnum = attr.Value; var number = 0; if (int.TryParse(strnum, out number)) spcSection.Number = number; isNumber = true; } if (isName && isNumber) SpcSections.Add(spcSection); isName = false; isNumber = false; } var spcObjects = _xDoc.Descendants("spcObjects"); foreach (var e in spcObjects) { foreach (var o in e.Elements()) { var spcObject = new SpcObject(); foreach (var attr in o.Attributes().Where(attr => attr.Name == "id")) spcObject.Id = attr.Value; foreach (var context in o.Elements()) { if (context.Name.ToString() == "section") { foreach (var strnum in from attr in context.Attributes() where attr.Name == "number" select attr.Value) { int number; if (int.TryParse(strnum, out number)) spcObject.SectionNumber = number; } } if (context.Name.ToString() == "columns") { foreach (var column in context.Elements()) { var col = new SpcColumn(); foreach (var attr in column.Attributes()) { if (attr.Name == "name") col.Name = attr.Value; if (attr.Name == "typeName") col.TypeName = attr.Value; if (attr.Name == "value") col.Value = attr.Value; } // добавляем колонку спецификации в объект spcObject.Columns.Add(col); } } if (context.Name.ToString() != "documents") continue; foreach (var document in context.Elements()) { var doc = new SpcDocument(); foreach (var attr in document.Attributes().Where(attr => attr.Name == "fileName")) { doc.FileName = attr.Value; } // добавить документы связанные с объектом спецификации spcObject.Documents.Add(doc); } } // добавляем в список объект спецификации ListSpcObjects.Add(spcObject); } // парсинг объектов завершён } // все циклы завершены JointSpcNameAndSpcObj(); // вызываем событие о завершении парсинга. IsCompleted = true; }
private void CreateNewObjectsToPilot(IDataObject parent, SpcObject spcObject) { var t = GetTypeBySectionName(spcObject.SectionName); if (t == null) return; var builder = _objectModifier.Create(parent, t); spcObject.GlobalId = builder.DataObject.Id; foreach (var attr in spcObject.Columns) { var val = attr.Value; if (string.IsNullOrEmpty(attr.TypeName) || string.IsNullOrEmpty(val)) continue; // очишаем значение от служебных символов и выражений val = ValueTextClear(val); // в качестве наименование передаётся внутренее имя (а не то которое отображается) int i; if (int.TryParse(val, out i)) builder.SetAttribute(attr.TypeName, i); else builder.SetAttribute(attr.TypeName, val); } var doc = spcObject.Documents.FirstOrDefault(f => IsFileExtension(f.FileName, SOURCE_DOC_EXT)); if (doc != null) { var fileName = doc.FileName; string[] paths = { fileName }; var storageObjects = _objectsRepository.GetStorageObjects(paths); var storageObject = storageObjects.FirstOrDefault(); if (storageObject != null) builder.AddSourceFileRelation(storageObject.DataObject.Id); if (File.Exists(spcObject.PdfDocument)) { builder.AddFile(spcObject.PdfDocument); }; } _objectModifier.Apply(); }
private void UpdatePilotObject(SpcObject spcObject) { if (_dataObjects.Count == 0) return; var needToChange = false; var obj = _dataObjects.FirstOrDefault(o => spcObject.GlobalId == o.Id); if (obj == null) return; var builder = _objectModifier.Edit(obj); foreach (var spcColumn in spcObject.Columns) { var spcColVal = ValueTextClear(spcColumn.Value); // проверка нужно ли изменять объект foreach (var attrObj in obj.Attributes) { if (attrObj.Key != spcColumn.TypeName) continue; if (attrObj.Value.ToString() != spcColVal) { needToChange = true; int i; if (int.TryParse(spcColVal, out i)) builder.SetAttribute(spcColumn.TypeName, i); else builder.SetAttribute(spcColumn.TypeName, spcColVal); } } } // получаем pdf файл из Обозревателя var fileFromPilot = obj.Files.FirstOrDefault(f => IsFileExtension(f.Name, ".pdf")); var doc = spcObject.Documents.FirstOrDefault(f => IsFileExtension(f.FileName, SOURCE_DOC_EXT)); if (doc != null && fileFromPilot != null) { var pdfFile = spcObject.PdfDocument; // md5 в нижнем регистре расчитывается и возвращается пилотом var fileNameMd5 = CalculatorMd5Checksum.Go(pdfFile); if (!string.IsNullOrEmpty(fileNameMd5) && fileFromPilot.Md5 != fileNameMd5) { needToChange = true; builder.AddFile(pdfFile); } } //TODO: внесмотря на провекрку выдаётся ошибка, если изменился только чертёж if (needToChange) _objectModifier.Apply(); }