public GroupedFieldTransformer(GroupedField field) : base("group", field.Negate)
 {
     Keys   = field.Names;
     Types  = field.FieldTypes.Distinct().ToList();
     Values = new List <object>();
     if (field.IsTerm)
     {
         TermTypes   = new List <TermTypes>();
         BoostValues = new List <double>();
         foreach (var x in field.TermValues)
         {
             TermTypes.Add(x.TermType);
             BoostValues.Add(x.BoostValue);
             Values.Add(x.Value);
         }
     }
     else
     {
         Values.AddRange(field.Values);
     }
 }
示例#2
0
 public static SearchNode GroupedSearchNode(GroupedField groupedField)
 {
     return(new SearchNode(groupedField));
 }
示例#3
0
 private SearchNode(GroupedField grouped)
 {
     Grouped = grouped;
     Type    = SearchNodeType.Grouped;
 }
        ///-------------------------------------------------------------------------------------------------
        /// <summary>
        /// Выгружаем дерево категорий и конвертируем в группы 1. Рекурсивное чтение дерева категорий 2.
        /// Формирование списка группа из распарсенного дерева категорий 3. Для каждой группы рекурсивный
        /// поиск и сохранение полей.
        /// </summary>
        ///
        /// <remarks>   SV Milovanov, 30.01.2018. </remarks>
        ///
        /// <returns>
        /// An enumerator that allows foreach to be used to process initialize in this collection.
        /// </returns>
        ///-------------------------------------------------------------------------------------------------
        public override void Reinitialize()
        {
            DCT.Execute(data =>
            {
                //var tree = new List<CategoryTree>();
                //var root = WebWorker.WebDocument.GetElementsByTagName("input").Cast<HtmlElement>()
                //    .Where(q => q.GetAttribute("type") == "radio" && q.GetAttribute("name") == "root_category_id");

                //foreach (var element in root)
                //{
                //    var elementValue = element.GetAttribute("value");

                //    var node = new CategoryTree(element.GetAttribute("title"));
                //    tree.Add(node);
                //    element.InvokeMember("click");
                //    Thread.Sleep(1000);
                //    LoadCategoryTrees(node, elementValue);
                //}

                //var rawGroups = tree.ToGroupCollection().ToList();
                //var sResult2 = DataSerializer.Serialize(rawGroups);
                var xml       = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "groups4.xml"));
                var rawGroups = DataSerializer.Deserialize <IEnumerable <GroupPackage> >(xml).ToList();


                //foreach (var group in rawGroups)
                //{
                //    Console.WriteLine(group);

                //        //1
                //        if (!string.IsNullOrEmpty(group.Category1))
                //    {
                //        var categoryRadio = WebWorker.WebDocument.GetElementsByTagName("input").Cast<HtmlElement>()
                //       .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == group.Category1);
                //        if (categoryRadio == null) return;
                //        categoryRadio.InvokeMember("click");
                //    }
                //    Thread.Sleep(1000);
                //        //2
                //        if (!string.IsNullOrEmpty(group.Category2))
                //    {
                //        var serviceRadio = WebWorker.WebDocument.GetElementsByTagName("input").Cast<HtmlElement>()
                //            .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == group.Category2);
                //        if (serviceRadio == null) return;
                //        serviceRadio.InvokeMember("click");
                //    }
                //    Thread.Sleep(1000);
                //        //3
                //        if (!string.IsNullOrEmpty(group.Category3))
                //    {
                //        var serviceTypeRadio = WebWorker.WebDocument.GetElementsByTagName("input").Cast<HtmlElement>()
                //            .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == group.Category3);
                //        if (serviceTypeRadio == null) return;
                //        serviceTypeRadio.InvokeMember("click");
                //    }
                //    Thread.Sleep(1000);
                //        //4
                //        if (!string.IsNullOrEmpty(group.Category4))
                //    {
                //        var serviceTypeRadio2 = WebWorker.WebDocument.GetElementsByTagName("input").Cast<HtmlElement>()
                //        .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == group.Category4);
                //        if (serviceTypeRadio2 == null) return;
                //        serviceTypeRadio2.InvokeMember("click");
                //    }
                //    Thread.Sleep(1000);
                //        //5
                //        if (!string.IsNullOrEmpty(group.Category5))
                //    {
                //        var serviceTypeRadio3 = WebWorker.WebDocument.GetElementsByTagName("input").Cast<HtmlElement>()
                //        .FirstOrDefault(q => q.GetAttribute("type") == "radio" && q.GetAttribute("title") == group.Category5);
                //        if (serviceTypeRadio3 == null) return;
                //        serviceTypeRadio3.InvokeMember("click");
                //    }

                //    Thread.Sleep(3000);

                //    fields.Clear();
                //    ParseMainComponent();
                //    ParseLocationComponent();
                //    ParseComissionComponent();
                //    ParsePhotoComponent();
                //    ParseVideoComponent();
                //    ParseParametersComponent();
                //    group.Fields = new Dictionary<string, FieldPackage>(fields);
                //}

                var sResult = DataSerializer.Serialize(rawGroups);
                //Fill groups
                foreach (var group in rawGroups)
                {
                    Console.WriteLine(group);

                    var hash    = group.GetHash();
                    var dbGroup = data.Db1.Groups.FirstOrDefault(q => q.Hash == hash);

                    if (dbGroup == null)
                    {
                        dbGroup = new Group
                        {
                            BoardId      = Uid,
                            Hash         = group.GetHash(),
                            HasRemoved   = false,
                            LastChangeId = null,
                        };
                        data.Db1.Groups.Add(dbGroup);
                        data.Db1.SaveChanges();
                    }

                    for (var i = 0; i < group.Categories.Length; i++)
                    {
                        if (group.Categories[i] == null)
                        {
                            break;
                        }
                        var parentId = Guid.Empty;
                        if (i > 0)
                        {
                            var parentName = group.Categories[i - 1];
                            var parent     = data.Db1.CategoryTemplates.FirstOrDefault(q => q.Name == parentName);
                            if (parent != null)
                            {
                                parentId = parent.Id;
                            }
                        }
                        var categoryName = group.Categories[i];
                        var dbCategory   = data.Db1.CategoryTemplates.FirstOrDefault(q => q.Name == categoryName && q.ParentId == parentId);
                        if (dbCategory == null)
                        {
                            dbCategory = new CategoryTemplate
                            {
                                BoardId      = Uid,
                                Name         = group.Categories[i],
                                HasRemoved   = false,
                                LastChangeId = null,
                                ParentId     = parentId
                            };
                            data.Db1.CategoryTemplates.Add(dbCategory);
                            data.Db1.SaveChanges();
                        }

                        var dbGroupedCategory = new GroupedCategory
                        {
                            CategoryId   = dbCategory.Id,
                            GroupId      = dbGroup.Id,
                            HasRemoved   = false,
                            LastChangeId = null
                        };
                        data.Db1.GroupedCategories.Add(dbGroupedCategory);
                        data.Db1.SaveChanges();
                    }
                    foreach (var f in group.Fields)
                    {
                        var dbField = data.Db1.FieldTemplates.FirstOrDefault(q => q.Name == f.Key);
                        if (dbField == null)
                        {
                            dbField = new FieldTemplate
                            {
                                Name         = f.Key,
                                Attribute    = f.Value.HasId ? "id" : "name",
                                Tag          = f.Value.Tag,
                                IsImage      = false,
                                IsDynamic    = false,
                                LastChangeId = null,
                                HasRemoved   = false,
                            };
                            data.Db1.FieldTemplates.Add(dbField);
                            data.Db1.SaveChanges();
                        }

                        var dbGroupedField = new GroupedField
                        {
                            FieldId      = dbField.Id,
                            GroupId      = dbGroup.Id,
                            HasRemoved   = false,
                            LastChangeId = null,
                            HtmlId       = f.Value.Id,
                        };
                        data.Db1.GroupedFields.Add(dbGroupedField);
                        data.Db1.SaveChanges();

                        if (f.Value.Options != null && f.Value.Options.Length > 0)
                        {
                            foreach (var o in f.Value.Options)
                            {
                                var dbOption = new SelectOption
                                {
                                    GroupedFieldId = dbGroupedField.Id,
                                    Code           = o.Value,
                                    Name           = o.Text
                                };
                                data.Db1.SelectOptions.Add(dbOption);
                                data.Db1.SaveChanges();
                            }
                        }
                    }
                }
            });
        }