Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        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();
            }
        }
Ejemplo n.º 4
0
        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;
        }