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 destUpdateTableParams = new List(); List destUpdateQuerys = new List(); List destUpdateFormQuerys = new List(); List destUpdateTrees = new List(); List destUpdateTreeColumns = new List(); List destUpdateBtns = new List(); List destUpdateMenus = new List(); List destUpdateAppMenus = new List(); List destUpdateClientMenus = new List(); List destUpdateCodeRules = new List(); Dictionary> entityRelations = new Dictionary>(); Dictionary tempRels = null; List updateFormIds = new List(); #region 系统参数模板 var paramItems = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcParamItems = paramItems.Where(t => t.ORG_ID == srcOrgId).ToList(); List paramItemIds = new List(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcParamItems, item, tempRels, destAddParamItems, destUpdateParamItems, string.Empty, startTime, null, (t) => { return paramItems.FirstOrDefault(t1 => t1.ORG_ID == item && t1.FIELD_NAME == t.FIELD_NAME); }, null, (t) => { if (!paramItemIds.Contains(t.ID)) paramItemIds.Add(t.ID); if (!paramItems.Any(t1 => t1.ID == t.ID)) paramItems.Add(t); }); } var paramSchemes = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcParamSchemes = paramSchemes.Where(t => t.ORG_ID == srcOrgId).ToList(); List paramSchemeIds = new List(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcParamSchemes, item, tempRels, destAddParamSchemes, destUpdateParamSchemes, string.Empty, startTime, null, (t) => { return paramSchemes.FirstOrDefault(t1 => t1.ORG_ID == item && t1.CODE == t.CODE); }, null, (t) => { if (!paramSchemeIds.Contains(t.ID)) paramSchemeIds.Add(t.ID); if (!paramSchemes.Any(t1 => t1.ID == t.ID)) paramSchemes.Add(t); }); } var paramSchemeDetails = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcParamSchemeDetails = paramSchemeDetails.Where(t => t.ORG_ID == srcOrgId).ToList(); List paramSchemeDetailIds = new List(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcParamSchemeDetails, item, tempRels, destAddParamSchemeDetails, destUpdateParamSchemeDetails, "PARAM_SCHEME_ID", startTime, (src, dest, rels) => { var srcItem = paramItems.FirstOrDefault(t1 => t1.ID == src.PARAM_ITEM_ID); if (srcItem != null) { var desItem = paramItems.FirstOrDefault(t => t.ORG_ID == item && srcItem.CODE == t.CODE); if (desItem != null) dest.PARAM_ITEM_ID = desItem.ID; } }, (t) => { var srcItem = paramItems.FirstOrDefault(t1 => t1.ID == t.PARAM_ITEM_ID); List destSchemeIds = new List(); if (srcItem != null) destSchemeIds = paramItems.Where(t1 => t1.CODE == srcItem.CODE).Select(t1 => t1.ID).ToList(); return paramSchemeDetails.FirstOrDefault(t1 => t1.ORG_ID == item && destSchemeIds.Contains(t1.ID)); }, null, (t) => { if (!paramSchemeDetailIds.Contains(t.ID)) paramSchemeDetailIds.Add(t.ID); if (!paramSchemeDetails.Any(t1 => t1.ID == t.ID)) paramSchemeDetails.Add(t); }); } #endregion #region 表单配置信息 //表单 var forms = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcForms = forms.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcForms, item, tempRels, destAddForms, destUpdateForms, string.Empty, startTime, null, (t) => { return forms.FirstOrDefault(t1 => t1.ORG_ID == item && t1.CODE == t.CODE); }, null, (t) => { if (!updateFormIds.Contains(t.ID)) updateFormIds.Add(t.ID); if (!forms.Any(t1 => t1.ID == t.ID)) forms.Add(t); }); } #region 编辑页 var pageEdits = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcPageEdits = pageEdits.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrcOnTree(srcPageEdits, null, null, item, tempRels, destAddEdits, destUpdateEdits, "PAGE_FORM_ID", startTime, (src, dest, rels) => { dest.NAV_PROPERTY = src.NAV_PROPERTY; T_PF_PARAM_SCHEME destParamScheme = null; if (src.PARAM_SCHEME_ID != null) { var srcScheme = paramSchemes.FirstOrDefault(t1 => t1.ID == src.PARAM_SCHEME_ID); if (srcScheme != null) destParamScheme = paramSchemes.FirstOrDefault(t1 => t1.ORG_ID == dest.ORG_ID && t1.CODE == srcScheme.CODE); } if (destParamScheme != null) dest.PARAM_SCHEME_ID = destParamScheme.ID; else dest.PARAM_SCHEME_ID = null; }, (src, destParentId) => { Guid destPageFormId; if (src.PAGE_FORM_ID != null && tempRels.TryGetValue(src.PAGE_FORM_ID.Value, out destPageFormId)) { return pageEdits.FirstOrDefault(t1 => t1.PAGE_FORM_ID == destPageFormId && t1.ORG_ID == item && t1.CODE == src.CODE && t1.PARENT_ID == destParentId); } return null; }, null, t => { if (t.PAGE_FORM_ID != null && !updateFormIds.Contains(t.PAGE_FORM_ID.Value)) updateFormIds.Add(t.PAGE_FORM_ID.Value); if (!pageEdits.Any(t1 => t1.ID == t.ID)) pageEdits.Add(t); }); } var editPanels = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcEditPanels = editPanels.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcEditPanels, item, tempRels, destAddEditPanels, destUpdateEditPanels, "PAGE_EDIT_ID", startTime, null, t => { Guid destId; if (tempRels.TryGetValue(t.PAGE_EDIT_ID, out destId)) { return editPanels.FirstOrDefault(t1 => t1.PAGE_EDIT_ID == destId && t1.ORG_ID == item && t1.LABEL == t.LABEL); } return null; }, null, t => { var pageEdit = pageEdits.FirstOrDefault(t1 => t1.ID == t.PAGE_EDIT_ID); if (pageEdit != null) { if (pageEdit.PAGE_FORM_ID != null && !updateFormIds.Contains(pageEdit.PAGE_FORM_ID.Value)) updateFormIds.Add(pageEdit.PAGE_FORM_ID.Value); } if (!editPanels.Any(t1 => t1.ID == t.ID)) editPanels.Add(t); }); } var editColumns = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcEditColumns = editColumns.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcEditColumns, item, tempRels, destAddEditColumns, destUpdateEditColumns, "PAGE_EDIT_ID", startTime, (src, dest, rel) => { Guid temp; if (src.PAGE_EDIT_PANEL_ID != null && rel.TryGetValue(src.PAGE_EDIT_PANEL_ID.Value, out temp)) dest.PAGE_EDIT_PANEL_ID = temp; }, (t) => { Guid destId; if (tempRels.TryGetValue(t.PAGE_EDIT_ID, out destId)) { return editColumns.FirstOrDefault(t1 => t1.ORG_ID == item && t1.FIELD_NAME == t.FIELD_NAME && t1.PAGE_EDIT_ID == destId); } return null; }, null, (t) => { var pageEdit = pageEdits.FirstOrDefault(t1 => t1.ID == t.PAGE_EDIT_ID); if (pageEdit != null) { if (pageEdit.PAGE_FORM_ID != null && !updateFormIds.Contains(pageEdit.PAGE_FORM_ID.Value)) updateFormIds.Add(pageEdit.PAGE_FORM_ID.Value); } if (!editColumns.Any(t1 => t1.ID == t.ID)) editColumns.Add(t); }); } var editColumnFilters = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcEditColumnFilters = editColumnFilters.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcEditColumnFilters, item, tempRels, destAddEditColumnFilters, destUpdateEditColumnFilters, "EDIT_COLUMN_ID", startTime, null, t => { Guid destId; if (tempRels.TryGetValue(t.EDIT_COLUMN_ID, out destId)) { return editColumnFilters.FirstOrDefault(t1 => t1.ORG_ID == item && t1.FIELD_NAME == t.FIELD_NAME && t1.OPERATION == t.OPERATION && t1.VALUE == t.VALUE && t1.IS_CUSTOM == t.IS_CUSTOM && t1.EDIT_COLUMN_ID == destId); } return null; }, null, t => { var editColumn = editColumns.FirstOrDefault(t1 => t1.ID == t.EDIT_COLUMN_ID); if (editColumn != null) { var pageEdit = pageEdits.FirstOrDefault(t1 => t1.ID == editColumn.PAGE_EDIT_ID); if (pageEdit != null) { if (pageEdit.PAGE_FORM_ID != null && !updateFormIds.Contains(pageEdit.PAGE_FORM_ID.Value)) updateFormIds.Add(pageEdit.PAGE_FORM_ID.Value); } } if (!editColumnFilters.Any(t1 => t1.ID == t.ID)) editColumnFilters.Add(t); }); } var editColumnFillMaps = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcEditColumnFillMaps = editColumnFillMaps.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcEditColumnFillMaps, item, tempRels, destAddEditColumnFillMaps, destUpdateEditColumnFillMaps, "EDIT_COLUMN_ID", startTime, null, t => { Guid destId; if (tempRels.TryGetValue(t.EDIT_COLUMN_ID, out destId)) { return editColumnFillMaps.FirstOrDefault(t1 => t1.ORG_ID == item && t1.SRC_NAV == t.SRC_NAV && t1.EDIT_COLUMN_ID == destId); } return null; }, null, t => { var editColumn = editColumns.FirstOrDefault(t1 => t1.ID == t.EDIT_COLUMN_ID); if (editColumn != null) { var pageEdit = pageEdits.FirstOrDefault(t1 => t1.ID == editColumn.PAGE_EDIT_ID); if (pageEdit != null) { if (pageEdit.PAGE_FORM_ID != null && !updateFormIds.Contains(pageEdit.PAGE_FORM_ID.Value)) updateFormIds.Add(pageEdit.PAGE_FORM_ID.Value); } } if (!editColumnFillMaps.Any(t1 => t1.ID == t.ID)) editColumnFillMaps.Add(t); }); } var editColumnFillMapDetails = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcEditColumnFillMapDetails = editColumnFillMapDetails.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcEditColumnFillMapDetails, item, tempRels, destAddEditColumnFillMapDs, destUpdateEditColumnFillMapDs, "EDIT_COLUMN_FILL_MAP_ID", startTime, null, t => { Guid destId; if (tempRels.TryGetValue(t.EDIT_COLUMN_FILL_MAP_ID, out destId)) { return editColumnFillMapDetails.FirstOrDefault(t1 => t1.ORG_ID == item && t1.SRC_FIELD_NAME == t.SRC_FIELD_NAME && t1.DEST_FIELD_NAME == t.DEST_FIELD_NAME && t1.EDIT_COLUMN_FILL_MAP_ID == destId); } return null; }, null, t => { var map = editColumnFillMaps.FirstOrDefault(t1 => t.ID == t.EDIT_COLUMN_FILL_MAP_ID); if (map != null) { var editColumn = editColumns.FirstOrDefault(t1 => t1.ID == map.EDIT_COLUMN_ID); if (editColumn != null) { var pageEdit = pageEdits.FirstOrDefault(t1 => t1.ID == editColumn.PAGE_EDIT_ID); if (pageEdit != null) { if (pageEdit.PAGE_FORM_ID != null && !updateFormIds.Contains(pageEdit.PAGE_FORM_ID.Value)) updateFormIds.Add(pageEdit.PAGE_FORM_ID.Value); } } } if (!editColumnFillMapDetails.Any(t1 => t1.ID == t.ID)) editColumnFillMapDetails.Add(t); }); } #endregion #region 自定义页 var pageCustoms = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcPageCustoms = pageCustoms.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcPageCustoms, item, tempRels, destAddCustoms, destUpdateCustoms, "PAGE_FORM_ID", startTime, null, t => { Guid destPageFormId; if (t.PAGE_FORM_ID != null && tempRels.TryGetValue(t.PAGE_FORM_ID.Value, out destPageFormId)) { return pageCustoms.FirstOrDefault(t1 => t1.PAGE_FORM_ID == destPageFormId && t1.ORG_ID == item && t1.COMPONENT_NAME == t.COMPONENT_NAME); } return null; }, null, t => { if (t.PAGE_FORM_ID != null && !updateFormIds.Contains(t.PAGE_FORM_ID.Value)) updateFormIds.Add(t.PAGE_FORM_ID.Value); if (!pageCustoms.Any(t1 => t1.ID == t.ID)) pageCustoms.Add(t); }); } #endregion #region 图表页 var pageCharts = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcPageCharts = pageCharts.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcPageCharts, item, tempRels, destAddCharts, destUpdateCharts, "PAGE_FORM_ID", startTime, null, t => { Guid destPageFormId; if (t.PAGE_FORM_ID != null && tempRels.TryGetValue(t.PAGE_FORM_ID.Value, out destPageFormId)) { return pageCharts.FirstOrDefault(t1 => t1.PAGE_FORM_ID == destPageFormId && t1.ORG_ID == item && t1.CODE == t.CODE); } return null; }, null, t => { if (t.PAGE_FORM_ID != null && !updateFormIds.Contains(t.PAGE_FORM_ID.Value)) updateFormIds.Add(t.PAGE_FORM_ID.Value); if (!pageCharts.Any(t1 => t1.ID == t.ID)) pageCharts.Add(t); }); } var pageChartParams = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcPageChartParams = pageChartParams.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcPageChartParams, item, tempRels, destAddChartParams, destUpdateChartParams, "PAGE_CHART_ID", startTime, null, t => { Guid destId; if (tempRels.TryGetValue(t.PAGE_CHART_ID, out destId)) { return pageChartParams.FirstOrDefault(t1 => t1.PAGE_CHART_ID == destId && t1.FIELD_NAME == t.FIELD_NAME && t1.OPERATION == t.OPERATION && t1.VALUE == t.VALUE && t1.IS_CUSTOM == t.IS_CUSTOM && t1.ORG_ID == item); } return null; }, null, t => { var pageChart = pageCharts.FirstOrDefault(t1 => t.ID == t.PAGE_CHART_ID); if (pageChart != null) { if (pageChart.PAGE_FORM_ID != null && !updateFormIds.Contains(pageChart.PAGE_FORM_ID.Value)) updateFormIds.Add(pageChart.PAGE_FORM_ID.Value); } if (!pageChartParams.Any(t1 => t1.ID == t.ID)) pageChartParams.Add(t); }); } #endregion #region 列表页 var pageTables = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcPageTables = pageTables.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrcOnTree(srcPageTables, null, null, item, tempRels, destAddTables, destUpdateTables, "PAGE_FORM_ID", startTime, (src, dest, rels) => { T_PF_PARAM_SCHEME destParamScheme = null; if (src.PARAM_SCHEME_ID != null) { var srcScheme = paramSchemes.FirstOrDefault(t1 => t1.ID == src.PARAM_SCHEME_ID); if (srcScheme != null) destParamScheme = paramSchemes.FirstOrDefault(t1 => t1.ORG_ID == dest.ORG_ID && t1.CODE == srcScheme.CODE); } if (destParamScheme != null) dest.PARAM_SCHEME_ID = destParamScheme.ID; else dest.PARAM_SCHEME_ID = null; }, (src, destParentId) => { Guid destPageFormId; if (src.PAGE_FORM_ID != null && tempRels.TryGetValue(src.PAGE_FORM_ID.Value, out destPageFormId)) { return pageTables.FirstOrDefault(t1 => t1.PAGE_FORM_ID == destPageFormId && t1.ORG_ID == item && t1.CODE == src.CODE && t1.PARENT_ID == destParentId); } return null; }, null, t => { if (t.PAGE_FORM_ID != null && !updateFormIds.Contains(t.PAGE_FORM_ID.Value)) updateFormIds.Add(t.PAGE_FORM_ID.Value); if (!pageTables.Any(t1 => t1.ID == t.ID)) pageTables.Add(t); }); } var tablePanels = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcTablePanels = tablePanels.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcTablePanels, item, tempRels, destAddTablePanels, destUpdateTablePanels, "PAGE_TABLE_ID", startTime, null, t => { Guid destId; if (tempRels.TryGetValue(t.PAGE_TABLE_ID, out destId)) { return tablePanels.FirstOrDefault(t1 => t1.PAGE_TABLE_ID == destId && t1.ORG_ID == item && t1.LABEL == t.LABEL); } return null; }, null, t => { var pageEdit = pageTables.FirstOrDefault(t1 => t1.ID == t.PAGE_TABLE_ID); if (pageEdit != null) { if (pageEdit.PAGE_FORM_ID != null && !updateFormIds.Contains(pageEdit.PAGE_FORM_ID.Value)) updateFormIds.Add(pageEdit.PAGE_FORM_ID.Value); } if (!tablePanels.Any(t1 => t1.ID == t.ID)) tablePanels.Add(t); }); } var columns = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcColumns = columns.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcColumns, item, tempRels, destAddColums, destUpdateColums, "PAGE_TABLE_ID", startTime, (src, dest, rel) => { Guid temp; if (src.PAGE_TABLE_PANEL_ID != null && rel.TryGetValue(src.PAGE_TABLE_PANEL_ID.Value, out temp)) dest.PAGE_TABLE_PANEL_ID = temp; }, t => { Guid destId; if (t.PAGE_TABLE_ID != null && tempRels.TryGetValue(t.PAGE_TABLE_ID.Value, out destId)) { return columns.FirstOrDefault(t1 => t1.ORG_ID == item && t1.FIELD_NAME == t.FIELD_NAME && t1.PAGE_TABLE_ID == destId); } return null; }, null, t => { var pageTable = pageTables.FirstOrDefault(t1 => t1.ID == t.PAGE_TABLE_ID); if (pageTable != null) { if (pageTable.PAGE_FORM_ID != null && !updateFormIds.Contains(pageTable.PAGE_FORM_ID.Value)) updateFormIds.Add(pageTable.PAGE_FORM_ID.Value); } if (!columns.Any(t1 => t1.ID == t.ID)) columns.Add(t); }); } var columnFilters = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcColumnFilters = columnFilters.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcColumnFilters, item, tempRels, destAddColumFilters, destUpdateColumFilters, "COLUMN_ID", startTime, null, t => { Guid destId; if (tempRels.TryGetValue(t.COLUMN_ID, out destId)) { return srcColumnFilters.FirstOrDefault(t1 => t1.ORG_ID == item && t1.FIELD_NAME == t.FIELD_NAME && t1.OPERATION == t.OPERATION && t1.VALUE == t.VALUE && t1.IS_CUSTOM == t.IS_CUSTOM && t1.COLUMN_ID == destId); } return null; }, null, t => { var column = columns.FirstOrDefault(t1 => t1.ID == t.COLUMN_ID); if (column != null) { var pageTable = pageTables.FirstOrDefault(t1 => t1.ID == column.PAGE_TABLE_ID); if (pageTable != null) { if (pageTable.PAGE_FORM_ID != null && !updateFormIds.Contains(pageTable.PAGE_FORM_ID.Value)) updateFormIds.Add(pageTable.PAGE_FORM_ID.Value); } } if (!columnFilters.Any(t1 => t1.ID == t.ID)) columnFilters.Add(t); }); } var tableParams = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcTableParams = tableParams.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcTableParams, item, tempRels, destAddTableParams, destUpdateTableParams, "PAGE_TABLE_ID", startTime, null, t => { Guid destId; if (tempRels.TryGetValue(t.PAGE_TABLE_ID, out destId)) { return tableParams.FirstOrDefault(t1 => t1.ORG_ID == item && t1.FIELD_NAME == t.FIELD_NAME && t1.PAGE_TABLE_ID == destId); } return null; }, null, t => { var pageTable = pageTables.FirstOrDefault(t1 => t1.ID == t.PAGE_TABLE_ID); if (pageTable != null) { if (pageTable.PAGE_FORM_ID != null && !updateFormIds.Contains(pageTable.PAGE_FORM_ID.Value)) updateFormIds.Add(pageTable.PAGE_FORM_ID.Value); } if (!tableParams.Any(t1 => t1.ID == t.ID)) tableParams.Add(t); }); } #endregion #region 查询 var formQuerys = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcFormQuerys = formQuerys.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcFormQuerys, item, tempRels, destAddFormQuerys, destUpdateFormQuerys, "PAGE_FORM_ID", startTime, null, t => { Guid destPageFormId; if (t.PAGE_FORM_ID != null && tempRels.TryGetValue(t.PAGE_FORM_ID.Value, out destPageFormId)) { return formQuerys.FirstOrDefault(t1 => t1.PAGE_FORM_ID == destPageFormId && t1.ORG_ID == item && t1.CODE == t.CODE); } return null; }, null, t => { if (t.PAGE_FORM_ID != null && !updateFormIds.Contains(t.PAGE_FORM_ID.Value)) updateFormIds.Add(t.PAGE_FORM_ID.Value); if (!formQuerys.Any(t1 => t1.ID == t.ID)) formQuerys.Add(t); }); } var querys = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcQuerys = querys.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcQuerys, item, tempRels, destAddQuerys, destUpdateQuerys, "PAGE_FORM_ID", startTime, (src, dest, rels) => { Guid formQueryId; if (src.PAGE_FORM_QUERY_ID != null && rels.TryGetValue(src.PAGE_FORM_QUERY_ID.Value, out formQueryId)) dest.PAGE_FORM_QUERY_ID = formQueryId; }, t => { Guid destId; if (t.PAGE_FORM_QUERY_ID != null && tempRels.TryGetValue(t.PAGE_FORM_QUERY_ID.Value, out destId)) { return querys.FirstOrDefault(t1 => t1.ORG_ID == item && t1.QUERY_NAME == t.QUERY_NAME && t1.OP_DEFAULT == t.OP_DEFAULT && t1.DATA_VALUE == t.DATA_VALUE && t1.IS_CUSTOM == t.IS_CUSTOM && t1.PAGE_FORM_QUERY_ID == destId); } return null; }, null, t => { var formQury = formQuerys.FirstOrDefault(t1 => t1.ID == t.PAGE_FORM_QUERY_ID); if (formQury != null) { if (formQury.PAGE_FORM_ID != null && !updateFormIds.Contains(formQury.PAGE_FORM_ID.Value)) updateFormIds.Add(formQury.PAGE_FORM_ID.Value); } if (!querys.Any(t1 => t1.ID == t.ID)) querys.Add(t); }); } #endregion #region 树页面 var pageTrees = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcPageTrees = pageTrees.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcPageTrees, item, tempRels, destAddTrees, destUpdateTrees, "PAGE_FORM_ID", startTime, null, t => { Guid destPageFormId; if (t.PAGE_FORM_ID != null && tempRels.TryGetValue(t.PAGE_FORM_ID.Value, out destPageFormId)) { return pageTrees.FirstOrDefault(t1 => t1.PAGE_FORM_ID == destPageFormId && t1.ORG_ID == item && t1.CODE == t.CODE); } return null; }, null, t => { if (t.PAGE_FORM_ID != null && !updateFormIds.Contains(t.PAGE_FORM_ID.Value)) updateFormIds.Add(t.PAGE_FORM_ID.Value); if (!pageTrees.Any(t1 => t1.ID == t.ID)) pageTrees.Add(t); }); } var treeColumns = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcTreeColumns = treeColumns.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcTreeColumns, item, tempRels, destAddTreeColumns, destUpdateTreeColumns, "PAGE_TREE_ID", startTime, null, t => { Guid destPageFormId; if (tempRels.TryGetValue(t.PAGE_TREE_ID, out destPageFormId)) { return treeColumns.FirstOrDefault(t1 => t1.PAGE_TREE_ID == destPageFormId && t1.ORG_ID == item && t1.FIELD_NAME == t.FIELD_NAME); } return null; }, null, t => { var pageTree = pageTrees.FirstOrDefault(t1 => t1.ID == t.PAGE_TREE_ID); if (pageTree != null) { if (pageTree.PAGE_FORM_ID != null && !updateFormIds.Contains(pageTree.PAGE_FORM_ID.Value)) updateFormIds.Add(pageTree.PAGE_FORM_ID.Value); } if (!treeColumns.Any(t1 => t1.ID == t.ID)) treeColumns.Add(t); }); } #endregion #region 按钮 var btns = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcBtns = btns.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcBtns, item, tempRels, destAddBtns, destUpdateBtns, string.Empty, startTime, (src, dest, rels) => { Guid destId; if (src.PAGE_CUSTOM_FORM_ID != null && rels.TryGetValue(src.PAGE_CUSTOM_FORM_ID.Value, out destId)) { dest.PAGE_CUSTOM_FORM_ID = destId; dest.PAGE_ID = destId; } if (src.PAGE_TABLE_ID != null && rels.TryGetValue(src.PAGE_TABLE_ID.Value, out destId)) { dest.PAGE_TABLE_ID = destId; dest.PAGE_ID = destId; } if (src.PAGE_EDIT_ID != null && rels.TryGetValue(src.PAGE_EDIT_ID.Value, out destId)) { dest.PAGE_EDIT_ID = destId; dest.PAGE_ID = destId; } }, t => { Guid destId; if (t.PAGE_CUSTOM_FORM_ID != null && tempRels.TryGetValue(t.PAGE_CUSTOM_FORM_ID.Value, out destId)) return btns.FirstOrDefault(t1 => t1.PAGE_CUSTOM_FORM_ID == destId && t1.ORG_ID == item && t1.LABEL == t.LABEL && t1.BTN_TYPE == t.BTN_TYPE && t1.BTN_FUN_TYPE == t.BTN_FUN_TYPE); if (t.PAGE_TABLE_ID != null && tempRels.TryGetValue(t.PAGE_TABLE_ID.Value, out destId)) return btns.FirstOrDefault(t1 => t1.PAGE_TABLE_ID == destId && t1.ORG_ID == item && t1.LABEL == t.LABEL && t1.BTN_TYPE == t.BTN_TYPE && t1.BTN_FUN_TYPE == t.BTN_FUN_TYPE); if (t.PAGE_EDIT_ID != null && tempRels.TryGetValue(t.PAGE_EDIT_ID.Value, out destId)) return btns.FirstOrDefault(t1 => t1.PAGE_EDIT_ID == destId && t1.ORG_ID == item && t1.LABEL == t.LABEL && t1.BTN_TYPE == t.BTN_TYPE && t1.BTN_FUN_TYPE == t.BTN_FUN_TYPE); return null; }, null, t => { Guid? formId = null; if (t.PAGE_CUSTOM_FORM_ID != null) { var pageCustom = pageCustoms.FirstOrDefault(t1 => t.ID == t.PAGE_CUSTOM_FORM_ID); if (pageCustom != null) formId = pageCustom.PAGE_FORM_ID; } if (t.PAGE_TABLE_ID != null) { var pageTable = pageTables.FirstOrDefault(t1 => t.ID == t.PAGE_TABLE_ID); if (pageTable != null) formId = pageTable.PAGE_FORM_ID; } if (t.PAGE_EDIT_ID != null) { var pageEdit = pageEdits.FirstOrDefault(t1 => t.ID == t.PAGE_EDIT_ID); if (pageEdit != null) formId = pageEdit.PAGE_FORM_ID; else { var pageTree = pageTrees.FirstOrDefault(t1 => t.ID == t.PAGE_EDIT_ID); if (pageTree != null) formId = pageTree.PAGE_FORM_ID; } } if (formId != null && !updateFormIds.Contains(formId.Value)) updateFormIds.Add(formId.Value); if (!btns.Any(t1 => t1.ID == t.ID)) btns.Add(t); }); } #endregion #endregion #region 菜单 var menus = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcMenus = menus.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrcOnTree(srcMenus, null, null, item, tempRels, destAddMenus, destUpdateMenus, "MENU_FORM_ID", startTime, null, (src, destParentId) => { return menus.FirstOrDefault(t1 => t1.ORG_ID == item && t1.NAME == src.NAME && t1.PARENT_ID == destParentId); }, null, t => { if (!menus.Any(t1 => t1.ID == t.ID)) menus.Add(t); }); } var appMenus = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcAppMenus = appMenus.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrcOnTree(srcAppMenus, null, null, item, tempRels, destAddAppMenus, destUpdateAppMenus, "MENU_FORM_ID", startTime, null, (src, destParentId) => { return appMenus.FirstOrDefault(t1 => t1.ORG_ID == item && t1.NAME == src.NAME && t1.PARENT_ID == destParentId); }, null, t => { if (!appMenus.Any(t1 => t1.ID == t.ID)) appMenus.Add(t); }); } var clientMenus = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcClientMenus = clientMenus.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrcOnTree(srcClientMenus, null, null, item, tempRels, destAddClientMenus, destUpdateClientMenus, "MENU_FORM_ID", startTime, null, (src, destParentId) => { return clientMenus.FirstOrDefault(t1 => t1.ORG_ID == item && t1.NAME == src.NAME && t1.PARENT_ID == destParentId); }, null, t => { if (!clientMenus.Any(t1 => t1.ID == t.ID)) clientMenus.Add(t); }); } #endregion #region 其他 var codeRules = this.GetEntities(t => orgIds.Contains(t.ORG_ID ?? Guid.Empty), new BaseFilter()).ToList(); var srcCodeRules = codeRules.Where(t => t.ORG_ID == srcOrgId).ToList(); foreach (var item in destOrgIds) { if (!entityRelations.TryGetValue(item, out tempRels)) { tempRels = new Dictionary(); entityRelations.Add(item, tempRels); } GetConfigBySrc(srcCodeRules, item, tempRels, destAddCodeRules, destUpdateCodeRules, string.Empty, startTime, null, t => { return codeRules.FirstOrDefault(t1 => t1.CODE_TYPE == t.CODE_TYPE && t1.ORG_ID == item); }, null, t => { if (!codeRules.Any(t1 => t1.ID == t.ID)) codeRules.Add(t); }); } if (destAddCodeRules.Any()) destAddCodeRules.ForEach(t => t.CURRENT_DATA = null); #endregion #region 保存 UnifiedCommit(() => { this.BantchAddEntityNoCommit(destAddForms); this.BantchAddEntityNoCommit(destAddParamItems); this.BantchAddEntityNoCommit(destAddParamSchemes); this.BantchAddEntityNoCommit(destAddParamSchemeDetails); this.TreeBantchAddEntityNoCommit(destAddEdits); this.BantchAddEntityNoCommit(destAddEditPanels); this.BantchAddEntityNoCommit(destAddEditColumns); this.BantchAddEntityNoCommit(destAddEditColumnFilters); this.BantchAddEntityNoCommit(destAddEditColumnFillMaps); this.BantchAddEntityNoCommit(destAddEditColumnFillMapDs); this.BantchAddEntityNoCommit(destAddCustoms); this.BantchAddEntityNoCommit(destAddCharts); this.BantchAddEntityNoCommit(destAddChartParams); this.TreeBantchAddEntityNoCommit(destAddTables); this.BantchAddEntityNoCommit(destAddTablePanels); this.BantchAddEntityNoCommit(destAddColums); this.BantchAddEntityNoCommit(destAddColumFilters); this.BantchAddEntityNoCommit(destAddTableParams); this.BantchAddEntityNoCommit(destAddFormQuerys); this.BantchAddEntityNoCommit(destAddQuerys); this.BantchAddEntityNoCommit(destAddTrees); this.BantchAddEntityNoCommit(destAddTreeColumns); this.BantchAddEntityNoCommit(destAddBtns); this.TreeBantchAddEntityNoCommit(destAddMenus); this.TreeBantchAddEntityNoCommit(destAddAppMenus); this.TreeBantchAddEntityNoCommit(destAddClientMenus); this.BantchAddEntityNoCommit(destAddCodeRules); this.BantchUpdateEntityNoCommit(destUpdateForms); this.BantchUpdateEntityNoCommit(destUpdateParamItems); this.BantchUpdateEntityNoCommit(destUpdateParamSchemes); this.BantchUpdateEntityNoCommit(destUpdateParamSchemeDetails); this.TreeBantchUpdateEntityNoCommit(destUpdateEdits); this.BantchUpdateEntityNoCommit(destUpdateEditPanels); this.BantchUpdateEntityNoCommit(destUpdateTablePanels); this.BantchUpdateEntityNoCommit(destUpdateEditColumns); this.BantchUpdateEntityNoCommit(destUpdateEditColumnFilters); this.BantchUpdateEntityNoCommit(destUpdateEditColumnFillMaps); this.BantchUpdateEntityNoCommit(destUpdateEditColumnFillMapDs); this.BantchUpdateEntityNoCommit(destUpdateCustoms); this.BantchUpdateEntityNoCommit(destUpdateCharts); this.BantchUpdateEntityNoCommit(destUpdateChartParams); this.TreeBantchUpdateEntityNoCommit(destUpdateTables); this.BantchUpdateEntityNoCommit(destUpdateColums); this.BantchUpdateEntityNoCommit(destUpdateColumFilters); this.BantchUpdateEntityNoCommit(destUpdateTableParams); this.BantchUpdateEntityNoCommit(destUpdateFormQuerys); this.BantchUpdateEntityNoCommit(destUpdateQuerys); this.BantchUpdateEntityNoCommit(destUpdateTrees); this.BantchUpdateEntityNoCommit(destUpdateTreeColumns); this.BantchUpdateEntityNoCommit(destUpdateBtns); this.TreeBantchUpdateEntityNoCommit(destUpdateMenus); this.TreeBantchUpdateEntityNoCommit(destUpdateAppMenus); this.TreeBantchUpdateEntityNoCommit(destUpdateClientMenus); this.BantchUpdateEntityNoCommit(destUpdateCodeRules); }); #region 系统参数修改表单配置 Dictionary> tempCookies = new Dictionary>(); var schemeIds = paramSchemeDetails.Where(t1 => paramSchemeDetailIds.Contains(t1.ID) || paramItemIds.Contains(t1.PARAM_ITEM_ID)).Select(t => t.PARAM_SCHEME_ID).ToList(); var allParamSchemeIds = paramSchemes.Where(t => paramSchemeIds.Contains(t.ID) || schemeIds.Contains(t.ID)).Select(t => t.ID).ToList(); if (allParamSchemeIds.Any()) { var temppageTables = pageTables.Where(t => allParamSchemeIds.Contains(t.PARAM_SCHEME_ID ?? Guid.Empty)).ToList(); temppageTables.ForEach(t => { if (t.PAGE_FORM_ID != null && !updateFormIds.Contains(t.PAGE_FORM_ID.Value)) updateFormIds.Add(t.PAGE_FORM_ID.Value); List list = null; if (!tempCookies.TryGetValue(t.ORG_ID.Value, out list)) { list = new List(); tempCookies.Add(t.ORG_ID.Value, list); } list.Add(string.Format("form_config_tablebase_{0}_{1}", t.ID, t.ORG_ID.Value)); var tempForm = forms.FirstOrDefault(t1 => t1.ID == t.PAGE_FORM_ID); if (tempForm != null) { list.Add(string.Format("form_config_table_{0}_{1}_{2}", tempForm.CODE, t.ORG_ID, (t.PARENT_ID == null ? "" : t.PARENT_ID.ToString()))); list.Add(string.Format("form_config_table_{0}_{1}_{2}_{3}", tempForm.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()).ToList(); temppageEdits.ForEach(t => { if (t.PAGE_FORM_ID != null && !updateFormIds.Contains(t.PAGE_FORM_ID.Value)) updateFormIds.Add(t.PAGE_FORM_ID.Value); }); } #endregion List versionPageTables = new List(); List versionColumns = new List(); List versionPageTablePanels = new List(); if (destAddTables.Any()) versionPageTables.AddRange(destAddTables); if (destUpdateTables.Any()) versionPageTables.AddRange(destUpdateTables); if (destAddColums.Any()) versionColumns.AddRange(destAddColums); if (destUpdateColums.Any()) versionColumns.AddRange(destUpdateColums); if (destAddTablePanels.Any()) versionPageTablePanels.AddRange(destAddTablePanels); if (destUpdateTablePanels.Any()) versionPageTablePanels.AddRange(destUpdateTablePanels); AddFormConfigVersion(updateFormIds, versionPageTables, versionColumns, versionPageTablePanels, tempCookies); #endregion } public void AddFormConfigVersion(List formIds, List pageTables, List columns, List pageTablePanels, Dictionary> otherCookies) { //List formConfigVersions = new List(); //List formConfigVersionDetails = new List(); //this.DoAddFormConfigVersion(formIds, pageTables, columns, pageTablePanels, otherCookies,formConfigVersions, // formConfigVersionDetails); //this.BantchAddEntity(formConfigVersions); //this.BantchAddEntity(formConfigVersionDetails); } private void DoAddFormConfigVersion(List formIds, List pageTables, List columns, List pageTablePanels, Dictionary> otherCookies, List formConfigVersions, List formConfigVersionDetails) { //if (formIds == null || !formIds.Any()) return; //var versionForms = this.GetEntities(t => formIds.Contains(t.ID), new BaseFilter()).ToList(); //var g= versionForms.GroupBy(t => t.ORG_ID.Value).ToList(); //foreach (var orgG in g) //{ // var orgId = orgG.Key; // List cookies = new List(); // var temps = orgG.ToList(); // temps.ForEach(t => // { // cookies.Add(string.Format("form_config_form_{0}_{1}", t.CODE, orgId)); // cookies.Add(string.Format("form_config_custom_{0}_{1}", t.CODE, orgId)); // cookies.Add(string.Format("form_config_edit_{0}_{1}", t.CODE, orgId)); // cookies.Add(string.Format("form_config_tree_{0}_{1}", t.CODE, orgId)); // cookies.Add(string.Format("form_config_table_{0}_{1}", t.CODE, orgId)); // cookies.Add(string.Format("form_config_search_{0}_{1}", t.ID, orgId)); // cookies.Add(string.Format("form_config_search_{0}_{1}", t.CODE, orgId)); // cookies.Add(string.Format("form_config_chart_{0}_{1}", t.CODE, orgId)); // cookies.Add(string.Format("form_config_chart_{0}_{1}", t.ID, orgId)); // }); // if (pageTables != null && pageTables.Any()) // { // var tempDestTables = pageTables.Where(t => t.ORG_ID == orgId).ToList(); // tempDestTables.ForEach(t => // { // var tempForm = versionForms.FirstOrDefault(t1 => t1.ID == t.PAGE_FORM_ID); // if (tempForm != null) // { // cookies.Add(string.Format("form_config_table_{0}_{1}_{2}", tempForm.CODE, orgId, (t.PARENT_ID == null ? "" : t.PARENT_ID.ToString()))); // cookies.Add(string.Format("form_config_table_{0}_{1}_{2}_{3}", tempForm.CODE, orgId, (t.PARENT_ID == null ? "" : t.PARENT_ID.ToString()), // t.ID)); // } // cookies.Add(string.Format("form_config_tablebase_{0}_{1}", t.ID, orgId)); // }); // } // var tempDestColumnTableIds = columns==null?new List(): columns.Where(t => t.ORG_ID == orgId).Select(t => t.PAGE_TABLE_ID.Value).ToList(); // if(pageTablePanels!=null) // tempDestColumnTableIds.AddRange(pageTablePanels.Where(t => t.ORG_ID == orgId).Select(t => t.PAGE_TABLE_ID).ToList()); // tempDestColumnTableIds.ForEach(t => // { // cookies.Add(string.Format("form_config_tablebase_{0}_{1}", t, orgId)); // }); // List list = null; // if (otherCookies!=null&&otherCookies.TryGetValue(orgId, out list)) // cookies.AddRange(list); // if (!cookies.Any()) continue; // 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; // T_PF_FORM_CONFIG_VERSION formConfigVersion = new T_PF_FORM_CONFIG_VERSION(); // formConfigVersion.ORG_ID = orgId; // formConfigVersion.VERSION = version; // formConfigVersions.Add(formConfigVersion); // foreach (var cookieds in cookies) // { // T_PF_FORM_CONFIG_VERSION_D formConfigVersionDetail = new T_PF_FORM_CONFIG_VERSION_D(); // formConfigVersionDetail.ORG_ID = orgId; // formConfigVersionDetail.REMOVE_COOKIE_KEY = cookieds; // formConfigVersionDetail.FORM_CONFIG_VERSION_ID = formConfigVersion.ID; // formConfigVersionDetails.Add(formConfigVersionDetail); // } //} } private void DoExcuteSqlAndGetResult(string sql, ExecuteSqlResult executeSqlResult, ref int tableIndex) { if (string.IsNullOrEmpty(sql)) return; sql = sql.Trim(); if (string.IsNullOrEmpty(sql)) return; try { List tables = new List(); if (sql.IndexOf("Update", StringComparison.OrdinalIgnoreCase) > -1 || sql.IndexOf("Insert", StringComparison.OrdinalIgnoreCase) > -1 || sql.IndexOf("Delete", StringComparison.OrdinalIgnoreCase) > -1) { var ret = this.ExecuteNonQuery(System.Data.CommandType.Text, sql, null, null); var executeSqlTable = new ExecuteSqlTable(); executeSqlTable.Label = "执行结果" + tableIndex; executeSqlTable.Index = tableIndex; tableIndex++; ExecuteSqlColumn column = new ExecuteSqlColumn() { FieldName = "Result", Label = "结果" }; executeSqlTable.Columns.Add(column); ExecuteSqlRowColumn executeSqlRowColumn = new ExecuteSqlRowColumn() { ColumnId = column.ID, Value = ("影响" + ret + "行") }; ExecuteSqlRow row = new ExecuteSqlRow(); row.Datas.Add(executeSqlRowColumn); executeSqlTable.Rows.Add(row); tables.Add(executeSqlTable); } else { var tempTableIndex = tableIndex; this.ExecuteReader(sql, null, (reader) => { do { ExecuteSqlTable executeSqlTable = null; while (reader.Read()) { if (executeSqlTable == null) { executeSqlTable = new ExecuteSqlTable(); executeSqlTable.IsSelectTable = true; executeSqlTable.Label = "执行结果" + tempTableIndex; executeSqlTable.Index = tempTableIndex; tempTableIndex++; for (int i = 0; i < reader.FieldCount; i++) { ExecuteSqlColumn column = new ExecuteSqlColumn() { FieldName = reader.GetName(i), Label = reader.GetName(i), ColumnType = reader.GetFieldType(i), }; executeSqlTable.Columns.Add(column); } tables.Add(executeSqlTable); } ExecuteSqlRow row = new ExecuteSqlRow(); int j = 0; foreach (var item in executeSqlTable.Columns) { ExecuteSqlRowColumn executeSqlRowColumn = new ExecuteSqlRowColumn() { ColumnId = item.ID, }; var obj = reader.GetValue(j); if (obj != null && obj != DBNull.Value) { if (obj is byte[]) { var blob = obj as byte[]; executeSqlRowColumn.Value = BitConverter.ToString(blob).Replace("-", ""); } else { executeSqlRowColumn.Value = Convert.ToString(obj); } } row.Datas.Add(executeSqlRowColumn); j++; } executeSqlTable.Rows.Add(row); } } while (reader.NextResult()); }); tableIndex = tempTableIndex; } if (tables.Any()) executeSqlResult.Tables.AddRange(tables); } catch (Exception ex) { var executeSqlTable = new ExecuteSqlTable(); executeSqlTable.Label = "执行结果" + tableIndex; executeSqlTable.Index = tableIndex; tableIndex++; ExecuteSqlColumn column = new ExecuteSqlColumn() { FieldName = "Result", Label = "执行错误" }; executeSqlTable.Columns.Add(column); ExecuteSqlRowColumn executeSqlRowColumn = new ExecuteSqlRowColumn() { ColumnId = column.ID, Value = ("执行语法错误:" + ex.Message) }; ExecuteSqlRow row = new ExecuteSqlRow(); row.Datas.Add(executeSqlRowColumn); executeSqlTable.Rows.Add(row); executeSqlResult.Tables.Add(executeSqlTable); } } public void GetEntitisSql(DataBaseType dataBaseType, Guid orgId, List result, string dstOrgId, int sqlType) where T : MesEntityBase, new() { var filiterThisDep = new BaseFilter(orgId, FilterOrgTypeEnum.仅本组织); filiterThisDep.IgnoreDataRule = true; var list = this.GetEntities(null, filiterThisDep).ToList(); if (list != null && list.Any()) { foreach (var item in list) this.DoGetSqlByEntity(dataBaseType, item, result, dstOrgId, sqlType); } } public PFModuleTypeEnum GetModelTypeByName(string tableName) { var newName = tableName.ToLower(); var newNameAry = newName.Split(new char[] { '_' }); string moduleName = string.Empty; if (newNameAry.Any() && newNameAry.Length >= 2) moduleName = newNameAry[1].ToUpper(); if (string.IsNullOrEmpty(moduleName)) return PFModuleTypeEnum.平台管理; foreach (var item in Enum.GetValues(typeof(PFModuleTypeEnum))) { var attrs = item.GetType().GetField(item.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), true); if (attrs != null && attrs.Length > 0) { DescriptionAttribute descAttr = attrs[0] as DescriptionAttribute; if (string.Compare(descAttr.Description, moduleName, true) == 0) return (PFModuleTypeEnum)item; } } return PFModuleTypeEnum.平台管理; } } }