using APT.BaseData.Domain.ApiModel;
using APT.BaseData.Domain.Entities;
using APT.BaseData.Domain.Entities.FM;
using APT.BaseData.Domain.Entities.PF;
using APT.BaseData.Domain.Enums;
using APT.BaseData.Domain.IServices;
using APT.Infrastructure.Core;
using APT.Utility;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using APT.Infrastructure.Api;
namespace APT.BaseData.Services.DomainServices
{
    public class PFFormService : CommonService, IPFFormService
    {
        /// 数据库关键字
        private readonly string[] DB_KEYWORDS = new string[] { "ORDER", "DESC", "TEXT", "GROUP", "ASC", "MIN", "MAX", "SUM", "DATE", "DATA", "DEC", "CASE", "CAST" };
        public PFFormService(IRepository repository)
            : base(repository)
        {
        }
        /// 
        /// 获取实体语法
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 获取语法类型 0-update 和insert  1-仅获取update 2-仅获取insert
        public void GetSqlByObject(DataBaseType dataBaseType, object obj, List list, string dstOrgId, int sqlType)
        {
            this.DoGetSqlByEntity(dataBaseType, obj, list, dstOrgId, sqlType);
        }
        /// 
        /// 创建表单设置版本信息
        /// 
        /// 当前设置类型
        /// ID列表 逗号隔开
        public void CreateFormConfigVersion(PFFormConfigVersionEnum configEnum, string ids)
        {
            //List arrays = string.IsNullOrEmpty(ids) ? null : ids.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(t => new Guid(t)).ToList();
            //if (arrays == null || !arrays.Any()) return;
            //Guid? orgId = null;
            //List cookies = new List();
            //switch (configEnum)
            //{
            //    case PFFormConfigVersionEnum.Form:
            //        var forms = this.GetEntities(t => arrays.Contains(t.ID), new BaseFilter()).ToList();
            //        foreach (var form in forms)
            //        {
            //            orgId = form.ORG_ID;
            //            cookies.Add(string.Format("form_config_form_{0}_{1}", form.CODE, form.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.Btn:
            //        var btns = this.GetEntities(t => arrays.Contains(t.ID), new BaseFilter()).ToList();
            //        foreach (var btn in btns)
            //        {
            //            orgId = btn.ORG_ID;
            //            if (btn.PAGE_CUSTOM_FORM_ID != null)
            //            {
            //                var form = this.GetEntity(btn.PAGE_CUSTOM_FORM_ID.ToString());
            //                if (form != null)
            //                    cookies.Add(string.Format("form_config_custom_{0}_{1}", form.CODE, btn.ORG_ID));
            //            }
            //            else if (btn.PAGE_TABLE_ID != null)
            //            {
            //                cookies.Add(string.Format("form_config_tablebase_{0}_{1}", btn.PAGE_TABLE_ID, btn.ORG_ID));
            //            }
            //            else if (btn.PAGE_EDIT_ID != null)
            //            {
            //                var pageEdit = this.GetEntity(btn.PAGE_EDIT_ID.ToString(), new string[] { "Nav_PageForm" });
            //                if (pageEdit != null)
            //                {
            //                    if (pageEdit.Nav_PageForm != null)
            //                        cookies.Add(string.Format("form_config_edit_{0}_{1}", pageEdit.Nav_PageForm.CODE, pageEdit.ORG_ID));
            //                }
            //                else
            //                {
            //                    var pageTree = this.GetEntity(btn.PAGE_EDIT_ID.ToString(), new string[] { "Nav_PageForm" });
            //                    if (pageTree.Nav_PageForm != null)
            //                        cookies.Add(string.Format("form_config_tree_{0}_{1}", pageTree.Nav_PageForm.CODE, pageTree.ORG_ID));
            //                }
            //            }
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.Column:
            //        var columns = this.GetEntities(t => arrays.Contains(t.ID), new BaseFilter()).ToList();
            //        foreach (var column in columns)
            //        {
            //            orgId = column.ORG_ID;
            //            cookies.Add(string.Format("form_config_tablebase_{0}_{1}", column.PAGE_TABLE_ID, column.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.EditColumn:
            //        var editColumns = this.GetEntities(t => arrays.Contains(t.ID), new BaseFilter(), new string[] { "Nav_PageEdit.Nav_PageForm" }).ToList();
            //        foreach (var editColumn in editColumns)
            //        {
            //            orgId = editColumn.ORG_ID;
            //            if (editColumn.Nav_PageEdit != null && editColumn.Nav_PageEdit.Nav_PageForm != null)
            //                cookies.Add(string.Format("form_config_edit_{0}_{1}", editColumn.Nav_PageEdit.Nav_PageForm.CODE, editColumn.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.EditColumnFillMap:
            //        var editColumnFillMaps = this.GetEntities(t => arrays.Contains(t.ID), new BaseFilter(),
            //            new string[] { "Nav_EditColumn.Nav_PageEdit.Nav_PageForm" }).ToList();
            //        foreach (var editColumnFillMap in editColumnFillMaps)
            //        {
            //            orgId = editColumnFillMap.ORG_ID;
            //            if (editColumnFillMap.Nav_EditColumn != null && editColumnFillMap.Nav_EditColumn.Nav_PageEdit != null
            //                && editColumnFillMap.Nav_EditColumn.Nav_PageEdit.Nav_PageForm != null)
            //                cookies.Add(string.Format("form_config_edit_{0}_{1}",
            //                    editColumnFillMap.Nav_EditColumn.Nav_PageEdit.Nav_PageForm.CODE, editColumnFillMap.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.EditColumnFillMapDetail:
            //        var editColumnFillMapDetails = this.GetEntities(t => arrays.Contains(t.ID),
            //            new BaseFilter(), new string[] { "Nav_EditColumnFillMap.Nav_EditColumn.Nav_PageEdit.Nav_PageForm" }).ToList();
            //        foreach (var editColumnFillMapDetail in editColumnFillMapDetails)
            //        {
            //            orgId = editColumnFillMapDetail.ORG_ID;
            //            if (editColumnFillMapDetail.Nav_EditColumnFillMap != null && editColumnFillMapDetail.Nav_EditColumnFillMap.Nav_EditColumn != null
            //                && editColumnFillMapDetail.Nav_EditColumnFillMap.Nav_EditColumn.Nav_PageEdit != null
            //                && editColumnFillMapDetail.Nav_EditColumnFillMap.Nav_EditColumn.Nav_PageEdit.Nav_PageForm != null)
            //                cookies.Add(string.Format("form_config_edit_{0}_{1}",
            //                    editColumnFillMapDetail.Nav_EditColumnFillMap.Nav_EditColumn.Nav_PageEdit.Nav_PageForm.CODE,
            //                    editColumnFillMapDetail.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.EditColumnFilter:
            //        var editColumnFilters = this.GetEntities(t => arrays.Contains(t.ID),
            //                    new BaseFilter(), new string[] { "Nav_EditColumn.Nav_PageEdit.Nav_PageForm" }).ToList();
            //        foreach (var editColumnFilter in editColumnFilters)
            //        {
            //            orgId = editColumnFilter.ORG_ID;
            //            if (editColumnFilter.Nav_EditColumn != null && editColumnFilter.Nav_EditColumn.Nav_PageEdit != null
            //                && editColumnFilter.Nav_EditColumn.Nav_PageEdit.Nav_PageForm != null)
            //                cookies.Add(string.Format("form_config_edit_{0}_{1}",
            //                    editColumnFilter.Nav_EditColumn.Nav_PageEdit.Nav_PageForm.CODE, editColumnFilter.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.PageCustom:
            //        var pageCustoms = this.GetEntities(t => arrays.Contains(t.ID),
            //                        new BaseFilter(), new string[] { "Nav_PageForm" }).ToList();
            //        foreach (var pageCustom in pageCustoms)
            //        {
            //            orgId = pageCustom.ORG_ID;
            //            if (pageCustom.Nav_PageForm != null)
            //                cookies.Add(string.Format("form_config_custom_{0}_{1}", pageCustom.Nav_PageForm.CODE, pageCustom.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.PageEdit:
            //        var pageEdits = this.GetEntities(t => arrays.Contains(t.ID),
            //                new BaseFilter(), new string[] { "Nav_PageForm" }).ToList();
            //        foreach (var pageEdit in pageEdits)
            //        {
            //            orgId = pageEdit.ORG_ID;
            //            if (pageEdit.Nav_PageForm != null)
            //                cookies.Add(string.Format("form_config_edit_{0}_{1}", pageEdit.Nav_PageForm.CODE, pageEdit.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.PageTable:
            //        var pageTables = this.GetEntities(t => arrays.Contains(t.ID),
            //                        new BaseFilter(), new string[] { "Nav_PageForm" }).ToList();
            //        foreach (var pageTable in pageTables)
            //        {
            //            orgId = pageTable.ORG_ID;
            //            if (pageTable.Nav_PageForm != null)
            //            {
            //                cookies.Add(string.Format("form_config_table_{0}_{1}_{2}", pageTable.Nav_PageForm.CODE, pageTable.ORG_ID, (pageTable.PARENT_ID == null ? "" : pageTable.PARENT_ID.ToString())));
            //                cookies.Add(string.Format("form_config_table_{0}_{1}_{2}_{3}", pageTable.Nav_PageForm.CODE, pageTable.ORG_ID, (pageTable.PARENT_ID == null ? "" : pageTable.PARENT_ID.ToString()),
            //                    pageTable.ID));
            //            }
            //            cookies.Add(string.Format("form_config_tablebase_{0}_{1}", pageTable.ID, pageTable.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.PageTree:
            //        var pageTrees = this.GetEntities(t => arrays.Contains(t.ID),
            //             new BaseFilter(), new string[] { "Nav_PageForm" }).ToList();
            //        foreach (var pageTree in pageTrees)
            //        {
            //            orgId = pageTree.ORG_ID;
            //            if (pageTree.Nav_PageForm != null)
            //                cookies.Add(string.Format("form_config_tree_{0}_{1}", pageTree.Nav_PageForm.CODE, pageTree.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.Query:
            //        var querys = this.GetEntities(t => arrays.Contains(t.ID),
            //            new BaseFilter(), new string[] { "Nav_PageForm" }).ToList();
            //        foreach (var query in querys)
            //        {
            //            orgId = query.ORG_ID;
            //            cookies.Add(string.Format("form_config_search_{0}_{1}", query.PAGE_FORM_ID, query.ORG_ID));
            //            if (query.Nav_PageForm != null)
            //                cookies.Add(string.Format("form_config_search_{0}_{1}", query.Nav_PageForm.CODE, query.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.TableParams:
            //        var tableParams = this.GetEntities(t => arrays.Contains(t.ID), new BaseFilter()).ToList();
            //        foreach (var tableParam in tableParams)
            //        {
            //            orgId = tableParam.ORG_ID;
            //            cookies.Add(string.Format("form_config_tablebase_{0}_{1}", tableParam.PAGE_TABLE_ID, tableParam.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.TreeColumn:
            //        var treeColumns = this.GetEntities(t => arrays.Contains(t.ID),
            //            new BaseFilter(), new string[] { "Nav_PageTree.Nav_PageForm" }).ToList();
            //        foreach (var treeColumn in treeColumns)
            //        {
            //            orgId = treeColumn.ORG_ID;
            //            if (treeColumn.Nav_PageTree != null && treeColumn.Nav_PageTree.Nav_PageForm != null)
            //                cookies.Add(string.Format("form_config_tree_{0}_{1}", treeColumn.Nav_PageTree.Nav_PageForm.CODE, treeColumn.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.PageEditPanel:
            //        var pageEditPanels = this.GetEntities(t => arrays.Contains(t.ID),
            //                new BaseFilter(), new string[] { "Nav_PageEdit.Nav_PageForm" }).ToList();
            //        foreach (var pageEditPanel in pageEditPanels)
            //        {
            //            orgId = pageEditPanel.ORG_ID;
            //            if (pageEditPanel.Nav_PageEdit != null && pageEditPanel.Nav_PageEdit.Nav_PageForm != null)
            //                cookies.Add(string.Format("form_config_edit_{0}_{1}", pageEditPanel.Nav_PageEdit.Nav_PageForm.CODE, pageEditPanel.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.PageChart:
            //        var pageCharts = this.GetEntities(t => arrays.Contains(t.ID),
            //                new BaseFilter(), new string[] { "Nav_PageForm" }).ToList();
            //        foreach (var pageChart in pageCharts)
            //        {
            //            orgId = pageChart.ORG_ID;
            //            if (pageChart.Nav_PageForm != null)
            //                cookies.Add(string.Format("form_config_chart_{0}_{1}", pageChart.Nav_PageForm.CODE, pageChart.ORG_ID));
            //            cookies.Add(string.Format("form_config_chart_{0}_{1}", pageChart.PAGE_FORM_ID, pageChart.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.PageChartParam:
            //        var pageChartParams = this.GetEntities(t => arrays.Contains(t.ID),
            //                new BaseFilter(), new string[] { "Nav_PageChart.Nav_PageForm" }).ToList();
            //        foreach (var pageChartParam in pageChartParams)
            //        {
            //            orgId = pageChartParam.ORG_ID;
            //            if (pageChartParam.Nav_PageChart != null && pageChartParam.Nav_PageChart.Nav_PageForm != null)
            //                cookies.Add(string.Format("form_config_chart_{0}_{1}", pageChartParam.Nav_PageChart.Nav_PageForm.CODE, pageChartParam.ORG_ID));
            //            cookies.Add(string.Format("form_config_chart_{0}_{1}", pageChartParam.Nav_PageChart.PAGE_FORM_ID, pageChartParam.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.ColumnFilter:
            //        var columnFilters = this.GetEntities(t => arrays.Contains(t.ID), new BaseFilter(), new string[] { "Nav_Column" }).ToList();
            //        foreach (var columnFilter in columnFilters)
            //        {
            //            orgId = columnFilter.ORG_ID;
            //            if (columnFilter.Nav_Column != null)
            //                cookies.Add(string.Format("form_config_tablebase_{0}_{1}", columnFilter.Nav_Column.PAGE_TABLE_ID, columnFilter.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.FormQuery:
            //        var formQuerys = this.GetEntities(t => arrays.Contains(t.ID),
            //            new BaseFilter(), new string[] { "Nav_PageForm" }).ToList();
            //        foreach (var formQuery in formQuerys)
            //        {
            //            orgId = formQuery.ORG_ID;
            //            cookies.Add(string.Format("form_config_search_{0}_{1}", formQuery.PAGE_FORM_ID, formQuery.ORG_ID));
            //            if (formQuery.Nav_PageForm != null)
            //                cookies.Add(string.Format("form_config_search_{0}_{1}", formQuery.Nav_PageForm.CODE, formQuery.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.PageTablePanel:
            //        var pageTabePanels = this.GetEntities(t => arrays.Contains(t.ID),
            //                new BaseFilter(), new string[] { "Nav_PageTable.Nav_PageForm" }).ToList();
            //        foreach (var pageTablePanel in pageTabePanels)
            //        {
            //            orgId = pageTablePanel.ORG_ID;
            //            cookies.Add(string.Format("form_config_tablebase_{0}_{1}", pageTablePanel.PAGE_TABLE_ID, pageTablePanel.ORG_ID));
            //        }
            //        break;
            //    case PFFormConfigVersionEnum.ParamItem:
            //        var schemeIds = this.GetEntities(t => arrays.Contains(t.PARAM_ITEM_ID), new BaseFilter()).Select(t => t.PARAM_SCHEME_ID).ToList();
            //        if (schemeIds.Any())
            //            this.CreateFormConfigVersion(PFFormConfigVersionEnum.ParamScheme, string.Join(",", schemeIds));
            //        break;
            //    case PFFormConfigVersionEnum.ParamScheme:
            //        var tempPageTableIds = this.GetEntities(t => arrays.Contains(t.PARAM_SCHEME_ID ?? Guid.Empty), new BaseFilter()).Select(t => t.ID).ToList();
            //        var tempPageEditIds = this.GetEntities(t => arrays.Contains(t.PARAM_SCHEME_ID ?? Guid.Empty), new BaseFilter()).Select(t => t.ID).ToList();
            //        if (tempPageTableIds.Any())
            //            this.CreateFormConfigVersion(PFFormConfigVersionEnum.PageTable, string.Join(",", tempPageTableIds));
            //        if (tempPageEditIds.Any())
            //            this.CreateFormConfigVersion(PFFormConfigVersionEnum.PageEdit, string.Join(",", tempPageEditIds));
            //        break;
            //}
            //if (orgId != null && cookies.Count > 0)
            //{
            //    decimal version = decimal.Zero;
            //    BaseFilter filter = new BaseFilter();
            //    filter.OrgId = orgId;
            //    filter.Order = DbOrder.DESC;
            //    filter.Sort = "VERSION";
            //    filter.OrgType = FilterOrgTypeEnum.仅本组织;
            //    var lastMaxVersion = this.GetOrderEntities(null, filter).FirstOrDefault();
            //    if (lastMaxVersion != null)
            //        version = lastMaxVersion.VERSION;
            //    version += 1;
            //    List details = new List();
            //    T_PF_FORM_CONFIG_VERSION formConfigVersion = new T_PF_FORM_CONFIG_VERSION();
            //    formConfigVersion.ORG_ID = orgId;
            //    formConfigVersion.VERSION = version;
            //    foreach (var item in cookies)
            //    {
            //        T_PF_FORM_CONFIG_VERSION_D formConfigVersionDetail = new T_PF_FORM_CONFIG_VERSION_D();
            //        formConfigVersionDetail.ORG_ID = orgId;
            //        formConfigVersionDetail.REMOVE_COOKIE_KEY = item;
            //        formConfigVersionDetail.FORM_CONFIG_VERSION_ID = formConfigVersion.ID;
            //        details.Add(formConfigVersionDetail);
            //    }
            //    this.AddEntity(formConfigVersion);
            //    this.BantchAddEntity(details);
            //}
        }
        /// 
        /// 依据表单编号获取更新表单配置语法
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 开始时间  从此时间之后的有异动的配置信息都会获取到
        /// 
        public List GetSqlsByFormCode(Guid orgId, List formCodes, string dstOrgId, decimal dstFormConfigVersion, DataBaseType dstDataBaseType, int sqlType, DateTime? startTime, bool isInitOrg)
        {
            var forms = this.GetEntities(t => formCodes.Contains(t.CODE), new BaseFilter(orgId, FilterOrgTypeEnum.仅本组织)).ToList();
            return GetSqlsByFormId(orgId, forms.Select(t => t.ID).ToList(), dstOrgId, dstFormConfigVersion, dstDataBaseType, sqlType, startTime, isInitOrg, 1);
        }
        /// 
        /// 依据表单ID获取更新表单配置语法
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 开始时间  从此时间之后的有异动的配置信息都会获取到
        /// 
        public List GetSqlsByFormId(Guid orgId, List formIds, string dstOrgId, decimal dstFormConfigVersion, DataBaseType dstDataBaseType, int sqlType, DateTime? startTime, bool isInitOrg, int formType)
        {
            var filiterThisDep = new BaseFilter(orgId, FilterOrgTypeEnum.仅本组织);
            filiterThisDep.IgnoreDataRule = true;
            #region 生成菜单SQL
            if (formType == 2)
            {
                return GetSqlsByFormType(orgId, formIds, dstOrgId, dstFormConfigVersion, dstDataBaseType, sqlType, startTime, isInitOrg, formType);
            }
            #endregion
            #region 跑批队列SQL
            else if (formType == 3)
            {
                return GetSqlsByFormType(orgId, formIds, dstOrgId, dstFormConfigVersion, dstDataBaseType, sqlType, startTime, isInitOrg, formType);
            }
            #endregion
            #region 生成表单SQL
            else
            {
                string dstOrgIdGuidStr = dstOrgId;
                if (dstDataBaseType == DataBaseType.Oracle && !string.IsNullOrEmpty(dstOrgId))
                    dstOrgIdGuidStr = Utility.DataHelper.OracleToDotNet(dstOrgId);
                if (string.IsNullOrEmpty(dstOrgIdGuidStr))
                    dstOrgIdGuidStr = orgId.ToString();
                bool isCheckParent = formIds != null && formIds.Any();
                List cookies = new List();
                List result = new List();
                List tempFormIds = new List();
                var paramStartTime = DateTime.Now.AddDays(-7);
                if (startTime != null)
                    paramStartTime = startTime.Value;
                #region 系统参数模板
                Expression> paramItemExpression = t => isInitOrg || t.CREATE_TIME > paramStartTime
                    || t.MODIFY_TIME > paramStartTime;
                if (startTime != null)
                    paramItemExpression = paramItemExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var paramItems = this.GetEntities(paramItemExpression, filiterThisDep).ToList();
                paramItems.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                });
                Expression> paramSchemeExpression = t => isInitOrg || t.CREATE_TIME > paramStartTime
                    || t.MODIFY_TIME > paramStartTime;
                if (startTime != null)
                    paramSchemeExpression = paramSchemeExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var paramSchemes = this.GetEntities(paramSchemeExpression, filiterThisDep).ToList();
                paramSchemes.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                });
                Expression> paramSchemeDetailExpression = t => isInitOrg || t.CREATE_TIME > paramStartTime
                    || t.MODIFY_TIME > paramStartTime;
                if (startTime != null)
                    paramSchemeDetailExpression = paramSchemeDetailExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var paramDetails = this.GetEntities(paramSchemeDetailExpression, filiterThisDep).ToList();
                paramDetails.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                });
                List itemIds = paramItems.Select(t => t.ID).ToList();
                List schemeIds = paramSchemes.Select(t => t.ID).ToList();
                List schemeDetailIds = paramDetails.Select(t => t.ID).ToList();
                var allParamSchemeIds = this.GetEntities(t => schemeIds.Contains(t.ID) ||
                      t.Nav_Details.Any(t1 => schemeDetailIds.Contains(t1.ID)) ||
                      t.Nav_Details.Any(t1 => itemIds.Contains(t1.PARAM_ITEM_ID)), new BaseFilter(orgId)).Select(t => t.ID).ToList();
                if (allParamSchemeIds.Any())
                {
                    var temppageTables = this.GetEntities(t => allParamSchemeIds.Contains(t.PARAM_SCHEME_ID ?? Guid.Empty), new BaseFilter(orgId)).ToList();
                    temppageTables.ForEach(t =>
                    {
                        if (t.PAGE_FORM_ID != null && !tempFormIds.Contains(t.PAGE_FORM_ID.Value))
                            tempFormIds.Add(t.PAGE_FORM_ID.Value);
                        cookies.Add(string.Format("form_config_tablebase_{0}_{1}", t.ID, dstOrgIdGuidStr));
                        if (t.Nav_PageForm != null)
                        {
                            cookies.Add(string.Format("form_config_table_{0}_{1}_{2}", t.Nav_PageForm.CODE, t.ORG_ID, (t.PARENT_ID == null ? "" : t.PARENT_ID.ToString())));
                            cookies.Add(string.Format("form_config_table_{0}_{1}_{2}_{3}", t.Nav_PageForm.CODE, t.ORG_ID, (t.PARENT_ID == null ? "" : t.PARENT_ID.ToString()),
                                t.ID));
                        }
                    });
                    var temppageEdits = this.GetEntities(t => allParamSchemeIds.Contains(t.PARAM_SCHEME_ID ?? Guid.Empty), new BaseFilter(orgId)).ToList();
                    temppageEdits.ForEach(t =>
                    {
                        if (t.PAGE_FORM_ID != null && !tempFormIds.Contains(t.PAGE_FORM_ID.Value))
                            tempFormIds.Add(t.PAGE_FORM_ID.Value);
                    });
                }
                #endregion
                Expression> formExpression = t => isInitOrg || formIds.Contains(t.ID);
                if (startTime != null)
                    formExpression = formExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var forms = this.GetEntities(formExpression, filiterThisDep).ToList();
                forms.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    tempFormIds.Add(t.ID);
                });
                List tmpFormIds = forms.Select(t => t.ID).ToList();
                #region 图片配置
                Expression> picExpression = t => isInitOrg || isCheckParent && tmpFormIds.Contains(t.PAGE_FORM_ID);
                if (startTime != null)
                    picExpression = picExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var pics = this.GetEntities(picExpression, filiterThisDep).ToList();
                pics.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    if (t.PAGE_FORM_ID != null && !tempFormIds.Contains(t.PAGE_FORM_ID))
                        tempFormIds.Add(t.PAGE_FORM_ID);
                });
                List picIds = pics.Select(t => t.ID).ToList();
                Expression> picDetailExpression = t => isInitOrg || isCheckParent && picIds.Contains(t.PIC_FILTER_ID);
                if (startTime != null)
                    picDetailExpression = picDetailExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var picDetails = this.GetEntities(picDetailExpression, filiterThisDep, new string[] { "Nav_PicFilter" }).ToList();
                picDetails.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    if (t.Nav_PicFilter != null && t.Nav_PicFilter.PAGE_FORM_ID != null && !tempFormIds.Contains(t.Nav_PicFilter.PAGE_FORM_ID))
                        tempFormIds.Add(t.Nav_PicFilter.PAGE_FORM_ID);
                });
                #endregion
                #region 表单关联
                Expression> formRelationExpression = t => isInitOrg || tmpFormIds.Contains(t.PAGE_FORM_ID);
                if (startTime != null)
                    formRelationExpression = formRelationExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var formRelations = this.GetEntities(formRelationExpression, filiterThisDep).ToList();
                formRelations.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    if (t.PAGE_FORM_ID != null && !tempFormIds.Contains(t.PAGE_FORM_ID))
                        tempFormIds.Add(t.PAGE_FORM_ID);
                });
                #endregion
                #region 编辑页
                Expression> editExpression = t => isInitOrg || isCheckParent && tmpFormIds.Contains(t.PAGE_FORM_ID ?? Guid.Empty);
                if (startTime != null)
                    editExpression = editExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var pageEdits = this.GetEntities(editExpression, filiterThisDep).ToList();
                pageEdits.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    if (t.PAGE_FORM_ID != null && !tempFormIds.Contains(t.PAGE_FORM_ID.Value))
                        tempFormIds.Add(t.PAGE_FORM_ID.Value);
                });
                List pageEditIds = pageEdits.Select(t => t.ID).ToList();
                Expression> editPanelExpression = t => isInitOrg || isCheckParent && pageEditIds.Contains(t.PAGE_EDIT_ID);
                if (startTime != null)
                    editPanelExpression = editPanelExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var editPanels = this.GetEntities(editPanelExpression, filiterThisDep, new string[] { "Nav_PageEdit" }).ToList();
                editPanels.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    if (t.Nav_PageEdit != null && t.Nav_PageEdit.PAGE_FORM_ID != null && !tempFormIds.Contains(t.Nav_PageEdit.PAGE_FORM_ID.Value))
                        tempFormIds.Add(t.Nav_PageEdit.PAGE_FORM_ID.Value);
                });
                Expression> editColumnExpression = t => isInitOrg || isCheckParent && pageEditIds.Contains(t.PAGE_EDIT_ID);
                if (startTime != null)
                    editColumnExpression = editColumnExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var editColumns = this.GetEntities(editColumnExpression, filiterThisDep, new string[] { "Nav_PageEdit" }).ToList();
                editColumns.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    if (t.Nav_PageEdit != null && t.Nav_PageEdit.PAGE_FORM_ID != null && !tempFormIds.Contains(t.Nav_PageEdit.PAGE_FORM_ID.Value))
                        tempFormIds.Add(t.Nav_PageEdit.PAGE_FORM_ID.Value);
                });
                List editColumnIds = editColumns.Select(t => t.ID).ToList();
                Expression> editColumnFilterExpression = t => isInitOrg || isCheckParent && editColumnIds.Contains(t.EDIT_COLUMN_ID);
                if (startTime != null)
                    editColumnFilterExpression = editColumnFilterExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var editColumnFilters = this.GetEntities(editColumnFilterExpression, filiterThisDep, new string[] { "Nav_EditColumn.Nav_PageEdit" }).ToList();
                editColumnFilters.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    if (t.Nav_EditColumn != null && t.Nav_EditColumn.Nav_PageEdit != null && t.Nav_EditColumn.Nav_PageEdit.PAGE_FORM_ID != null && !tempFormIds.Contains(t.Nav_EditColumn.Nav_PageEdit.PAGE_FORM_ID.Value))
                        tempFormIds.Add(t.Nav_EditColumn.Nav_PageEdit.PAGE_FORM_ID.Value);
                });
                Expression> editColumnFillMapExpression = t => isInitOrg || isCheckParent && editColumnIds.Contains(t.EDIT_COLUMN_ID);
                if (startTime != null)
                    editColumnFillMapExpression = editColumnFillMapExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var editColumnFillMaps = this.GetEntities(editColumnFillMapExpression, filiterThisDep, new string[] { "Nav_EditColumn.Nav_PageEdit" }).ToList();
                editColumnFillMaps.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    if (t.Nav_EditColumn != null && t.Nav_EditColumn.Nav_PageEdit != null && t.Nav_EditColumn.Nav_PageEdit.PAGE_FORM_ID != null && !tempFormIds.Contains(t.Nav_EditColumn.Nav_PageEdit.PAGE_FORM_ID.Value))
                        tempFormIds.Add(t.Nav_EditColumn.Nav_PageEdit.PAGE_FORM_ID.Value);
                });
                var editColumnFillMapIds = editColumnFillMaps.Select(t => t.ID).ToList();
                Expression> editColumnFillMapDExpression = t => isInitOrg || isCheckParent && editColumnFillMapIds.Contains(t.EDIT_COLUMN_FILL_MAP_ID);
                if (startTime != null)
                    editColumnFillMapDExpression = editColumnFillMapDExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var editColumnFillMapDetails = this.GetEntities(editColumnFillMapDExpression, filiterThisDep, new string[] { "Nav_EditColumnFillMap.Nav_EditColumn.Nav_PageEdit" }).ToList();
                editColumnFillMapDetails.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    if (t.Nav_EditColumnFillMap != null && t.Nav_EditColumnFillMap.Nav_EditColumn != null && t.Nav_EditColumnFillMap.Nav_EditColumn.Nav_PageEdit != null
                        && t.Nav_EditColumnFillMap.Nav_EditColumn.Nav_PageEdit.PAGE_FORM_ID != null && !tempFormIds.Contains(t.Nav_EditColumnFillMap.Nav_EditColumn.Nav_PageEdit.PAGE_FORM_ID.Value))
                        tempFormIds.Add(t.Nav_EditColumnFillMap.Nav_EditColumn.Nav_PageEdit.PAGE_FORM_ID.Value);
                });
                #endregion
                #region 自定义页
                Expression> customExpression = t => isInitOrg || isCheckParent && tmpFormIds.Contains(t.PAGE_FORM_ID ?? Guid.Empty);
                if (startTime != null)
                    customExpression = customExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var pageCustoms = this.GetEntities(customExpression, filiterThisDep).ToList();
                pageCustoms.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    if (t.PAGE_FORM_ID != null && !tempFormIds.Contains(t.PAGE_FORM_ID.Value))
                        tempFormIds.Add(t.PAGE_FORM_ID.Value);
                });
                #endregion
                #region 图表页
                Expression> chartExpression = t => isInitOrg || isCheckParent && tmpFormIds.Contains(t.PAGE_FORM_ID ?? Guid.Empty);
                if (startTime != null)
                    chartExpression = chartExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var pageCharts = this.GetEntities(chartExpression, filiterThisDep).ToList();
                pageCharts.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    if (t.PAGE_FORM_ID != null && !tempFormIds.Contains(t.PAGE_FORM_ID.Value))
                        tempFormIds.Add(t.PAGE_FORM_ID.Value);
                });
                List pageChartIds = pageCharts.Select(t => t.ID).ToList();
                Expression> chartParamExpression = t => isInitOrg || isCheckParent && pageChartIds.Contains(t.PAGE_CHART_ID);
                if (startTime != null)
                    chartParamExpression = chartParamExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var pageChartParams = this.GetEntities(chartParamExpression, filiterThisDep, new string[] { "Nav_PageChart" }).ToList();
                pageChartParams.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    if (t.Nav_PageChart != null && t.Nav_PageChart.PAGE_FORM_ID != null && !tempFormIds.Contains(t.Nav_PageChart.PAGE_FORM_ID.Value))
                        tempFormIds.Add(t.Nav_PageChart.PAGE_FORM_ID.Value);
                });
                #endregion
                #region 列表页
                Expression> tableExpression = t => isInitOrg || isCheckParent && tmpFormIds.Contains(t.PAGE_FORM_ID ?? Guid.Empty);
                if (startTime != null)
                    tableExpression = tableExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var pageTables = this.GetEntities(tableExpression, filiterThisDep, new string[] { "Nav_PageForm" }).ToList();
                pageTables.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    cookies.Add(string.Format("form_config_tablebase_{0}_{1}", t.ID, dstOrgIdGuidStr));
                    if (t.PAGE_FORM_ID != null && !tempFormIds.Contains(t.PAGE_FORM_ID.Value))
                        tempFormIds.Add(t.PAGE_FORM_ID.Value);
                    if (t.Nav_PageForm != null)
                    {
                        cookies.Add(string.Format("form_config_table_{0}_{1}_{2}", t.Nav_PageForm.CODE, t.ORG_ID, (t.PARENT_ID == null ? "" : t.PARENT_ID.ToString())));
                        cookies.Add(string.Format("form_config_table_{0}_{1}_{2}_{3}", t.Nav_PageForm.CODE, t.ORG_ID, (t.PARENT_ID == null ? "" : t.PARENT_ID.ToString()),
                            t.ID));
                    }
                });
                List pageTableIds = pageTables.Select(t => t.ID).ToList();
                Expression> tablePanelExpression = t => isInitOrg || isCheckParent && pageTableIds.Contains(t.PAGE_TABLE_ID);
                if (startTime != null)
                    tablePanelExpression = tablePanelExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var tablePanels = this.GetEntities(tablePanelExpression, filiterThisDep).ToList();
                tablePanels.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    cookies.Add(string.Format("form_config_tablebase_{0}_{1}", t.PAGE_TABLE_ID, t.ORG_ID));
                });
                Expression> columnExpression = t => isInitOrg || isCheckParent && pageTableIds.Contains(t.PAGE_TABLE_ID ?? Guid.Empty);
                if (startTime != null)
                    columnExpression = columnExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var columns = this.GetEntities(columnExpression, filiterThisDep).ToList();
                var columnIds = columns.Select(t => t.ID).ToList();
                columns.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    cookies.Add(string.Format("form_config_tablebase_{0}_{1}", t.PAGE_TABLE_ID, t.ORG_ID));
                });
                Expression> columnFilterExpression = t => isInitOrg || isCheckParent && columnIds.Contains(t.COLUMN_ID);
                if (startTime != null)
                    columnFilterExpression = columnFilterExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var columnFilters = this.GetEntities(columnFilterExpression, filiterThisDep, new string[] { "Nav_Column" }).ToList();
                var tempTableIds = columns.Where(t => t.PAGE_TABLE_ID != null).Select(t => t.PAGE_TABLE_ID.Value).ToList();
                columnFilters.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    if (t.Nav_Column != null && t.Nav_Column.PAGE_TABLE_ID != null && tempFormIds.Contains(t.Nav_Column.PAGE_TABLE_ID.Value))
                        tempTableIds.Add(t.Nav_Column.PAGE_TABLE_ID.Value);
                });
                if (tempTableIds.Any())
                {
                    var tempPageTables = this.GetEntities(t => tempTableIds.Contains(t.ID), filiterThisDep, new string[] { "Nav_PageForm" }).ToList();
                    tempPageTables.ForEach(t =>
                    {
                        if (t.Nav_PageForm != null)
                        {
                            cookies.Add(string.Format("form_config_table_{0}_{1}_{2}", t.Nav_PageForm.CODE, t.ORG_ID, (t.PARENT_ID == null ? "" : t.PARENT_ID.ToString())));
                            cookies.Add(string.Format("form_config_table_{0}_{1}_{2}_{3}", t.Nav_PageForm.CODE, t.ORG_ID, (t.PARENT_ID == null ? "" : t.PARENT_ID.ToString()),
                                t.ID));
                        }
                    });
                    var tempColFormIds = tempPageTables.Where(t => t.PAGE_FORM_ID != null).Select(t => t.PAGE_FORM_ID.Value).ToList();
                    tempColFormIds.ForEach(t =>
                    {
                        if (!tempFormIds.Contains(t))
                            tempFormIds.Add(t);
                    });
                }
                Expression> tableParamsExpression = t => isInitOrg || isCheckParent && pageTableIds.Contains(t.PAGE_TABLE_ID);
                if (startTime != null)
                    tableParamsExpression = tableParamsExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var tableParams = this.GetEntities(tableParamsExpression, filiterThisDep, new string[] { "Nav_PageTable" }).ToList();
                tableParams.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    if (t.Nav_PageTable != null && t.Nav_PageTable.PAGE_FORM_ID != null && !tempFormIds.Contains(t.Nav_PageTable.PAGE_FORM_ID.Value))
                        tempFormIds.Add(t.Nav_PageTable.PAGE_FORM_ID.Value);
                });
                #endregion
                #region 查询
                Expression> formQueryExpression = t => isInitOrg || isCheckParent && tmpFormIds.Contains(t.PAGE_FORM_ID ?? Guid.Empty);
                if (startTime != null)
                    formQueryExpression = formQueryExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var formQuerys = this.GetEntities(formQueryExpression, filiterThisDep, new string[] { "Nav_PageForm" }).ToList();
                formQuerys.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    if (t.PAGE_FORM_ID != null && !tempFormIds.Contains(t.PAGE_FORM_ID.Value))
                        tempFormIds.Add(t.PAGE_FORM_ID.Value);
                });
                var formQueryIds = formQuerys.Select(t => t.ID).ToList();
                Expression> queryExpression = t => isInitOrg || isCheckParent && formQueryIds.Contains(t.PAGE_FORM_QUERY_ID ?? Guid.Empty);
                if (startTime != null)
                    queryExpression = queryExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var querys = this.GetEntities(queryExpression, filiterThisDep).ToList();
                querys.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    if (t.PAGE_FORM_ID != null && !tempFormIds.Contains(t.PAGE_FORM_ID.Value))
                        tempFormIds.Add(t.PAGE_FORM_ID.Value);
                });
                #endregion
                #region 树页面
                Expression> treeExpression = t => isInitOrg || isCheckParent && tmpFormIds.Contains(t.PAGE_FORM_ID ?? Guid.Empty);
                if (startTime != null)
                    treeExpression = treeExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var pageTrees = this.GetEntities(treeExpression, filiterThisDep).ToList();
                pageTrees.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    if (t.PAGE_FORM_ID != null && !tempFormIds.Contains(t.PAGE_FORM_ID.Value))
                        tempFormIds.Add(t.PAGE_FORM_ID.Value);
                });
                List pageTreeIds = pageTrees.Select(t => t.ID).ToList();
                Expression> treeColumnExpression = t => isInitOrg || isCheckParent && pageTreeIds.Contains(t.PAGE_TREE_ID);
                if (startTime != null)
                    treeColumnExpression = treeColumnExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var treeColumns = this.GetEntities(treeColumnExpression, filiterThisDep, new string[] { "Nav_PageTree" }).ToList();
                treeColumns.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                    if (t.Nav_PageTree != null && t.Nav_PageTree.PAGE_FORM_ID != null && !tempFormIds.Contains(t.Nav_PageTree.PAGE_FORM_ID.Value))
                        tempFormIds.Add(t.Nav_PageTree.PAGE_FORM_ID.Value);
                });
                #endregion
                #region 按钮
                Expression> btnExpression = t => isInitOrg || isCheckParent && (tmpFormIds.Contains(t.PAGE_CUSTOM_FORM_ID ?? Guid.Empty) || pageTableIds.Contains(t.PAGE_TABLE_ID ?? Guid.Empty)
                        || pageTreeIds.Contains(t.PAGE_EDIT_ID ?? Guid.Empty) || pageEditIds.Contains(t.PAGE_EDIT_ID ?? Guid.Empty));
                if (startTime != null)
                    btnExpression = btnExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var btns = this.GetEntities(btnExpression, filiterThisDep).ToList();
                btns.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                });
                var tempBtnFormIds = btns.Where(t => t.PAGE_CUSTOM_FORM_ID != null).Select(t => t.PAGE_CUSTOM_FORM_ID.Value).ToList();
                var tempBtnTableIds = btns.Where(t => t.PAGE_TABLE_ID != null).Select(t => t.PAGE_TABLE_ID.Value).ToList();
                var tempBtnEditIds = btns.Where(t => t.PAGE_EDIT_ID != null).Select(t => t.PAGE_EDIT_ID.Value).ToList();
                if (tempBtnTableIds.Any())
                {
                    var tempPageTables = this.GetEntities(t => tempBtnTableIds.Contains(t.ID), filiterThisDep).ToList();
                    var tempTableFormIds = tempPageTables.Where(t => t.PAGE_FORM_ID != null).Select(t => t.PAGE_FORM_ID.Value).ToList();
                    tempTableFormIds.ForEach(t =>
                    {
                        if (!tempBtnFormIds.Contains(t))
                            tempBtnFormIds.Add(t);
                    });
                }
                if (tempBtnEditIds.Any())
                {
                    var tempPageTrees = this.GetEntities(t => tempBtnEditIds.Contains(t.ID), filiterThisDep).ToList();
                    var tempTreeFormIds = tempPageTrees.Where(t => t.PAGE_FORM_ID != null).Select(t => t.PAGE_FORM_ID.Value).ToList();
                    tempTreeFormIds.ForEach(t =>
                    {
                        if (!tempBtnFormIds.Contains(t))
                            tempBtnFormIds.Add(t);
                    });
                    var tempPageEdits = this.GetEntities(t => tempBtnEditIds.Contains(t.ID), filiterThisDep).ToList();
                    var tempEditFormIds = tempPageEdits.Where(t => t.PAGE_FORM_ID != null).Select(t => t.PAGE_FORM_ID.Value).ToList();
                    tempEditFormIds.ForEach(t =>
                    {
                        if (!tempBtnFormIds.Contains(t))
                            tempBtnFormIds.Add(t);
                    });
                }
                tempBtnFormIds.ForEach(t =>
                {
                    if (!tempFormIds.Contains(t))
                        tempFormIds.Add(t);
                });
                #endregion
                #region 版本
                if (dstFormConfigVersion > decimal.Zero && tempFormIds.Any())
                {
                    var versionForms = this.GetEntities(t => tempFormIds.Contains(t.ID), new BaseFilter(orgId)).ToList();
                    versionForms.ForEach(t =>
                    {
                        cookies.Add(string.Format("form_config_form_{0}_{1}", t.CODE, dstOrgIdGuidStr));
                        cookies.Add(string.Format("form_config_custom_{0}_{1}", t.CODE, dstOrgIdGuidStr));
                        cookies.Add(string.Format("form_config_edit_{0}_{1}", t.CODE, dstOrgIdGuidStr));
                        cookies.Add(string.Format("form_config_tree_{0}_{1}", t.CODE, dstOrgIdGuidStr));
                        cookies.Add(string.Format("form_config_table_{0}_{1}", t.CODE, dstOrgIdGuidStr));
                        cookies.Add(string.Format("form_config_search_{0}_{1}", t.ID, dstOrgIdGuidStr));
                        cookies.Add(string.Format("form_config_search_{0}_{1}", t.CODE, dstOrgIdGuidStr));
                        cookies.Add(string.Format("form_config_chart_{0}_{1}", t.CODE, dstOrgIdGuidStr));
                        cookies.Add(string.Format("form_config_chart_{0}_{1}", t.ID, dstOrgIdGuidStr));
                    });
                    dstFormConfigVersion++;
                    T_PF_FORM_CONFIG_VERSION formConfigVersion = new T_PF_FORM_CONFIG_VERSION();
                    formConfigVersion.VERSION = dstFormConfigVersion;
                    DoGetSqlByEntity(dstDataBaseType, formConfigVersion, result, dstOrgId, sqlType);
                    foreach (var item in cookies)
                    {
                        T_PF_FORM_CONFIG_VERSION_D formConfigVersionDetail = new T_PF_FORM_CONFIG_VERSION_D();
                        formConfigVersionDetail.REMOVE_COOKIE_KEY = item;
                        formConfigVersionDetail.FORM_CONFIG_VERSION_ID = formConfigVersion.ID;
                        DoGetSqlByEntity(dstDataBaseType, formConfigVersionDetail, result, dstOrgId, sqlType);
                    }
                }
                #endregion
                return result;
            }
            #endregion
        }
        /// 
        /// 生成菜单/跑批SQL
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public List GetSqlsByFormType(Guid orgId, List formIds, string dstOrgId, decimal dstFormConfigVersion, DataBaseType dstDataBaseType, int sqlType, DateTime? startTime, bool isInitOrg, int formType)
        {
            List result = new List();
            string dstOrgIdGuidStr = dstOrgId;
            if (dstDataBaseType == DataBaseType.Oracle && !string.IsNullOrEmpty(dstOrgId))
                dstOrgIdGuidStr = Utility.DataHelper.OracleToDotNet(dstOrgId);
            if (string.IsNullOrEmpty(dstOrgIdGuidStr))
                dstOrgIdGuidStr = orgId.ToString();
            bool isCheckParent = formIds != null && formIds.Any();//是否勾选数据
            var filiterThisDep = new BaseFilter(orgId, FilterOrgTypeEnum.仅本组织);
            filiterThisDep.IgnoreDataRule = true;
            if (formType == 2)//菜单
            {
                Expression> editExpression = t => isInitOrg || formIds.Contains((Guid)t.MENU_FORM_ID);
                if (startTime != null)
                    editExpression = editExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var menus = this.GetEntities(editExpression, filiterThisDep).OrderBy(x => x.MODIFY_TIME).ToList();
                List orderMenus = new List();
                foreach (var menu in menus)
                {
                    GetOrderMenus(menu, menus, orderMenus);
                }
                orderMenus.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                });
            }
            else//跑批
            {
                Expression> editExpression = t => isInitOrg;
                if (startTime != null)
                    editExpression = editExpression.Or(t => t.CREATE_TIME > startTime || t.MODIFY_TIME > startTime);
                var tasks = this.GetEntities(editExpression, filiterThisDep).OrderBy(x => x.CREATE_TIME).ToList();
                tasks.ForEach(t =>
                {
                    DoGetSqlByEntity(dstDataBaseType, t, result, dstOrgId, sqlType);
                });
            }
            return result;
        }
        private void GetOrderMenus(T_PF_MENU currentMenu, List menus, List orderMenus)
        {
            var parentId = currentMenu.PARENT_ID;
            if (parentId != null && menus.Where(x => x.ID == parentId) != null && menus.Where(x => x.ID == parentId).Any())
            {
                GetOrderMenus(menus.FirstOrDefault(x => x.ID == parentId), menus, orderMenus);
                if (!orderMenus.Where(x => x.ID == currentMenu.ID).Any())
                {
                    orderMenus.Add(currentMenu);
                }
            }
            else
            {
                if (!orderMenus.Where(x => x.ID == currentMenu.ID).Any())
                {
                    orderMenus.Add(currentMenu);
                }
            }
        }
        /// 
        /// 获取实体表语法
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public List GetSqlByEntity(DataBaseType dataBaseType, Guid orgId, string entityNames, string dstOrgId, int sqlType)
        {
            var temps = entityNames.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList();
            if (!temps.Any()) return null;
            List list = new List();
            foreach (var item in temps)
            {
                Type type = DataHelper.GetTypeByEntityName(item);
                MethodInfo methodInfo = this.GetType().GetMethod("GetEntitisSql", BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static);
                methodInfo.MakeGenericMethod(new Type[] { type }).
                            Invoke(this, new object[] { dataBaseType, orgId, list, dstOrgId, sqlType });
            }
            return list;
        }
        /// 
        ///根据来源组织初始化目的组织 配置数据
        /// 
        /// 来源组织编号
        /// 目的组织编号
        /// 目的组织名称
        public void InitOrgBySrcOrg(string srcOrgCode, string destOrgCode, string destOrgName)
        {
            if (string.IsNullOrEmpty(destOrgCode))
                throw new Exception("目标组织编号不允许为空");
            if (string.IsNullOrEmpty(destOrgName))
                throw new Exception("目标组织名称不允许为空");
            var srcOrg = this.GetEntity(t => t.CODE == srcOrgCode);
            if (srcOrg == null)
                throw new Exception("来源组织不存在,请确认");
            var destOrg = this.GetEntity(t => t.CODE == destOrgCode);
            if (destOrg != null)
                throw new Exception("已存在编号" + destOrgCode + "的组织,不允许执行此操作");
            destOrg = new T_FM_ORGANIZATION();
            destOrg.CODE = destOrgCode;
            destOrg.NAME = destOrgName;
            this.AddEntity(destOrg);
            List destOrgIds = new List();
            destOrgIds.Add(destOrg.ID);
            this.InitOrgByOrg(srcOrg.ID, destOrgIds, null);
        }
        /// 
        /// 初始化组织
        /// 
        /// 
        /// 
        /// 
        public void InitOrgByOrg(Guid srcOrgId, List destOrgIds, DateTime? startTime)
        {
            List destInitOrgIds = new List();
            List destSynchOrgIds = new List();
            var destOrgs = this.GetEntities(t => destOrgIds.Contains(t.ID), new BaseFilter()).ToList();
            foreach (var destOrg in destOrgs)
            {
                var isExistForm = this.GetEntities(null, new BaseFilter(destOrg.ID)).Any();
                if (isExistForm)
                {
                    if (startTime == null)
                        throw new Exception("已进行初始化组织,开始时间不允许为空");
                    destSynchOrgIds.Add(destOrg.ID);
                }
                else
                {
                    destInitOrgIds.Add(destOrg.ID);
                }
            }
            if (destInitOrgIds.Any())
                this.DoSynchFormConfigByOrg(srcOrgId, destInitOrgIds, null);
            if (destSynchOrgIds.Any())
                this.DoSynchFormConfigByOrg(srcOrgId, destSynchOrgIds, startTime);
        }
        /// 
        /// 同步表单配置信息
        /// 
        /// 
        /// 
        /// 
        public void SynchFormConfigByOrg(Guid srcOrgId, List destOrgIds, DateTime? startTime)
        {
            this.DoSynchFormConfigByOrg(srcOrgId, destOrgIds, startTime);
        }
        /// 
        /// 执行语法并且获取执行结果
        /// 
        /// 
        /// 
        public ExecuteSqlResult ExcuteSqlAndGetResult(string sql)
        {
            ExecuteSqlResult executeSqlResult = new ExecuteSqlResult();
            if (string.IsNullOrEmpty(sql)) return executeSqlResult;
            int tableIndex = 1;
            var arr = sql.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).ToList();
            foreach (var s in arr)
                DoExcuteSqlAndGetResult(s, executeSqlResult, ref tableIndex);
            foreach (var table in executeSqlResult.Tables)
            {
                if (!table.IsSelectTable) continue;
                ExecuteSqlColumn column = new ExecuteSqlColumn()
                {
                    FieldName = "RowNo",
                    Label = "序号"
                };
                table.Columns.Insert(0, column);
                int rowIndex = 1;
                foreach (var row in table.Rows)
                {
                    ExecuteSqlRowColumn executeSqlRowColumn = new ExecuteSqlRowColumn()
                    {
                        ColumnId = column.ID,
                        Value = rowIndex.ToString()
                    };
                    row.Datas.Add(executeSqlRowColumn);
                    rowIndex++;
                }
            }
            return executeSqlResult;
        }
        private void GetConfigBySrc(List srcEntities,
            Guid destOrgId, Dictionary entityRelations,
            List destAddEntities, List destUpdateEntities, string relationFieldName, DateTime? startTime,
            Action> copyFieldAction,
            Func getEntityFunc,
            Func vilFunc,
                Action handleNewEntityAction)
            where T : EntityBase, new()
        {
            if (srcEntities == null || !srcEntities.Any()) return;
            srcEntities.ForEach(t =>
            {
                bool isAdd = false;
                T destEntity = null;
                if (getEntityFunc != null)
                    destEntity = getEntityFunc(t);
                if (destEntity == null)
                {
                    isAdd = true;
                    destEntity = new T();
                }
                entityRelations[t.ID] = destEntity.ID;
                if (startTime != null)
                {
                    if (t.CREATE_TIME < startTime || t.MODIFY_TIME < startTime)
                        return;
                }
                if (vilFunc != null)
                {
                    bool isVil = vilFunc(t);
                    if (!isVil) return;
                }
                CopyUtils.CopyObject(destEntity, t, new string[] { "CREATER_ID", "MODIFIER_ID" });
                destEntity.ORG_ID = destOrgId;
                if (!string.IsNullOrEmpty(relationFieldName) && entityRelations != null)
                {
                    Type srcType = t.GetType();
                    Type destType = destEntity.GetType();
                    var srcP = srcType.GetProperty(relationFieldName);
                    var destP = destType.GetProperty(relationFieldName);
                    if (srcP != null && srcP.PropertyType == destP.PropertyType)
                    {
                        var value = LibUtils.ToGuid(srcP.GetValue(t, null));
                        try
                        {
                            Guid destId;
                            if (value != null && entityRelations.TryGetValue(value.Value, out destId))
                                destP.SetValue(destEntity, destId, null);
                        }
                        catch
                        { }
                    }
                }
                if (copyFieldAction != null)
                    copyFieldAction(t, destEntity, entityRelations);
                if (isAdd)
                    destAddEntities.Add(destEntity);
                else
                    destUpdateEntities.Add(destEntity);
                if (handleNewEntityAction != null)
                    handleNewEntityAction(destEntity);
            });
        }
        private void GetConfigBySrcOnTree(List srcEntities, Guid? srcParentId, Guid? destParentId,
                Guid destOrgId, Dictionary entityRelations,
                List destAddEntities, List destUpdateEntities, string relationFieldName, DateTime? startTime,
                Action> copyFieldAction,
                Func getEntityFunc,
                Func vilFunc,
                Action handleNewEntityAction)
            where T : MesTreeEntityBase, new()
        {
            if (srcEntities == null || !srcEntities.Any()) return;
            var temps = srcEntities.Where(t => t.PARENT_ID == srcParentId).ToList();
            if (!temps.Any()) return;
            temps.ForEach(t =>
            {
                T destEntity = null;
                if (getEntityFunc != null)
                    destEntity = getEntityFunc(t, destParentId);
                bool isAdd = false;
                if (destEntity == null)
                {
                    destEntity = new T();
                    isAdd = true;
                }
                entityRelations[t.ID] = destEntity.ID;
                bool isCopy = true;
                if (startTime != null)
                {
                    if (t.CREATE_TIME < startTime || t.MODIFY_TIME < startTime)
                        isCopy = false;
                }
                if (vilFunc != null)
                {
                    bool isVil = vilFunc(t);
                    if (!isVil) isCopy = false;
                }
                if (isCopy)
                {
                    CopyUtils.CopyObject(destEntity, t, new string[] { "CREATER_ID", "MODIFIER_ID" });
                    destEntity.ORG_ID = destOrgId;
                    if (!string.IsNullOrEmpty(relationFieldName) && entityRelations != null)
                    {
                        Type srcType = t.GetType();
                        Type destType = destEntity.GetType();
                        var srcP = srcType.GetProperty(relationFieldName);
                        var destP = destType.GetProperty(relationFieldName);
                        if (srcP != null && srcP.PropertyType == destP.PropertyType)
                        {
                            var value = LibUtils.ToGuid(srcP.GetValue(t, null));
                            try
                            {
                                Guid destId;
                                if (value != null && entityRelations.TryGetValue(value.Value, out destId))
                                    destP.SetValue(destEntity, destId, null);
                            }
                            catch
                            { }
                        }
                    }
                    copyFieldAction?.Invoke(t, destEntity, entityRelations);
                    if (destParentId != null && isAdd)
                        destEntity.PARENT_ID = destParentId;
                    if (isAdd)
                        destAddEntities.Add(destEntity);
                    else
                        destUpdateEntities.Add(destEntity);
                    handleNewEntityAction?.Invoke(destEntity);
                }
                GetConfigBySrcOnTree(srcEntities, t.ID, destEntity.ID, destOrgId,
                    entityRelations, destAddEntities, destUpdateEntities, relationFieldName, startTime, copyFieldAction,
                    getEntityFunc, vilFunc, handleNewEntityAction);
            });
        }
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 获取语法类型 0-update 和insert  1-仅获取update 2-仅获取insert
        private void DoGetSqlByEntity(DataBaseType dataBaseType, object obj, List result, string dstOrgId, int sqlType)
        {
            Type objType = obj.GetType();
            Dictionary fields = new Dictionary();
            string MODIFY_TIME = DateTime.Now.ToString("yyyy-MM-dd 00:00:00");
            foreach (var mi in objType.GetProperties())
            {
                if (string.Compare(mi.Name, "NAV_PROPERTY", true) != 0 && mi.Name.StartsWith("Nav_", StringComparison.OrdinalIgnoreCase) ||
                    mi.Name.StartsWith("VIR_", StringComparison.OrdinalIgnoreCase) ||
                    mi.Name.StartsWith("VIRTUAL_", StringComparison.OrdinalIgnoreCase) ||
                    mi.Name.ToUpper() != mi.Name)
                {
                    if (mi.DeclaringType.Name == "T_PF_MENU" && mi.Name == "MineType")
                    { 
                    }
                    else
                    {
                        //wyw 菜单导出 功能优化
                        continue;
                    }
                }
                string fieldName = mi.Name;
                string value = string.Empty;
                if (string.Compare(mi.Name, "CREATER_ID", true) == 0 || string.Compare(mi.Name, "MODIFIER_ID", true) == 0)
                    value = "NULL";
                else if (string.Compare(mi.Name, "MODIFY_TIME", true) == 0 || string.Compare(mi.Name, "MODIFY_TIME", true) == 0)//更新时间变成操作当天
                    value = MODIFY_TIME;
                else if (string.Compare(mi.Name, "ORG_ID", true) == 0)
                {
                    if (string.IsNullOrEmpty(dstOrgId))
                    {
                        var tmpObj = mi.GetValue(obj, null);
                        if (tmpObj != null)
                        {
                            value = tmpObj.ToString().ToUpper();
                            if (dataBaseType == DataBaseType.Oracle)
                                value = Utility.DataHelper.DotNetToOracle(value);
                            else if (dataBaseType == DataBaseType.MySQL || dataBaseType == DataBaseType.Postgresql)
                                value = tmpObj.ToString().ToLower();
                        }
                    }
                    else
                        value = dstOrgId;
                }
                else
                {
                    string propertyTypeName = mi.PropertyType.Name;
                    string fullTypeName = mi.PropertyType.FullName;
                    if (string.Compare(propertyTypeName, "GUID", true) == 0 || fullTypeName.IndexOf("Guid", StringComparison.OrdinalIgnoreCase) > -1)
                    {
                        var tmpObj = mi.GetValue(obj, null);
                        if (tmpObj != null)
                        {
                            value = tmpObj.ToString().ToUpper();
                            if (dataBaseType == DataBaseType.Oracle)
                                value = Utility.DataHelper.DotNetToOracle(value);
                            else if (dataBaseType == DataBaseType.MySQL || dataBaseType == DataBaseType.Postgresql)
                                value = tmpObj.ToString().ToLower();
                        }
                    }
                    else if (string.Compare(propertyTypeName, "DateTime", true) == 0 || fullTypeName.IndexOf("DateTime", StringComparison.OrdinalIgnoreCase) > -1)
                    {
                        var tmpObj = mi.GetValue(obj, null);
                        if (tmpObj != null)
                        {
                            if (dataBaseType == DataBaseType.Oracle)
                                value = "to_date('" + ((DateTime)tmpObj).ToString("yyyy/MM/dd hh:mm:ss") + "','yyyy-mm-dd hh24-mi-ss')";
                            else if (dataBaseType == DataBaseType.Postgresql)
                                value = ((DateTime)tmpObj).ToString("yyyy-MM-dd HH:mm:ss");
                            else
                                value = tmpObj.ToString();
                        }
                    }
                    else if (string.Compare(propertyTypeName, "bool", true) == 0 || string.Compare(propertyTypeName, "boolean", true) == 0 || fullTypeName.IndexOf("bool", StringComparison.OrdinalIgnoreCase) > -1)
                    {
                        var tmpObj = mi.GetValue(obj, null);
                        if (tmpObj != null)
                            value = ((bool)tmpObj) ? "1" : "0";
                    }
                    else
                    {
                        var tmpObj = mi.GetValue(obj, null);
                        if (tmpObj != null)
                            value = tmpObj.ToString();
                    }
                    if (string.IsNullOrEmpty(value))
                        value = "NULL";
                }
                if (!string.IsNullOrEmpty(value))
                    fields[fieldName] = value;
            }
            if (fields.Count > 0)
            {
                string tableName = objType.Name;
                if (string.Compare(objType.Namespace, "System.Data.Entity.DynamicProxies", true) == 0)
                    tableName = objType.BaseType.Name;
                if (dataBaseType == DataBaseType.Postgresql)
                    tableName = "\"" + tableName + "\"";
                StringBuilder upBuilder = new StringBuilder();
                StringBuilder upFieldBuilder = new StringBuilder();
                StringBuilder insertBuilder = new StringBuilder();
                upBuilder.Append("UPDATE " + tableName + " SET ");
                insertBuilder.Append("INSERT INTO " + tableName + "(");
                foreach (var item in fields)
                {
                    string field = item.Key;
                    if (dataBaseType == DataBaseType.Postgresql)
                        field = "\"" + field + "\"";
                    else if (DB_KEYWORDS.Any(t => (string.Compare(t, field, true) == 0)))//关键字加引号
                        field = (dataBaseType == DataBaseType.MySQL ? "`" : "\"") + field + (dataBaseType == DataBaseType.MySQL ? "`" : "\"");
                    insertBuilder.Append(field);
                    insertBuilder.Append(",");
                }
                insertBuilder.Length--;
                insertBuilder.Append(") VALUES(");
                string id = string.Empty;
                foreach (var item in fields)
                {
                    string field = item.Key;
                    string value = item.Value;
                    if (string.Compare(value, "NULL") != 0 && value.IndexOf("to_date", StringComparison.OrdinalIgnoreCase) == -1)
                        value = "'" + value + "'";
                    if (dataBaseType == DataBaseType.Postgresql)
                        field = "\"" + field + "\"";
                    else if (DB_KEYWORDS.Any(t => (string.Compare(t, field, true) == 0)))//关键字加引号
                        field = (dataBaseType == DataBaseType.MySQL ? "`" : "\"") + field + (dataBaseType == DataBaseType.MySQL ? "`" : "\"");
                    if (string.Compare(field, (dataBaseType == DataBaseType.Postgresql ? "\"ID\"" : "ID"), true) == 0)
                        id = value;
                    else
                    {
                        upBuilder.Append(field + "=" + value + ",");
                        upFieldBuilder.Append(field + "=" + value + ",");
                    }
                    insertBuilder.Append(value + ",");
                }
                upBuilder.Length--;
                insertBuilder.Length--;
                upFieldBuilder.Length--;
                insertBuilder.Append(")");
                if (dataBaseType == DataBaseType.Postgresql)
                    upBuilder.Append(" WHERE \"ID\"=" + id);
                else
                    upBuilder.Append(" WHERE ID=" + id);
                if (sqlType == 1)
                {
                    result.Add(upBuilder.ToString() + ";");
                }
                else if (sqlType == 2)
                {
                    result.Add(insertBuilder.ToString() + ";");
                }
                else if (dataBaseType == DataBaseType.Oracle)
                    result.Add(string.Format(" {0} ; if sql % notfound then {1} ; end if; ", upBuilder.ToString(), insertBuilder.ToString()));
                else if (dataBaseType == DataBaseType.MySQL)
                    result.Add(string.Format(" {0}  ON DUPLICATE KEY UPDATE {1}; ", insertBuilder.ToString(), upFieldBuilder.ToString()));
                else if (dataBaseType == DataBaseType.Postgresql)
                    result.Add(string.Format(@" do language plpgsql $$ declare v_rowCount int:= 0; begin {0}; GET DIAGNOSTICS v_rowCount = ROW_COUNT; if (v_rowCount = 0) then {1}; end if; end $$;",
                            upBuilder.ToString(), insertBuilder.ToString()));
                else
                    result.Add(string.Format("begin {0}; if @@RowCount = 0 begin {1} ; end  end ", upBuilder.ToString(), insertBuilder.ToString()));
            }
        }
        private void DoSynchFormConfigByOrg(Guid srcOrgId, List destOrgIds, DateTime? startTime)
        {
            List orgIds = new List();
            orgIds.Add(srcOrgId);
            orgIds.AddRange(destOrgIds);
            List destAddForms = new List();
            List destAddEdits = new List();
            List destAddEditPanels = new List();
            List destAddParamItems = new List();
            List destAddParamSchemes = new List();
            List destAddParamSchemeDetails = new List();
            List destAddTablePanels = new List();
            List destAddEditColumns = new List();
            List destAddEditColumnFilters = new List();
            List destAddEditColumnFillMaps = new List();
            List destAddEditColumnFillMapDs = new List();
            List destAddCustoms = new List();
            List destAddCharts = new List();
            List destAddChartParams = new List();
            List destAddTables = new List();
            List destAddColums = new List();
            List destAddColumFilters = new List();
            List destAddTableParams = new List();
            List destAddQuerys = new List();
            List destAddFormQuerys = new List();
            List destAddTrees = new List();
            List destAddTreeColumns = new List();
            List destAddBtns = new List();
            List destAddMenus = new List();
            List destAddAppMenus = new List();
            List destAddClientMenus = new List();
            List destAddCodeRules = new List();
            List destUpdateForms = new List();
            List destUpdateEdits = new List();
            List destUpdateEditPanels = new List();
            List destUpdateParamItems = new List();
            List destUpdateParamSchemes = new List();
            List destUpdateParamSchemeDetails = new List();
            List destUpdateTablePanels = new List();
            List destUpdateEditColumns = new List();
            List destUpdateEditColumnFilters = new List();
            List destUpdateEditColumnFillMaps = new List();
            List destUpdateEditColumnFillMapDs = new List();
            List destUpdateCustoms = new List();
            List destUpdateCharts = new List();
            List destUpdateChartParams = new List();
            List destUpdateTables = new List();
            List destUpdateColums = new List();
            List destUpdateColumFilters = new List();
            List