public void Init() { this.ModelList = new ObservableCollection <TreeViewEx.TreeViewExNode>(); var connection = LoadingConnection.GetConnectionList(); foreach (var item in connection) { var id = GuidExtend.NewId(); TreeViewExNode node = new TreeViewExNode() { ID = id, Name = "N" + id, ConnectionId = item.Id, IsExpanded = false, Level = 1, Header = item.ConnectionName, DataSource = item.DataSource, DataBase = item.DataBase, FontSize = 18 }; node.MouseDoubleClick += ServerClick; ModelList.Add(node); } this.DataContext = this; }
/// <summary> /// 构造插入command /// </summary> /// <param name="operateFields"></param> /// <param name="resolveInitContext"></param> /// <param name="defaultFields"></param> /// <returns></returns> public static (List <string> CommandList, List <NGPKeyValuePair> PrimaryKeys, NGPResponse Response) BuildInsertCommand( List <DynamicOperateFieldRequest> operateFields, ResolveInitContext resolveInitContext, List <AppDefaultFieldConfig> defaultFields) { // 获取解析对象 var engine = Singleton <IEngine> .Instance.Resolve <ILinqParserHandler>(); var parserCommand = Singleton <IEngine> .Instance.Resolve <ILinqParserCommand>(); var workContext = Singleton <IEngine> .Instance.Resolve <IWorkContext>(); var unitRepository = Singleton <IEngine> .Instance.Resolve <IUnitRepository>(); var commandList = new List <string>(); var primaryKeys = new List <NGPKeyValuePair>(); // 根据字段进行分组 var operatorGroupList = ( from field in ( from operateField in operateFields join formField in resolveInitContext.FormFields on operateField.FieldKey equals formField.FieldKey select new { formField.FieldKey, FormField = formField, OperateField = operateField }) group field by AppConfigExtend.GetFormKey(field.FieldKey) into g select new { FormKey = g.Key, FieldList = g.ToList() }).ToList(); foreach (var operatorForm in operatorGroupList) { // 获取form的配置 var formItem = resolveInitContext.Forms.FirstOrDefault(s => s.FormKey == operatorForm.FormKey); if (formItem == null) { continue; } // 获取验证字段 var operatorFieldKeys = operatorForm.FieldList.Select(s => s.FieldKey).ToList(); var uniqueFields = new List <FormUniqueConfig>(); if (formItem.ExtendConfig != null && !formItem.ExtendConfig.UniqueFields.IsNullOrEmpty()) { uniqueFields = formItem.ExtendConfig.UniqueFields.Where(s => operatorFieldKeys.Contains(s.FieldKey)).ToList(); } var insertElementList = new List <NGPKeyValuePair <object> >(); // 添加主键 var primaryKey = AppConfigExtend.GetFormPrimaryKey(operatorForm.FormKey); var primaryKeyValue = GuidExtend.NewGuid(); primaryKeys.Add(new NGPKeyValuePair { Key = primaryKey, Value = primaryKeyValue }); insertElementList.Add(new NGPKeyValuePair <object> { Key = primaryKey, Value = parserCommand.LinqStringFormatter(primaryKeyValue) }); foreach (var operatorField in operatorForm.FieldList) { // 需要验证 var uniqueField = uniqueFields.FirstOrDefault(s => s.FieldKey == operatorField.FieldKey); if (uniqueField != null) { // 组装验证逻辑 var andDsls = new List <string>(); // 添加当前字段的值 var currentUniqueDsl = parserCommand.EqualCommand(operatorField.FieldKey, operatorField.OperateField.Value); if (operatorField.FormField.DbConfig.ColumnType.ToEnum <FieldColumnType>() == FieldColumnType.String) { currentUniqueDsl = parserCommand.EqualCommand(operatorField.FieldKey, parserCommand.LinqStringFormatter(Convert.ToString(operatorField.OperateField.Value))); } andDsls.Add(currentUniqueDsl); // 获取应用配置里是删除标记的字段 var defaultField = resolveInitContext.App.ExtendConfig.DefaultFields.FirstOrDefault(s => s.DefaultType.Contains(AppDefaultFieldType.Delete.ToString("G")) && s.ColumnType.ToEnum <FieldColumnType>() == FieldColumnType.Bool); andDsls.Add(parserCommand.EqualCommand(AppConfigExtend.GenerateFieldKey(operatorForm.FormKey, defaultField.ColumnName), 0)); // 约束验证 if (!uniqueField.ScopeFieldKeys.IsNullOrEmpty()) { foreach (var scopeFieldKey in uniqueField.ScopeFieldKeys) { // 先从操作字段获取约束验证的值 object scopeValue = string.Empty; var scopeItem = operatorForm.FieldList.FirstOrDefault(s => s.FieldKey == scopeFieldKey); if (scopeItem != null && scopeItem.OperateField.Value != null) { if (scopeItem.OperateField.Value.GetType() == typeof(string)) { andDsls.Add(parserCommand.EqualCommand(scopeItem.FieldKey, parserCommand.LinqStringFormatter(Convert.ToString(scopeItem.OperateField.Value)))); continue; } andDsls.Add(parserCommand.EqualCommand(scopeItem.FieldKey, scopeItem.OperateField.Value)); continue; } } } // 验证where var uniqueWhere = parserCommand.JoinCondition(andDsls); var uniqueParserResult = engine.Resolve(new LinqParserRequest { Current = workContext.Current, DslContent = uniqueWhere }); var uniqueWhereCommand = parserCommand.WhereCommand(uniqueParserResult.Command.CommandText); var uniqueCommand = parserCommand.SelectTotalCountQuery(operatorForm.FormKey, string.Empty, uniqueWhereCommand); var count = unitRepository.ExecuteScalar <int>(uniqueCommand, uniqueParserResult.Command.ParameterCollection); if (count > 0) { return(null, null, new NGPResponse { AffectedRows = 0, Message = string.Format(CommonResource.Exist, operatorField.FormField.FieldName), Status = OperateStatus.Error }); } } // 如果值为null if (string.IsNullOrWhiteSpace(Convert.ToString(operatorField.OperateField.Value))) { // 不为空验证 if (operatorField.FormField.ExtendConfig.IsRequired == true) { return(null, null, new NGPResponse { AffectedRows = 0, Message = string.Format(CommonResource.NotEmpty, operatorField.FormField.FieldName), Status = OperateStatus.Error }); } insertElementList.Add(new NGPKeyValuePair <object> { Key = operatorField.FieldKey, Value = parserCommand.NullCommandKey }); continue; } // 添加操作值 if (operatorField.FormField.DbConfig.ColumnType.ToEnum <FieldColumnType>() == FieldColumnType.String || operatorField.FormField.DbConfig.ColumnType.ToEnum <FieldColumnType>() == FieldColumnType.Attachment) { insertElementList.Add(new NGPKeyValuePair <object> { Key = operatorField.FieldKey, Value = parserCommand.LinqStringFormatter(Convert.ToString(operatorField.OperateField.Value)) }); continue; } insertElementList.Add(new NGPKeyValuePair <object> { Key = operatorField.FieldKey, Value = operatorField.OperateField.Value }); } foreach (var field in defaultFields) { var fieldKey = AppConfigExtend.GenerateFieldKey(operatorForm.FormKey, field.ColumnName); var paramKey = parserCommand.ParamCommand(fieldKey); switch (field.FieldType.ToEnum <FieldType>()) { case FieldType.EmployeeType: { var value = parserCommand.LinqStringFormatter(workContext.Current.EmplId); insertElementList.Add(new NGPKeyValuePair <object> { Key = fieldKey, Value = value }); break; } case FieldType.DeptType: { var value = parserCommand.LinqStringFormatter(workContext.Current.DeptId); insertElementList.Add(new NGPKeyValuePair <object> { Key = fieldKey, Value = value }); break; } case FieldType.FormType: { switch (field.ColumnType.ToEnum <FieldColumnType>()) { case FieldColumnType.Time: case FieldColumnType.Date: case FieldColumnType.DateTime: { insertElementList.Add(new NGPKeyValuePair <object> { Key = fieldKey, Value = parserCommand.LinqDateCommand }); break; } case FieldColumnType.Bool: { insertElementList.Add(new NGPKeyValuePair <object> { Key = fieldKey, Value = 0 }); break; } case FieldColumnType.Decimal: case FieldColumnType.Integer: insertElementList.Add(new NGPKeyValuePair <object> { Key = fieldKey, Value = 0 }); break; case FieldColumnType.String: case FieldColumnType.Bits: default: break; } break; } case FieldType.GroupType: case FieldType.RelationType: default: break; } } var selectElementCommand = parserCommand.JoinSelect(insertElementList.Select(s => s.Key)); var paramElementCommand = parserCommand.JoinParam(insertElementList.Select(s => s.Value)); var insertCommand = parserCommand.LinqInsertCommand(operatorForm.FormKey, selectElementCommand, paramElementCommand); commandList.Add(insertCommand); } return(commandList, primaryKeys, null); }
private void Hao123MoviesCrawler(List <string> urlList, bool isDetial = false) { HtmlParser htmlParser = new HtmlParser(); string resource = Const.SourcesType.Hao123; for (var i = 0; i < urlList.Count; i++) { var crawler = new SimpleCrawler(); crawler.OnStart += (s, e) => { Console.WriteLine("爬虫开始抓取地址:" + e.Uri.ToString()); }; crawler.OnError += (s, e) => { Console.WriteLine("爬虫抓取出现错误:" + e.Uri.ToString() + ",异常消息:" + e.Exception.Message); }; crawler.OnCompleted += (s, e) => { if (isDetial) { var dom = htmlParser.ParseDocument(e.PageSource); var moviesInfo = new MoviesInfo(); var urlSourceList = new List <UrlSource>(); moviesInfo.Id = GuidExtend.NewGuid(); moviesInfo.Resource = resource; moviesInfo.CreateTime = DateTime.Now; var a = dom.QuerySelectorAll("div.poster>a"); if (a.Any()) { moviesInfo.Name = a[0].GetAttribute("title"); //--电影名称 } else { return; } var stars = dom.All.Where(sl => sl.GetAttribute("monkey") == "actor").ToList(); if (stars.Any()) { moviesInfo.Stars = string.Join(",", stars[0].QuerySelectorAll("a").Select(X => X.InnerHtml).ToList().Distinct()); } var type = dom.All.Where(sl => sl.GetAttribute("monkey") == "category").ToList(); if (type.Any()) { moviesInfo.Type = string.Join(",", type[0].QuerySelectorAll("a").Select(X => X.InnerHtml).ToList().Distinct()); } var area = dom.All.Where(sl => sl.GetAttribute("monkey") == "area").ToList(); if (area.Any()) { moviesInfo.Area = string.Join(",", area[0].QuerySelectorAll("a").Select(X => X.InnerHtml).ToList().Distinct()); } var year = dom.All.Where(sl => sl.GetAttribute("monkey") == "decade").ToList(); if (year.Any()) { moviesInfo.Year = string.Join(",", year[0].QuerySelectorAll("a").Select(X => X.InnerHtml).ToList().Distinct()); } var img = dom.QuerySelectorAll("div.poster>a>img"); if (img.Any()) { moviesInfo.ImageUrl = img[0].GetAttribute("src"); //--图片 } var des = dom.QuerySelectorAll("p.abstract>em"); if (des.Any()) { moviesInfo.Description = des[0].InnerHtml; } var url = dom.QuerySelectorAll("div.source>a.play-btn"); if (url.Any()) { var urlSource = new UrlSource(); urlSource.Url = url[0].GetAttribute("href"); urlSource.VideoSource = url[0].GetAttribute("alog-text"); urlSource.Id = GuidExtend.NewGuid(); urlSource.MovieId = moviesInfo.Id; urlSource.Resource = resource; urlSourceList.Add(urlSource); } var urls = dom.QuerySelectorAll("div.source")[0].QuerySelectorAll("ul>li>a"). Select(x => new UrlSource { Id = GuidExtend.NewGuid(), MovieId = moviesInfo.Id, Url = x.GetAttribute("href"), VideoSource = x.TextContent, Resource = resource }); if (urls.Any()) { urlSourceList.AddRange(urls); } if (!string.IsNullOrEmpty(moviesInfo.Name) && urlSourceList.Count > 0) { var oldData = _repository.All <MoviesInfo>(sl => sl.Name == moviesInfo.Name && sl.ImageUrl == moviesInfo.ImageUrl); oldData.DeleteFromQuery(); _repository.DeleteByExpression <UrlSource>(sl => oldData.Select(m => m.Id).Contains(sl.MovieId)); _repository.Insert(moviesInfo, true); _repository.BulkInsert <UrlSource>(urlSourceList); } } else { var dom = htmlParser.ParseDocument(e.PageSource); var MovieUrlList = dom.QuerySelectorAll("li.card>a").Select(a => a.GetAttribute("href")).ToList(); Hao123MoviesCrawler(MovieUrlList, true); } }; crawler.Start(new Uri(urlList[i])).Wait(); } }
private void TreeItemClick(TreeViewExNode item, ItemTypes itemTypes) { if (!item.IsSelected || item.HasItems) { return; } item.Items.Clear(); var data = new List <string>(); switch (itemTypes) { case ItemTypes.Server: data = Service.GetDataBases(item.ConnectionStr, item.DataType); break; case ItemTypes.DataBase: data = Service.GetTables(item.ConnectionStr, item.DataType, item.DataBase); break; } DockPanel1.RegisterName(item.Name, item); ContextMenu menu = GetOpenItemContextMenu(item.ID, itemTypes); item.ContextMenu = menu; foreach (var dataItem in data) { var id = GuidExtend.NewId(); TreeViewExNode node = new TreeViewExNode(); node.ID = id; node.DataType = item.DataType; node.Name = "N" + id; node.IsExpanded = false; node.Level = item.Level + 1; node.Header = dataItem; node.FontSize = item.FontSize - 2; node.DataSource = item.DataSource; node.ConnectionId = item.ConnectionId; node.ConnectionStr = item.ConnectionStr; switch (itemTypes) { case ItemTypes.Server: node.MouseDoubleClick += DataBaseClick; node.DataBase = dataItem; break; case ItemTypes.DataBase: node.MouseDoubleClick += TableClick; node.DataBase = item.DataBase; node.TableKey = dataItem; break; } item.Items.Add(node); } item.IsExpanded = true; }