/****************************** * 说明:基础审批模块(与单据模块合为AuditPanelEx面板) * 创建人:龚宇超 * 创建日期:2017-12-02 * 修改人: * 修改日期: * 修改备注: * 版本:1.0.0.1 ******************************/ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Lskj.Model; using Lskj.Control.Model; using Lskj.Util; using Lskj.Data; using Lskj.Business.Impl; using DevExpress.XtraTab; using Lskj.Control; using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraEditors; using Lskj.Business; using Lskj.Core; using System.Diagnostics; using System.Text.RegularExpressions; using DevExpress.Utils; using System.Collections; using System.Threading.Tasks; namespace Lskj.BaseAccraditation { public partial class FrmMain : BaseForm { #region 公共变量 /// /// 基础档案审批配置对象 /// public BaseAccraditationModel BaseAuditModelObj; /// /// 审批公共model /// public BaseAuditCommonModel BaseComModelObj; /// /// 系统模块配置 /// public DynamicBaseAccraditionModel SysModel; #endregion public FrmMain() { InitializeComponent(); } #region 窗体加载时 /// /// 说明:窗体加载时 /// 创建人:龚宇超 /// 创建日期:2017-11-30 /// 修改人: /// 修改日期:2018-04-19 /// 修改备注:1. 取消模块权限验证,点击菜单时候已验证.右键菜单无需验证 /// 版本:1.1 /// /// The instance containing the event data. protected override void OnLoad(EventArgs e) { WaitForm.ShowForm(); this.Text = SysModel.FormText; this.auditPanelObj.Visible = false; try { //SysModel.Privilege = SysModel.ModuleId > 0 ? BaseImpl.GetUserPurviewsByMenuId(SysModel.ModuleId + "") + "" : BaseImpl.GetUserPurviewsByMenuCode(SysModel.ModuleCode) + ""; //if (!this.SysModel.HasPrivilege()) //{ // MessageUtil.Show(ResourceKeys.UnPurview); // this.Close(); //} //else //{ Dictionary dataCaches = SysModel != null ? SysModel.DataCaches : null; if (!dataCaches.GetValue(this, "AccraditationModelRow", out DataRow modelRow)) { modelRow = MainImpl.GetSystemdllTab(this.SysModel.ModuleCode);//获取单个模块信息 } if (modelRow == null) { MessageUtil.Show("模块编号[" + this.SysModel.ModuleCode + "],配置错误!\r\n该模块信息未找到!"); return; } if (!dataCaches.GetValue(this, "BaseAccraditationModel", out this.BaseAuditModelObj)) { this.BaseAuditModelObj = new BaseAccraditationModel(modelRow); } //处理终审反退中的角色 if (!dataCaches.GetValue(this, "GetAllPersonnel", out string personnel)) { personnel = this.BaseAuditModelObj.OverBackOper; personnel = PowerImpl.getAllPersonnel(personnel); } this.BaseAuditModelObj.OverBackOper = personnel; if (!dataCaches.GetValue(this, "KeyField", out string KeyField)) { KeyField = BaseImpl.GetBasePrimaryKey(this.SysModel.ModuleCode); } this.BaseAuditModelObj.KeyField = KeyField; if (string.IsNullOrEmpty(this.BaseAuditModelObj.KeyField)) { MessageUtil.Show(ResourceKeys.NotPrimaryKey); return; } if (!dataCaches.GetValue(this, "MenuConfigTab", out DataRow menuCondRow)) { menuCondRow = BaseImpl.GetMenuConfigTab(Convert.ToInt32(this.SysModel.ModuleId)); } if (menuCondRow != null) this.BaseAuditModelObj.MenuCond = menuCondRow.Table.Columns.Contains("StepCodeCond") ? menuCondRow["StepCodeCond"] + "" : ""; if (!dataCaches.GetValue(this, "ColumnPrefix", out string columnPrefix)) { columnPrefix = BaseImpl.GetColumnPrefix(this.BaseAuditModelObj.BillTable); } this.BaseAuditModelObj.ColumnPrefix = columnPrefix; if (!dataCaches.GetValue(this, "BaseAuditCommonModel", out this.BaseComModelObj)) { this.BaseComModelObj = new BaseAuditCommonModel(); } if (!dataCaches.GetValue(this, "FlowStepCode", out DataRow flowStepCode)) { flowStepCode = BaseAuditImpl.GetFlowStepCode(this.SysModel.ModuleCode); } this.auditPanelObj.SectionAccradit = flowStepCode; if (!dataCaches.GetValue(this, "ParmaryKey", out string parmaryKey)) { parmaryKey = this.BaseAuditModelObj.GetParmaryKey(ModuleType.BaseAudit); } this.auditPanelObj.KeyValue = parmaryKey; this.auditPanelObj.InitializeSetting(BaseComModelObj, SysModel, BaseAuditModelObj); this.auditPanelObj.OnGridViewDoubleCallBack += new EventHandler(GridViewDoubleEvent); this.auditPanelObj.OnGridFinshViewDoubleCallBack += new EventHandler(GridFinshViewDoubleEvent); this.auditPanelObj.OnBtnSearchCallBack += new BtnSearchGridFinishEventHandler(GridFinshSerachEvent); //} } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); LogHelper.Instance.WriteError(ex, ResourceKeys.BaseModuleAudit); } finally { Lskj.Control.Model.AutoSizeChange.ControllInitializeSize(this); WaitForm.HideForm(); this.auditPanelObj.Visible = true; } } public void GetDataCaches(Dictionary cachesDic) { //全局数据 Task dynamicModelTask = cachesDic.AddTask(this, "DynamicModel", new Task(() => { return SysModel;//动态链接库对象 })); Task accraditationModelRowTask = cachesDic.AddTask(this, "AccraditationModelRow", new Task(() => { return MainImpl.GetSystemdllTab(dynamicModelTask.Result.ModuleCode);//获取单个模块信息 })); Task KeyFieldTask = cachesDic.AddTask(this, "KeyField", new Task(() => { string keyField = BaseImpl.GetBasePrimaryKey(dynamicModelTask.Result.ModuleCode); return keyField; })); Task baseAccraditationModelTask = cachesDic.AddTask(this, "BaseAccraditationModel", new Task(() => { BaseAccraditationModel BaseAuditModel = new BaseAccraditationModel(accraditationModelRowTask.Result); BaseAuditModel.KeyField = KeyFieldTask.Result; Task columnPrefixTask = cachesDic.AddTask(this, "ColumnPrefix", new Task(() => { return BaseImpl.GetColumnPrefix(BaseAuditModel.BillTable); })); Task parmaryKeyTask = cachesDic.AddTask(this, "ParmaryKey", new Task(() => { return BaseAuditModel.GetParmaryKey(ModuleType.BaseAudit); })); return BaseAuditModel;//系统模块实体对象 })); Task getAllPersonnelTask = cachesDic.AddTask(this, "GetAllPersonnel", new Task(() => { return PowerImpl.getAllPersonnel(baseAccraditationModelTask.Result.OverBackOper); })); Task menuConfigTabTask = cachesDic.AddTask(this, "MenuConfigTab", new Task(() => { return BaseImpl.GetMenuConfigTab(dynamicModelTask.Result.ModuleId); })); Task BaseAuditCommonModelTask = cachesDic.AddTask(this, "BaseAuditCommonModel", new Task(() => { return new BaseAuditCommonModel(); })); Task flowStepCodeTask = cachesDic.AddTask(this, "FlowStepCode", new Task(() => { return BaseAuditImpl.GetFlowStepCode(dynamicModelTask.Result.ModuleCode); })); //添加数据到mControl cachesDic.AddTask(auditPanelObj, "DynamicModel", dynamicModelTask); cachesDic.AddTask(auditPanelObj, "BaseAuditCommonModel", BaseAuditCommonModelTask); cachesDic.AddTask(auditPanelObj, "BaseAccraditationModel", baseAccraditationModelTask); //获取mControl控件的数据 auditPanelObj.GetDataCaches(cachesDic); } #endregion #region 基础档案搜索 /// /// 搜索数据 /// /// The sender. /// The e. private void GridFinshSerachEvent(object sender, BtnSearchGridFinishArgs e) { try { this.auditPanelObj.FinishGridObj.SetGridViewDataSource(BaseAuditImpl.GetGridFinishData(this.BaseAuditModelObj, e.CancelFlag, e.Cond)); //已完成单据刷新选中状态 DataTable completedTable = this.auditPanelObj.FinishGridObj.gridControl.DataSource as DataTable; if (completedTable != null && !completedTable.Columns.Contains("_check") && BaseAuditModelObj.MuitlAuditFlag) { completedTable.Columns.Add("_check", typeof(bool)); foreach (DataRow row in completedTable.Rows) { row["_check"] = 0; } } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #endregion /// /// 说明:表格双击弹出模块 /// 创建人:龚宇超 /// 创建日期:2017-11-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// private void GridViewDoubleEvent(object sender, EventArgs e) { try { GridView gc = sender as GridView; DataRow dr = gc.GetFocusedDataRow(); if (dr == null) return; AccraditationModel model = gc.Tag as AccraditationModel; //单据审批弹出模块 string[] defaultArgs = string.Format(ModuleArgs.DefaultArgs, this.SysModel.FormText, ERPInfo.Instance.UserId, ERPInfo.Instance.UserName, this.SysModel.Privilege, this.SysModel.ModuleCode).Split('~'); //模块Id/stepcode/点击数据键值/权限 string[] menuArgs = { "", this.SysModel.ModuleCode + "", model.StepCode, dr[this.BaseAuditModelObj.KeyField] + "", "", "0" }; string[] args = defaultArgs.Concat(menuArgs).ToArray(); if (!string.IsNullOrWhiteSpace(this.BaseAuditModelObj.FilePreviewCode)) { ////模块Id/stepcode/点击数据键值/权限 string[] menuArgsNew = { "", this.BaseAuditModelObj.FilePreviewCode + "", model.StepCode, dr[this.BaseAuditModelObj.KeyField] + "" }; string[] str = defaultArgs.Concat(menuArgsNew).ToArray(); IForm form = FormHelper.LoadDllForm("Lskj.PubArtworkPreview.dll", str); if (form == null) { MessageUtil.Show(ResourceKeys.DyncmicDllNotFount); return; } if (form.SubForm == null) { MessageUtil.Show(ResourceKeys.DyncmicDllInitFault); return; } form.SubForm.WindowState = FormWindowState.Maximized; form.SubForm.StartPosition = FormStartPosition.CenterScreen; form.SubForm.Text = "图档审核"; form.SubForm.ShowDialog(); form.SubForm.Dispose(); this.auditPanelObj.RefreshTabPage(); return; } FrmBaseAccraditation frmbaseAccradit = new FrmBaseAccraditation(); frmbaseAccradit.SysModel = new DynamicBaseAccraditionPopModel(args); frmbaseAccradit.SysModel.DataCaches = new Dictionary(); if (SystemInfo.Instance.OptimizationSpeed) frmbaseAccradit.GetDataCaches(frmbaseAccradit.SysModel.DataCaches); frmbaseAccradit.Text = this.Text; if (SystemInfo.Instance.PageOpen) { foreach (XtraTabPage tablepage in ERPInfo.Instance.PageControl.TabPages) { int interceptionLocation = tablepage.Text.Length - frmbaseAccradit.SysModel.PrimaryValue.Length - 1; if (interceptionLocation > 0 && tablepage.Text.Length > frmbaseAccradit.SysModel.PrimaryValue.Length) { string documentNo = tablepage.Text.Substring(tablepage.Text.Length - frmbaseAccradit.SysModel.PrimaryValue.Length); if (documentNo.Equals(frmbaseAccradit.SysModel.PrimaryValue)) { MessageUtil.Show("已设置不能打开多个相同模块!"); ERPInfo.Instance.PageControl.SelectedTabPage = tablepage; return; } } } DllModule module = new DllModule { DllName = "", Id = SysModel.ModuleId + "", Name = SysModel.FormText, BeforePage = ERPInfo.Instance.PageControl.SelectedTabPage, ModuleForm = frmbaseAccradit }; frmbaseAccradit.refreshThePage += new FrmBaseAccraditation.RefreshThePage(refreshThePage); string guid = Guid.NewGuid().ToString(); XtraTabPage tp = new XtraTabPage(); tp.Tag = guid; // 这个必须有不然会提示:"不能向tabControl中添加顶级控件" frmbaseAccradit.TopLevel = false; frmbaseAccradit.Location = new Point(0, 0); frmbaseAccradit.Dock = DockStyle.Fill; frmbaseAccradit.FormBorderStyle = FormBorderStyle.None; tp.Text = frmbaseAccradit.SysModel.FormText + "-" + frmbaseAccradit.SysModel.PrimaryValue; tp.AutoScroll = true; tp.Controls.Add(frmbaseAccradit); tp.ShowCloseButton = DefaultBoolean.True; tp.Dock = DockStyle.Fill; ERPInfo.Instance.PageControl.TabPages.Add(tp); ERPInfo.Instance.PageControl.SelectedTabPage = tp; frmbaseAccradit.Opacity = 0; frmbaseAccradit.SetFormSize(); frmbaseAccradit.Show(); ERPInfo.Instance.ModuleForms.Add(guid, module); } else { frmbaseAccradit.Opacity = 0; frmbaseAccradit.SetFormSize(); DialogResult drr = frmbaseAccradit.ShowDialog(); this.auditPanelObj.RefreshTabPage(); frmbaseAccradit.Dispose(); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); LogHelper.Instance.WriteError(ex, ResourceKeys.BaseModuleAudit); } } /// /// 说明:已完成表格双击弹出模块 /// 创建人:龚宇超 /// 创建日期:2017-11-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. private void GridFinshViewDoubleEvent(object sender, EventArgs e) { try { GridView gc = sender as GridView; DataRow dr = gc.GetFocusedDataRow(); if (dr == null) return; //单据审批弹出模块加载 string tmpFiled = !this.auditPanelObj.PanelCondVisible ? this.BaseAuditModelObj.KeyField : this.BaseAuditModelObj.DefaultParmaryField; string tmpStepField = !this.auditPanelObj.PanelCondVisible ? this.BaseAuditModelObj.TmpStepField : this.BaseAuditModelObj.DefaultStepField; //双击时候为了代码简捷也通过动态链接参数初始化 string[] defaultArgs = string.Format(ModuleArgs.DefaultArgs, this.SysModel.FormText, ERPInfo.Instance.UserId, ERPInfo.Instance.UserName, this.SysModel.Privilege, this.SysModel.ModuleCode).Split('~'); //模块Id/stepcode/点击数据键值/权限 string[] menuArgs = { "", this.SysModel.ModuleCode + "", dr[tmpStepField] + "", dr[tmpFiled] + "", "", "1" }; string[] args = defaultArgs.Concat(menuArgs).ToArray(); if (!string.IsNullOrWhiteSpace(this.BaseAuditModelObj.FilePreviewCode)) { ////模块Id/stepcode/点击数据键值/权限 string[] menuArgsNew = { "", this.BaseAuditModelObj.FilePreviewCode + "", "", dr[tmpFiled] + "", "1" }; string[] str = defaultArgs.Concat(menuArgsNew).ToArray(); IForm form = FormHelper.LoadDllForm("Lskj.PubArtworkPreview.dll", str); if (form == null) { MessageUtil.Show(ResourceKeys.DyncmicDllNotFount); return; } if (form.SubForm == null) { MessageUtil.Show(ResourceKeys.DyncmicDllInitFault); return; } form.SubForm.WindowState = FormWindowState.Maximized; form.SubForm.StartPosition = FormStartPosition.CenterScreen; form.SubForm.Text = "图档审核"; form.SubForm.ShowDialog(); form.SubForm.Dispose(); this.auditPanelObj.RefreshTabPage(); return; } FrmBaseAccraditation frmbaseAccradit = new FrmBaseAccraditation(); frmbaseAccradit.SysModel = new DynamicBaseAccraditionPopModel(args); frmbaseAccradit.SysModel.DataCaches = new Dictionary(); if (SystemInfo.Instance.OptimizationSpeed) frmbaseAccradit.GetDataCaches(frmbaseAccradit.SysModel.DataCaches); frmbaseAccradit.Text = this.Text; if (SystemInfo.Instance.PageOpen) { foreach (XtraTabPage tablepage in ERPInfo.Instance.PageControl.TabPages) { int interceptionLocation = tablepage.Text.Length - frmbaseAccradit.SysModel.PrimaryValue.Length - 1; if (interceptionLocation > 0 && tablepage.Text.Length > frmbaseAccradit.SysModel.PrimaryValue.Length) { string documentNo = tablepage.Text.Substring(tablepage.Text.Length - frmbaseAccradit.SysModel.PrimaryValue.Length); if (documentNo.Equals(frmbaseAccradit.SysModel.PrimaryValue)) { MessageUtil.Show("已设置不能打开多个相同模块!"); ERPInfo.Instance.PageControl.SelectedTabPage = tablepage; return; } } } DllModule module = new DllModule { DllName = "", Id = SysModel.ModuleId + "", Name = SysModel.FormText, BeforePage = ERPInfo.Instance.PageControl.SelectedTabPage, ModuleForm = frmbaseAccradit }; frmbaseAccradit.refreshThePage += new FrmBaseAccraditation.RefreshThePage(refreshThePage); string guid = Guid.NewGuid().ToString(); XtraTabPage tp = new XtraTabPage(); tp.Tag = guid; // 这个必须有不然会提示:"不能向tabControl中添加顶级控件" frmbaseAccradit.TopLevel = false; frmbaseAccradit.Location = new Point(0, 0); frmbaseAccradit.Dock = DockStyle.Fill; frmbaseAccradit.FormBorderStyle = FormBorderStyle.None; tp.Text = frmbaseAccradit.SysModel.FormText + "-" + frmbaseAccradit.SysModel.PrimaryValue; tp.AutoScroll = true; tp.AutoScroll = true; tp.Controls.Add(frmbaseAccradit); tp.ShowCloseButton = DefaultBoolean.True; tp.Dock = DockStyle.Fill; ERPInfo.Instance.PageControl.TabPages.Add(tp); ERPInfo.Instance.PageControl.SelectedTabPage = tp; frmbaseAccradit.Opacity = 0; frmbaseAccradit.SetFormSize(); frmbaseAccradit.Show(); ERPInfo.Instance.ModuleForms.Add(guid, module); } else { frmbaseAccradit.Opacity = 0; frmbaseAccradit.SetFormSize(); DialogResult drr = frmbaseAccradit.ShowDialog(); frmbaseAccradit.Dispose(); this.auditPanelObj.RefreshTabPage(); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:page打开审核界面完成操作后刷新当前界面 /// 创建人:曹屹峰 /// 创建日期:2021-11-23 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public void refreshThePage(string promptInformation, string id) { this.auditPanelObj.RefreshTabPage(); if (!string.IsNullOrWhiteSpace(promptInformation)) MessageUtil.Show(promptInformation); //上一次点开page XtraTabPage beforePage = ERPInfo.Instance.ModuleForms[id].BeforePage; //要删除的page XtraTabPage removePage = new XtraTabPage(); ERPInfo.Instance.ModuleForms.Remove(id); foreach (XtraTabPage tablepage in ERPInfo.Instance.PageControl.TabPages) { if (tablepage.Tag == null) continue; if (tablepage.Tag.ToString().Equals(id)) removePage = tablepage; if (tablepage == beforePage) ERPInfo.Instance.PageControl.SelectedTabPage = beforePage; } ERPInfo.Instance.PageControl.TabPages.Remove(removePage); } } }