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); } }
public static SearchNode GroupedSearchNode(GroupedField groupedField) { return(new SearchNode(groupedField)); }
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(); } } } } }); }