Files
lserp_cs_6.0/插件库/Lskj.BaseAccraditation/FrmMain.cs
T
2026-07-02 10:11:39 +00:00

534 lines
25 KiB
C#

/******************************
* 说明:基础审批模块(与单据模块合为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 公共变量
/// <summary>
/// 基础档案审批配置对象
/// </summary>
public BaseAccraditationModel BaseAuditModelObj;
/// <summary>
/// 审批公共model
/// </summary>
public BaseAuditCommonModel BaseComModelObj;
/// <summary>
/// 系统模块配置
/// </summary>
public DynamicBaseAccraditionModel SysModel;
#endregion
public FrmMain()
{
InitializeComponent();
}
#region 窗体加载时
/// <summary>
/// <para>说明:窗体加载时</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2017-11-30 </para>
/// <para>修改人:</para>
/// <para>修改日期:2018-04-19</para>
/// <para>修改备注:1. 取消模块权限验证,点击菜单时候已验证.右键菜单无需验证</para>
/// <para>版本:1.1</para>
/// </summary>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
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<object, Hashtable> 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<object, Hashtable> cachesDic)
{
//全局数据
Task<DynamicModel> dynamicModelTask = cachesDic.AddTask(this, "DynamicModel", new Task<DynamicModel>(() =>
{
return SysModel;//动态链接库对象
}));
Task<DataRow> accraditationModelRowTask = cachesDic.AddTask(this, "AccraditationModelRow", new Task<DataRow>(() =>
{
return MainImpl.GetSystemdllTab(dynamicModelTask.Result.ModuleCode);//获取单个模块信息
}));
Task<string> KeyFieldTask = cachesDic.AddTask(this, "KeyField", new Task<string>(() =>
{
string keyField = BaseImpl.GetBasePrimaryKey(dynamicModelTask.Result.ModuleCode);
return keyField;
}));
Task<BaseAccraditationModel> baseAccraditationModelTask = cachesDic.AddTask(this, "BaseAccraditationModel", new Task<BaseAccraditationModel>(() =>
{
BaseAccraditationModel BaseAuditModel = new BaseAccraditationModel(accraditationModelRowTask.Result);
BaseAuditModel.KeyField = KeyFieldTask.Result;
Task<string> columnPrefixTask = cachesDic.AddTask(this, "ColumnPrefix", new Task<string>(() =>
{
return BaseImpl.GetColumnPrefix(BaseAuditModel.BillTable);
}));
Task<string> parmaryKeyTask = cachesDic.AddTask(this, "ParmaryKey", new Task<string>(() =>
{
return BaseAuditModel.GetParmaryKey(ModuleType.BaseAudit);
}));
return BaseAuditModel;//系统模块实体对象
}));
Task<string> getAllPersonnelTask = cachesDic.AddTask(this, "GetAllPersonnel", new Task<string>(() =>
{
return PowerImpl.getAllPersonnel(baseAccraditationModelTask.Result.OverBackOper);
}));
Task<DataRow> menuConfigTabTask = cachesDic.AddTask(this, "MenuConfigTab", new Task<DataRow>(() =>
{
return BaseImpl.GetMenuConfigTab(dynamicModelTask.Result.ModuleId);
}));
Task<BaseAuditCommonModel> BaseAuditCommonModelTask = cachesDic.AddTask(this, "BaseAuditCommonModel", new Task<BaseAuditCommonModel>(() =>
{
return new BaseAuditCommonModel();
}));
Task<DataRow> flowStepCodeTask = cachesDic.AddTask(this, "FlowStepCode", new Task<DataRow>(() =>
{
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 基础档案搜索
/// <summary>
/// 搜索数据
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The e.</param>
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
/// <summary>
/// <para>说明:表格双击弹出模块</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2017-11-30 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender"></param>
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<object, Hashtable>();
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);
}
}
/// <summary>
/// <para>说明:已完成表格双击弹出模块</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2017-11-30 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender">The sender.</param>
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<object, Hashtable>();
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);
}
}
/// <summary>
/// <para>说明:page打开审核界面完成操作后刷新当前界面</para>
/// <para>创建人:曹屹峰</para>
/// <para>创建日期:2021-11-23 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
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);
}
}
}