267 lines
11 KiB
C#
267 lines
11 KiB
C#
/******************************
|
|
* 说明:基础档案带明细模版
|
|
* 创建人:龚宇超
|
|
* 创建日期:2017-11-21
|
|
* 修改人:
|
|
* 修改日期:
|
|
* 修改备注:
|
|
* 版本:1.0.0.0
|
|
******************************/
|
|
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;
|
|
using Lskj.Control.Model;
|
|
using Lskj.Business.Impl;
|
|
using Lskj.Data;
|
|
using Lskj.Util;
|
|
using System.Diagnostics;
|
|
using Lskj.Business;
|
|
using Lskj.Main.Model;
|
|
using System.Collections;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Lskj.PubModuleDetail
|
|
{
|
|
/// <summary>
|
|
/// 基础档案带明细模版
|
|
/// </summary>
|
|
public partial class FrmMain : BaseForm
|
|
{
|
|
public DynamicModuleDetailModel Model; // 动态链接库对象
|
|
|
|
public FrmMain()
|
|
{
|
|
InitializeComponent();
|
|
this.Disposed += OnFrmMainDisposed;
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>说明:窗口初始化</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2017-11-21 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
|
protected override void OnLoad(EventArgs e)
|
|
{
|
|
WaitForm.ShowForm();
|
|
try
|
|
{
|
|
Dictionary<object, Hashtable> dataCaches = Model != null ? Model.DataCaches : null;
|
|
if (!dataCaches.GetValue(this, "Privilege", out string privilege))
|
|
{
|
|
privilege = Model.Privilege.Equals("3") ? "1" : Model.ModuleId > 0 ? BaseImpl.GetUserPurviewsByMenuId(Model.ModuleId + "") + "" : BaseImpl.GetUserPurviewsByMenuCode(Model.ModuleCode) + "";// 权限(1.有操作权限.0.无权限.2.只读权限.3.右键配置权限全部开放)
|
|
}
|
|
this.Model.Privilege = privilege;
|
|
this.mControl.LeftCond = Model.LeftCond;//用户控件的左侧条件=动态链接库对象左侧树结构
|
|
//ModuleConditionsPanelEx mcpex = new ModuleConditionsPanelEx();
|
|
//mcpex.InitializeControl(new ModuleModel(MainImpl.GetSystemdllTab(this.Model.ModuleCode)), Model);
|
|
if (!dataCaches.GetValue(this, "Details", out List<GridDetailModel> details))
|
|
{
|
|
details = GetDetails();
|
|
}
|
|
this.mControl.Details = details;//拿到底部表格数据
|
|
this.mControl.InitControls(Model);//创建界面
|
|
|
|
this.FormClosing += new FormClosingEventHandler(OnClose);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.Instance.WriteError(ex, ResourceKeys.BaseModule);
|
|
//MessageUtil.Show(ex.Message + "\r\n" + ex.StackTrace);
|
|
string Message = ErrorMessage.PromptErrorMessage(ex);
|
|
MessageUtil.Show(Message, ex.Message);
|
|
}
|
|
finally
|
|
{
|
|
Lskj.Control.Model.AutoSizeChange.ControllInitializeSize(this);
|
|
// 加载完统一显示控件
|
|
this.mControl.Visible = true;
|
|
}
|
|
WaitForm.HideForm();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取数据源缓存
|
|
/// </summary>
|
|
/// <param name="cachesDic"></param>
|
|
public void GetDataCaches(Dictionary<object, Hashtable> cachesDic)
|
|
{
|
|
//全局数据
|
|
Task<DynamicModel> dynamicModelTask = cachesDic.AddTask(this, "DynamicModel", new Task<DynamicModel>(() =>
|
|
{
|
|
return Model;//动态链接库对象
|
|
}));
|
|
Task<DataRow> systemDllRowTask = cachesDic.AddTask(this, "SystemDllRow", new Task<DataRow>(() =>
|
|
{
|
|
return MainImpl.GetSystemdllTab(Model.ModuleCode);//获取单个模块信息
|
|
}));
|
|
Task<ModuleModel> sysModelTask = cachesDic.AddTask(this, "SysModel", new Task<ModuleModel>(() =>
|
|
{
|
|
ModuleModel sysModel = new ModuleModel(systemDllRowTask.Result);
|
|
return sysModel;//系统模块实体对象
|
|
}));
|
|
Task<List<GridDetailModel>> detailTask = cachesDic.AddTask(this, "Details", new Task<List<GridDetailModel>>(() =>
|
|
{
|
|
DataTable detailPages = BaseModuleImpl.GetBaseDetailPages(Model.ModuleCode);//根据传入的模块编号获得基础档案底部标签的数据
|
|
List<GridDetailModel> details = new List<GridDetailModel>();//表格明细对象的集合
|
|
foreach (DataRow item in detailPages.Rows)
|
|
{
|
|
GridDetailModel gridDetailModel = new GridDetailModel(item, null, GridCustomColumnStruct.BaseDetailGridView);
|
|
details.Add(gridDetailModel);
|
|
Task<DataTable> addGridColumnsTask = cachesDic.AddTask(gridDetailModel, "GridColumns", new Task<DataTable>(() =>
|
|
{
|
|
DataTable gridColumns = ReportImpl.GetReportDetailColumns(Model.ModuleCode, item["id"] + "");//获取报表明细列
|
|
gridDetailModel.GridColumns = gridColumns;
|
|
return gridColumns;
|
|
}));
|
|
}
|
|
return details;
|
|
}));
|
|
Task<int> formTypeTask = cachesDic.AddTask(this, "FormType", new Task<int>(() =>
|
|
{
|
|
return BaseImpl.GetBaseType(Model.ModuleCode);
|
|
}));
|
|
Task<string> privilegeTask = cachesDic.AddTask(this, "Privilege", new Task<string>(() =>
|
|
{
|
|
return Model.Privilege.Equals("3") ? "1" : Model.ModuleId > 0 ? BaseImpl.GetUserPurviewsByMenuId(Model.ModuleId + "") + "" : BaseImpl.GetUserPurviewsByMenuCode(Model.ModuleCode) + "";// 权限(1.有操作权限.0.无权限.2.只读权限.3.右键配置权限全部开放)
|
|
}));
|
|
//添加数据到mControl
|
|
cachesDic.AddTask(mControl, "DynamicModel", dynamicModelTask);
|
|
cachesDic.AddTask(mControl, "SystemDllRow", systemDllRowTask);
|
|
cachesDic.AddTask(mControl, "SysModel", sysModelTask);
|
|
cachesDic.AddTask(mControl, "Details", detailTask);
|
|
//获取mControl控件的数据
|
|
mControl.GetDataCaches(cachesDic);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 关闭模块时发生
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void OnClose(object sender, FormClosingEventArgs e)
|
|
{
|
|
this.mControl.CloseModule();
|
|
string guid = this.Tag + "";
|
|
if (string.IsNullOrWhiteSpace(guid)) return;
|
|
DllModule m = Manager.ModuleForms[guid];
|
|
m.IsClose = true;
|
|
if (SystemInfo.Instance.EfficientVerification)
|
|
{
|
|
bool SaveResults = this.mControl.ModuleGridDetailObj.VerificationInterface();
|
|
if (!SaveResults)
|
|
{
|
|
DialogResult result = MessageUtil.Show(("数据未保存,是否确定关闭?"), MessageBoxButtons.YesNo);
|
|
if (result == DialogResult.Yes)
|
|
{
|
|
m.IsClose = true;
|
|
e.Cancel = false;
|
|
}
|
|
else
|
|
{
|
|
m.IsClose = false;
|
|
e.Cancel = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>说明:拿到底部表格数据</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2017-11-21 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <returns>List<GridDetailModel>.</returns>
|
|
private List<GridDetailModel> GetDetails()
|
|
{
|
|
List<GridDetailModel> details = new List<GridDetailModel>();//表格明细对象的集合
|
|
DataTable table = BaseModuleImpl.GetBaseDetailPages(Model.ModuleCode);// 根据传入的模块编号获得基础档案底部标签的数据
|
|
foreach (DataRow item in table.Rows)
|
|
{
|
|
DataTable gridColumns = ReportImpl.GetReportDetailColumns(Model.ModuleCode, item["id"] + "");//获取报表明细列
|
|
details.Add(new GridDetailModel(item, gridColumns, GridCustomColumnStruct.BaseDetailGridView));
|
|
}
|
|
return details;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 注销时
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void OnFrmMainDisposed(object sender, EventArgs e)
|
|
{
|
|
this.FormClosing -= OnClose;
|
|
this.Disposed -= OnFrmMainDisposed;
|
|
|
|
Dictionary<object, Hashtable> dataCaches =
|
|
Model != null ? Model.DataCaches : null;
|
|
if (dataCaches == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
DisposeCompletedCacheTasks(dataCaches);
|
|
dataCaches.Clear();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 释放模块预加载缓存中已完成任务的等待句柄。
|
|
/// Task.Result 在等待时可能创建底层等待对象,仅清空字典
|
|
/// 不会立即释放这些句柄。
|
|
/// </summary>
|
|
private static void DisposeCompletedCacheTasks(
|
|
Dictionary<object, Hashtable> dataCaches)
|
|
{
|
|
HashSet<Task> tasks = new HashSet<Task>();
|
|
foreach (Hashtable cache in dataCaches.Values)
|
|
{
|
|
if (cache == null)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
foreach (object value in cache.Values)
|
|
{
|
|
Task task = value as Task;
|
|
if (task != null)
|
|
{
|
|
tasks.Add(task);
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach (Task task in tasks)
|
|
{
|
|
if (!task.IsCompleted)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
try
|
|
{
|
|
task.Dispose();
|
|
}
|
|
catch (ObjectDisposedException)
|
|
{
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|