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();
                }
            });
        }
Beispiel #2
0
        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();
 }