/// <summary>
        /// 报表,删除defautcode
        /// </summary>
        /// <param name="Setting"></param>
        protected void RemoveDefautcodeFromSC(ReportWidget Setting)
        {
            List <ReportWidgetColumn> columns = new List <ReportWidgetColumn>();

            if (Setting.Series != null && Setting.Series.Length > 0)
            {
                foreach (ReportWidgetColumn q in Setting.Series)
                {
                    if (q.ColumnCode == ReportWidgetColumn.DefaultCountCode)
                    {
                        continue;
                    }
                    columns.Add(q);
                }
                Setting.Series = columns.ToArray();
            }
            columns = new List <ReportWidgetColumn>();
            if (Setting.Categories != null && Setting.Categories.Length > 0)
            {
                foreach (ReportWidgetColumn q in Setting.Categories)
                {
                    if (q.ColumnCode == ReportWidgetColumn.DefaultCountCode)
                    {
                        continue;
                    }
                    columns.Add(q);
                }
                Setting.Categories = columns.ToArray();
            }
        }
        /// <summary>
        /// 获取报表数据源的列集合
        /// </summary>
        /// <param name="Filters"></param>
        /// <param name="reportWidget"></param>
        /// <param name="ReportSource"></param>
        /// <param name="ChildCodes"></param>
        /// <returns></returns>
        protected List <ReportWidgetColumn> GetSourceColumns(ReportFilter[] Filters, ReportWidget reportWidget, ReportSource ReportSource, out Dictionary <string, ColumnSummary> ChildCodes)
        {
            ChildCodes = new Dictionary <string, ColumnSummary>();
            List <ReportWidgetColumn> SourceColumns = this.Engine.ReportQuery.GetSourceColumns(this.Engine, reportWidget, ReportSource);
            List <ReportWidgetColumn> results       = new List <ReportWidgetColumn>();

            foreach (ReportWidgetColumn c in SourceColumns)
            {
                if (reportWidget.ContainColumn(Filters, c.ColumnCode, ReportSource, this.Engine.BizObjectManager, this.Engine.Organization, this.Engine.EngineConfig.DBType, c.DisplayName))
                {
                    results.Add(c);
                }
            }
            //设置主表id为,I_ccc.objectid
            string MainObjectId      = this.GetMainObjectId(ReportSource.SchemaCode);
            string MainObjectId_Name = this.GetMainObjectId_Name(ReportSource.SchemaCode);

            //当有主表和子表字段时,加column 主表objectid,用于明细表关联
            this.DetailNeedMainObjectId(reportWidget, ReportSource, out ChildCodes);
            ReportWidgetColumn MainObjectIdColumn = new ReportWidgetColumn();

            MainObjectIdColumn.ColumnCode  = MainObjectId_Name;
            MainObjectIdColumn.ColumnName  = MainObjectId;
            MainObjectIdColumn.DisplayName = MainObjectId;


            if (!ReportSource.IsUseSql)
            {
                results.Add(MainObjectIdColumn);
            }



            return(results);
        }
        /// <inheritdoc />
        /// <summary>
        /// Create new report widget
        /// </summary>
        /// <param name="reportId"></param>
        /// <returns></returns>
        public virtual async Task <ResultModel> CreateNewReportWidgetAsync(Guid?reportId)
        {
            var result = new ResultModel();
            var report = await _reportContext.DynamicReports.FirstOrDefaultAsync(x => x.Id.Equals(reportId));

            if (report == null)
            {
                result.Errors.Add(new ErrorModel(string.Empty, nameof(NullReferenceException)));
                return(result);
            }

            var widget = new ReportWidget
            {
                WidgetGroupId      = WidgetType.REPORT,
                ReportId           = report.Id,
                Name               = report.Name,
                WidgetTemplateType = WidgetTemplateType.Razor,
                Template           = ""
            };
            await _context.ReportWidgets.AddAsync(widget);

            return(await _context.PushAsync());
        }
        /// <summary>
        /// 是否是明细数据所需要的主键ObjectID
        /// </summary>
        /// <param name="reportWidget"></param>
        /// <param name="ReportSource"></param>
        /// <param name="ChildCodes"></param>
        /// <returns></returns>
        private bool DetailNeedMainObjectId(ReportWidget reportWidget, ReportSource ReportSource, out Dictionary <string, ColumnSummary> ChildCodes)
        {
            ChildCodes = new Dictionary <string, ColumnSummary>();
            Dictionary <string, ColumnSummary> Codes = new Dictionary <string, ColumnSummary>();

            if (ReportSource.ReportSourceAssociations == null || ReportSource.ReportSourceAssociations.Length == 0)
            {
                return(false);
            }
            List <string> schemaCodes   = new List <string>();
            List <string> propertyCodes = new List <string>();
            Dictionary <string, string> propertyNames    = new Dictionary <string, string>();
            Dictionary <string, string> displayNameTable = new Dictionary <string, string>();

            //数据模型是否存在,子对象显示名称
            {
                List <string> tempSchemaCodes  = new List <string>();
                List <string> childSchemaCodes = new List <string>();
                foreach (ReportSourceAssociation q in ReportSource.ReportSourceAssociations)
                {
                    if (q.IsSubSheet && q.MasterField.ToLowerInvariant() == ("I" + q.RootSchemaCode + "_ObjectID").ToLowerInvariant() && q.SubField.ToLowerInvariant() == ("I" + q.SchemaCode + "_ParentObjectID").ToLowerInvariant())
                    {
                        tempSchemaCodes.Add(q.SchemaCode);
                        tempSchemaCodes.Add(q.RootSchemaCode);
                        childSchemaCodes.Add(q.SchemaCode);
                    }
                }
                //  if (tempSchemaCodes.Count == 0 || (tempSchemaCodes.Count > 0 && !this.Engine.BizObjectManager.ExistSchemas(tempSchemaCodes.ToArray())))
                if (tempSchemaCodes.Count == 0)
                {
                    return(false);
                }
                if (childSchemaCodes.Count > 0)
                {
                    displayNameTable = this.GetSchemasDisplayName(OThinker.Data.Utility.RemoveRedundant <string>(childSchemaCodes.ToArray()));
                }
            }
            foreach (ReportSourceAssociation q in ReportSource.ReportSourceAssociations)
            {
                if (q.IsSubSheet && q.MasterField.ToLowerInvariant() == ("I" + q.RootSchemaCode + "_ObjectID").ToLowerInvariant() && q.SubField.ToLowerInvariant() == ("I" + q.SchemaCode + "_ParentObjectID").ToLowerInvariant())
                {
                    schemaCodes.Add(q.RootSchemaCode);
                    propertyCodes.Add(q.SchemaCode);
                    //前面有schema的存在性判断,这里不需要再判断
                    string displayname = displayNameTable[q.SchemaCode];
                    Codes.Add(q.SchemaCode, new ColumnSummary()
                    {
                        DisplayName = displayname
                    });
                }
            }
            if (schemaCodes.Count > 0)
            {
                propertyNames = this.GetPropertiesName(schemaCodes.ToArray(), propertyCodes.ToArray());
            }
            foreach (ReportSourceAssociation q in ReportSource.ReportSourceAssociations)
            {
                if (q.IsSubSheet && q.MasterField.ToLowerInvariant() == ("I" + q.RootSchemaCode + "_ObjectID").ToLowerInvariant() && q.SubField.ToLowerInvariant() == ("I" + q.SchemaCode + "_ParentObjectID").ToLowerInvariant())
                {
                    if (propertyNames.ContainsKey(q.RootSchemaCode + q.SchemaCode))
                    {
                        Codes.Add(q.SchemaCode, new ColumnSummary()
                        {
                            DisplayName = propertyNames[q.RootSchemaCode + q.SchemaCode]
                        });
                    }
                }
                else
                {
                    return(false);
                }
            }
            //树;
            foreach (ReportWidgetColumn q in reportWidget.Columns)
            {
                string        originalcode = this.GetOriginalCode(q.ColumnCode);
                ColumnSummary t            = new ColumnSummary();
                t.DisplayName = q.DisplayName;
                t.Code        = q.ColumnCode;
                if (Codes.ContainsKey(originalcode))
                {
                    if (ChildCodes.ContainsKey(originalcode))
                    {
                        ChildCodes[originalcode].ChildeColumnSummary.Add(q.ColumnCode, t);
                    }
                    else
                    {
                        ChildCodes.Add(originalcode, Codes[originalcode]);
                        ChildCodes[originalcode].ChildeColumnSummary.Add(q.ColumnCode, t);
                    }
                }
                else
                {
                    ChildCodes.Add(q.ColumnCode, new ColumnSummary()
                    {
                        DisplayName = q.DisplayName, Code = q.ColumnCode
                    });
                }
            }
            return(true);
        }