2025-03-28 09:49:56 +08:00

300 lines
12 KiB
C#

using System;
using System.Data;
using System.Windows.Forms;
using SuperMap.RealEstate.FrameWork.Business;
using SuperMap.RealEstate.Windows.Forms;
using SuperMap.RealEstate.Utility;
using SuperMap.RealEstate.Launcher_WinForm;
namespace SuperMap.RealEstate.SecurityDevice.Manager
{
public partial class frmMain : FormModule
{
public frmMain(string ModuleGuid, string UserName = "", string Password = "")
: base(ModuleGuid, UserName, Password)
{
InitializeComponent();
_ISecurityDevice.MessageChanged += new ClientSecurityDeviceMessageHandler(SecurityDeviceControl1_MessageChanged);
}
public frmMain(string ModuleGuid, string[] args)
: base(ModuleGuid, args)
{
InitializeComponent();
_ISecurityDevice.MessageChanged += new ClientSecurityDeviceMessageHandler(SecurityDeviceControl1_MessageChanged);
}
bool MultiLine_Enanled = false;
string MultiLine_Url = string.Empty;
IClientSecurityDevice _ISecurityDevice = new UsbKeyLicenseDevice();
private void ButtonReset_Click(object sender, EventArgs e)
{
if (MessageBox.Show("您确认将数字证书恢复到出厂设置?", "提示", MessageBoxButtons.OKCancel,
MessageBoxIcon.Information) == System.Windows.Forms.DialogResult.Cancel)
{
return;
}
richTextBox1.Clear();
if (_ISecurityDevice.Open())
{
_ISecurityDevice.Reset();
_ISecurityDevice.Close();
}
}
private void frmMain_Load(object sender, EventArgs e)
{
LauncherHelper.SetMessageValue("加载 用户...");
BuildUserTreeView();
SecurityDeviceControl1.Device_Connect();
LauncherHelper.Close(1);
}
private void BuildUserTreeNode(string pid,TreeNodeCollection nodes, DataTable type, DataTable user)
{
DataRow[] _TypeDataRowCollection = type.Select("UserType_PID='" + pid + "'");
DataRow[] _UserDataRowCollection;
TreeNode _TypeNode, _UserNode;
foreach (DataRow _TypeDataRow in _TypeDataRowCollection)
{
_TypeNode = new TreeNode();
_TypeNode.Text = _TypeDataRow["UserType_Name"].ToString();
_TypeNode.ImageIndex = 0;
_TypeNode.SelectedImageIndex = 0;
nodes.Add(_TypeNode);
_UserDataRowCollection = user.Select("UserType_ID='" + _TypeDataRow["UserType_ID"].ToString() + "'");
foreach (DataRow _UserDataRow in _UserDataRowCollection)
{
_UserNode = new TreeNode();
_UserNode.Text = _UserDataRow["User_Name"].ToString();
_UserNode.Tag = _UserDataRow["User_ID"].ToString();
_UserNode.ToolTipText = _UserDataRow["User_Passport"].ToString();
_UserNode.ImageIndex = 1;
_UserNode.SelectedImageIndex = 1;
_TypeNode.Nodes.Add(_UserNode);
}
BuildUserTreeNode(_TypeDataRow["UserType_ID"].ToString(), _TypeNode.Nodes, type, user);
}
}
private void BuildUserTreeView()
{
UserType _UserType = new UserType();
DataTable _UserTypeDataTable = _UserType.ExecuteDataTable("select UserType_PID,UserType_ID,UserType_Name from T_UserType order by UserType_PID,UserType_Index,UserType_ID");
DataTable _UserDataTable = _UserType.ExecuteDataTable("select UserType_ID,User_ID,User_Name,User_Passport from T_User order by UserType_ID,User_Index,User_ID");
treeView1.Nodes.Clear();
BuildUserTreeNode("-1", treeView1.Nodes, _UserTypeDataTable, _UserDataTable);
treeView1.ExpandAll();
}
private string _SecurityDeviceWritePassWord = "SuperMap.RealEstate.SecurityDevices";
private void ButtonWrite_Click(object sender, EventArgs e)
{
if (MessageBox.Show("您确认将信息写入数字证书?", "提示", MessageBoxButtons.OKCancel,
MessageBoxIcon.Information) == System.Windows.Forms.DialogResult.Cancel)
{
return;
}
richTextBox1.Clear();
if (_ISecurityDevice.Open())
{
_ISecurityDevice.Reset();
ClientSecurityDeviceObject _SecurityDeviceObject = GetSecurityDeviceObject();
_ISecurityDevice.Write(_SecurityDeviceObject, _SecurityDeviceWritePassWord);
_ISecurityDevice.Close();
SecurityDeviceControl1.SetValue(_SecurityDeviceObject);
}
}
private void ButtonClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void SetSecurityDeviceObject(ClientSecurityDeviceObject value)
{
textBoxName.Text = (value == null) ? "" : value.Name;
textBoxUser.Text = (value == null) ? "" : value.User;
textBoxKey.Text = (value == null) ? "" : value.Key;
textBoxDate.Text = (value == null) ? "" : value.Date;
textBoxUrl.Text = (value == null) ? "" : value.Url;
}
private ClientSecurityDeviceObject GetSecurityDeviceObject()
{
ClientSecurityDeviceObject _SecurityDeviceInfo = new ClientSecurityDeviceObject();
_SecurityDeviceInfo.Name = textBoxName.Text;
_SecurityDeviceInfo.User = textBoxUser.Text;
//_SecurityDeviceInfo.Key = textBoxKey.Text;
_SecurityDeviceInfo.Key = textBoxKey.Text.ToEncrypt();
_SecurityDeviceInfo.Date = textBoxDate.Text;
_SecurityDeviceInfo.Url = textBoxUrl.Text;
return _SecurityDeviceInfo;
}
private bool FindUser(string userPassport, TreeNodeCollection nodes)
{
foreach (TreeNode _Node in nodes)
{
if (_Node.ImageIndex == 0)
{
if (FindUser(userPassport, _Node.Nodes))
return true;
else
continue;
}
else if (_Node.ImageIndex == 1)
{
if (_Node.ToolTipText == userPassport)
{
treeView1.SelectedNode = _Node;
return true;
}
}
}
return false;
}
private void SecurityDeviceControl1_DeviceChanged(object sender, ClientSecurityDeviceEventArgs e)
{
if (e.DeviceEnum == ClientSecurityDeviceState.Insert)
{
SetUI(true);
if (MultiLine_Enanled)
{
}
else
{
if (FindUser(e.KeyInfo.User, treeView1.Nodes))
{
textBoxUrl.Text = e.KeyInfo.Url;
}
else
{
SetSecurityDeviceObject(null);
ClientSecurityDeviceMessageEventArgs _ClientSecurityDeviceMessageEventArgs = new ClientSecurityDeviceMessageEventArgs();
_ClientSecurityDeviceMessageEventArgs.Message = "无法通过数字证书定位到用户。";
SecurityDeviceControl1_MessageChanged(SecurityDeviceControl1, _ClientSecurityDeviceMessageEventArgs);
}
}
}
else
{
SetUI(false);
if (MultiLine_Enanled)
{
//_SecurityDeviceInfo = null;
}
}
}
private void SetUI(bool isFind)
{
ButtonReset.Enabled = isFind;
buttonWrite.Enabled = isFind;
}
private void buttonWriteX_Click(object sender, EventArgs e)
{
MultiLine_Enanled = false;
ClientSecurityDeviceObject _SecurityDeviceObject =GetSecurityDeviceObject();
MultiLine_Url = _SecurityDeviceObject.Url;
if (String.IsNullOrEmpty(MultiLine_Url))
{
if (MessageBox.Show("系统网址为空,插入数字证书将不自动弹出浏览器。", "警告",
MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Cancel)
{
return;
}
}
//检查勾选的用户集合
MessageBox.Show("结合框架定义用户再考虑。", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
MultiLine_Enanled = true;
}
private void SecurityDeviceControl1_MessageChanged(object sender, ClientSecurityDeviceMessageEventArgs e)
{
if (richTextBox1.Lines.Length > 0)
richTextBox1.AppendText("\r\n");
richTextBox1.AppendText("【" + DateTime.Now.ToLongTimeString() + "】" + e.Message);
richTextBox1.ScrollToCaret();
Application.DoEvents();
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
using (User _User = new User())
{
TreeNodeSelected(e.Node, _User);
}
}
private bool TreeNodeSelected(TreeNode node, User user)
{
if (node.ImageIndex == 0)
return false;
bool _result = false;
if (user.Select(int.Parse(node.Tag.ToString())))
{
//尚未启动数字证书
if (user.User_EnabledLicense.Value == 0)
{
if (ShowQuestion("用户" + user.User_Name + "未启用数字证书,是否立即启用?",
MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
{
user.User_EnabledLicense = 1;
if (user.User_Indefinit.Value == 1)
{
user.User_Expiry = DateTime.MaxValue;
}
else
{
//授权时间
if ((!user.User_Expiry.HasValue) || (user.User_Expiry.Value < DateTime.Now.Date))
{
if (ShowQuestion("用户" + user.User_Name + "授权时间已到,是否为其授权一年?",
MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
{
user.User_Expiry = DateTime.Now.Date.AddYears(1);
}
else
{
user.User_Expiry = DateTime.Parse(SecurityDeviceControl1.User_Expiry);
}
}
}
if (string.IsNullOrEmpty(user.User_License))
user.User_License = Guid.NewGuid().ToString().Replace("-", "");
_result = user.Update();
}
}
//已启动数字证书但key为空
else if (user.User_EnabledLicense.Value == 1 && string.IsNullOrEmpty(user.User_License))
{
ShowQuestion("用户" + user.User_Name + "数字证书秘钥为空,请重新写入加密狗!",
MessageBoxButtons.OK);
user.User_License = Guid.NewGuid().ToString().Replace("-", "");
_result = user.Update();
}
textBoxName.Text = user.User_Name;
textBoxUser.Text = user.User_Passport;
textBoxKey.Text = user.User_License;
//用户类型
if (user.User_Indefinit.Value == 1)
textBoxDate.Text = DateTime.MaxValue.ToShortDateString().Replace("/", "-");
else
textBoxDate.Text = user.User_Expiry.Value.ToShortDateString().Replace("/", "-");
}
else
ShowQuestion("无法找到对应的用户信息!", MessageBoxButtons.OK);
return _result;
}
}
}