📄 globleutility.cs
字号:
///////////////////////////////////////////////////////////////////////////////
/// 北京交通大学版权所有 2004.07 ///
/// 文件名: GlobleUtitity.cs ///
/// 描述:本文件包含了电子图书馆一卡通系统的公共操作 ///
/// 创建时间: 2004.07.19 ///
///////////////////////////////////////////////////////////////////////////////
using System;
using System.Collections;
using System.Windows.Forms;
using Microsoft.Win32;
using System.Data;
using System.Data.OracleClient;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Timers;
using System.Threading;
using DogOperaLib;
namespace GlobleUtility
{
/// <summary>
/// 声明一个结构,用来赋值给listview的Tag属性。
/// </summary>
public struct lvTagTemp
{
public string temp_id; //保存记录的ID
}
/// <summary>
/// 声明一个结构,用来赋值给treeview的Tag属性。
/// </summary>
public struct trvTagTemp
{
public string temp_id; //节点记录的ID
public int temp_type; //节点的类型 //该值为0代表此节点是最高节点,该值为1代表此节点是部门类型,该值为2代表此节点是班级类型,该值为3代表此节点是专业类型
public int temp_isexpand; //节点未/已展开过 ,未1,已2
}
/// <summary>
/// 声明一个结构,用来赋值给listview的Tag属性。
/// </summary>
public struct admin_lvTagTemp
{
public string temp_systemid; //节点子系统的ID
public string temp_wsid; //节点工作站的ID
public string temp_rightid; //节点权限的ID
}
/// <summary>
/// 声明一个结构,用来赋值给listview的Tag属性。
/// </summary>
public struct HR_lvTagTemp
{
public string temp_fromid; //父ID
public string temp_toid; //子ID
public DateTime temp_fromdate; //起始时间
}
//卡存信息
public struct CardInfo
{
public string UnitSign;//单位标志——存学校代码
public string UserType;//用户类型
public string UserID;//UserID
public string LogicID;//用户逻辑编号(学号、教工号)
public string ValidDate;//有效日期
//public string CertificateID;//图书证号
public long Balance;//卡片余额
public long CardSerialNum;//卡序列号
public int CardNo;//卡号
public string CardType;//卡类别
public string UserName;//姓名
public string FreeTime;//剩余机时
//定义一个构造函数
// public CardInfo()
// {
// UnitSign = "石家庄信息工程职业学院";
// }
}
/// <summary>
/// 卡操作类,定义一些公共卡操作,如:
/// 检查有效期;检查黑名单。
/// </summary>
public class CardOperation
{
/// <summary>
/// 检查有效期
/// </summary>
/// <param name="sValidDate">从卡中读出的有效期字符串</param>
/// <returns>未过期,返回true;已过期,返回false。</returns>
public static bool CheckValidDate(string sValidDate)
{
int year = Convert.ToInt32(sValidDate.Substring(0, 4));
int month = Convert.ToInt32(sValidDate.Substring(4, 2));
int date = Convert.ToInt32(sValidDate.Substring(6, 2));
DateTime dt = new DateTime(year, month, date);
int compareValue = 0;
compareValue = dt.CompareTo(System.DateTime.Today);
if (compareValue < 0)
{
//已过有效期,提示并退出
return false;
}
return true;
}
/// <summary>
/// 检查卡号是否在黑名单(CardM_Black_List)中
/// </summary>
/// <param name="cardNo">卡号</param>
/// <returns>卡号在黑名单中,返回1;不在返回0;异常情况返回-1;</returns>
public static int CheckBlackList(int cardNo)
{
OracleConnection myConn = Connection.DBConnection;
if (myConn == null)
{
return -1;
}
string mySql = "select * from CardM_Black_List where CardID = " + cardNo.ToString();
OracleCommand dbCommand = new OracleCommand(mySql, myConn);
try
{
OracleDataReader dbReader = dbCommand.ExecuteReader();
if (dbReader.Read()) //cardNo在黑名单中
{
dbReader.Close();
return 1;
}
dbReader.Close();
return 0;
}
catch(Exception)
{
return -1;
}
}
}
/// <summary>
/// 类名:Connection
/// 功能:建立与数据库的连接
/// 算法:首先用通用的用户名和密码从数据库中取得一个值(可认为是种子),然后
/// 根据一个算法算出正确的密码,算法与所给的用户名有关。
/// 使用方法:使用构造函数建立实例,然后调用Open函数。
/// </summary>
public class Connection
{
public Connection()
{
bCanExit = false;//非定时器申请退出
//生成对象实例,在open函数时使定时器生效,当退出程序或连接数据库出错时使定时器失效并销毁
//CheckConnectionTimer = new System.Timers.Timer();
//创建事件句柄
//CheckConnectionTimer.Elapsed+=new ElapsedEventHandler(OnTimedCheckConnection);
// 设置间隔时间
//CheckConnectionTimer.Interval=120000;//2分钟
//生成对象实例,在open函数时判断是否为平台系统确定是否使定时器生效,当退出程序时使定时器失效并销毁
CheckDogTimer = new System.Timers.Timer();
//创建事件句柄
CheckDogTimer.Elapsed+=new ElapsedEventHandler(OnTimedCheckDog);
// 设置间隔时间
CheckDogTimer.Interval=10000;
}
[DllImport("libcard.dll")]
public static extern void CloseSocket();
//private static System.Timers.Timer CheckConnectionTimer = null;
private static System.Timers.Timer CheckDogTimer = null;
public static bool bCanExit;
//private static string systemName = "";//登陆各系统用户名
//private static string conString = "";
// 功能:建立数据库连接
// 参数:sUserName 连接数据库所用的用户名
// 返回:整型值,0表示无错误,大于零表示一个错误码
public int Open(String sUserName)
{
Register Reg = new Register();
if(null == Reg)
return ErrorCode.E_1_CreateObjFailed_Code;
if(Reg.DBComputer.Equals("") || Reg.DBSource.Equals(""))
{
//如果未正确设置数据库参数则调出设置数据库参数的UI设置参数
CfrmSetDBInfo frmSetDBInfo = new CfrmSetDBInfo();
frmSetDBInfo.edtDBComputer.Text = Reg.DBComputer;
frmSetDBInfo.edtDBName.Text = Reg.DBSource;
if(frmSetDBInfo.ShowDialog() == DialogResult.OK)
{
Reg.DBComputer = frmSetDBInfo.edtDBComputer.Text.Trim();
Reg.DBSource = frmSetDBInfo.edtDBName.Text.Trim();
}
}
dbConnection = new System.Data.OracleClient.OracleConnection();
if(null == dbConnection)
return ErrorCode.E_1_CreateObjFailed_Code;
String sConn = "data source=" + Reg.DBSource + ";";
String sUserPWD = "password=dummyaipwd;user id=dummyuser;";
String sTempConnStr = ComputeConnStr(sConn, sUserPWD, sUserName);
if(sTempConnStr == "")
return ErrorCode.E_2_CreateConnectStringFailed_Code;
if(dbConnection.State != ConnectionState.Closed)
dbConnection.Close();
//conString = sTempConnStr;
dbConnection.ConnectionString = sTempConnStr;
try
{
dbConnection.Open();
}
catch
{
return ErrorCode.E_3_ConnectDBFailed_Code;
}
// 运行到此说明连接已被打开,所以启动定时器
//CheckConnectionTimer.Enabled=true;
// 运行到此说明连接已被打开,如果是平台系统则开始检查加密狗定时器
if(sUserName.ToUpper() == "PLATF")
{
CheckDogTimer.Enabled = true;
}
//systemName = sUserName.Trim();
return 0;
}
// 检查连接定时器代码
//private static void OnTimedCheckConnection(object source, ElapsedEventArgs e)
//{
// System.Data.OracleClient.OracleCommand ocmd = new OracleCommand("SELECT SYSDATE FROM DUAL",dbConnection);
// try
// {
// ocmd.ExecuteNonQuery();
// }
// catch(Exception)
// {
// try
// {
// System.Data.OracleClient.OracleConnection oc = new OracleConnection(conString);
// //oc.InitializeLifetimeService()
// oc.Open();
// dbConnection.Close();
// dbConnection.Dispose();
// dbConnection = oc;
// ocmd.Dispose();
// ocmd = new OracleCommand("SELECT SYSDATE FROM DUAL",dbConnection);
// ocmd.ExecuteNonQuery();
// }
// catch(Exception)
// {
// if(systemName.ToUpper() != "CYBER")
// {
// CheckConnectionTimer.Enabled = false;
// CheckConnectionTimer.Dispose();
// MessageBox.Show("对不起,很抱歉出现次对话框\r\n由于你尚未操作数据库的时间太长\r\n处于安全考虑与中心数据库的连接已关闭\r\n请您重新登陆系统!","系统信息",MessageBoxButtons.OK,MessageBoxIcon.Warning);
// bCanExit = true;
// try
// {
// CloseSocket();
// }
// catch
// {}
// Application.Exit();
// }
// }
// }
// bCanExit = false;
// GC.Collect();
//}
// 检查加密狗定时器代码
private static void OnTimedCheckDog(object source, ElapsedEventArgs e)
{
//重新计算下次检测加密狗时间长度
CheckDogTimer.Enabled = false;
Random rd = new Random();
int interval = 0;
//600000位十分钟,大于五分钟检测
while((interval = rd.Next(1200000)) < 150000);
CheckDogTimer.Interval = interval;
CheckDogTimer.Enabled = true;
ushort DogCascade = 0;
uint DogPassword = 0;
uint iRet = 0;
ushort DogBytes = 195;
ushort DogAddr = 0;
byte []DogData = new byte[195];
//
// Windows 窗体设计器支持所必需的
//
System.Timers.Timer ForseOutTimer = new System.Timers.Timer();
ForseOutTimer.Elapsed+=new ElapsedEventHandler(ForseOutTimer_Elapsed);
ForseOutTimer.Interval = 10000;
//检查和操作加密狗
DogOperate dop = new DogOperate();
try
{
dop.Check_Dog(DogCascade,DogPassword,ref iRet);
}
catch
{
ForseOutTimer.Enabled = true;
MessageBox.Show("检测到加密狗出错,可能加密狗不存在\r\n或驱动安装不正确,程序将在10秒内强制退出!","消息:",MessageBoxButtons.OK,MessageBoxIcon.Warning);
Application.Exit();
ForseOutTimer.Enabled = false;
bCanExit = true;
return;
}
if(0!=iRet)
{
ForseOutTimer.Enabled = true;
MessageBox.Show("加密狗不在USB口上,或驱动安装不正确\r\n程序将在10秒内强制退出!","消息:",MessageBoxButtons.OK,MessageBoxIcon.Warning);
Application.Exit();
ForseOutTimer.Enabled = false;
bCanExit = true;
return;
}
try
{
dop.Read_Dog(DogCascade,DogPassword+1,DogAddr,DogBytes,ref DogData[0],ref iRet);
if(iRet != 0)
{
ForseOutTimer.Enabled = true;
MessageBox.Show("读狗操作失败\r\n程序将在10秒内强制退出!","消息:",MessageBoxButtons.OK,MessageBoxIcon.Warning);
Application.Exit();
ForseOutTimer.Enabled = false;
bCanExit = true;
return;
}
}
catch
{
ForseOutTimer.Enabled = true;
MessageBox.Show("对狗操作失败\r\n程序将在10秒内强制退出!","消息:",MessageBoxButtons.OK,MessageBoxIcon.Warning);
Application.Exit();
ForseOutTimer.Enabled = false;
bCanExit = true;
return;
}
bCanExit = false;
}
// 加密狗不存在时强制30s内退出代码
private static void ForseOutTimer_Elapsed(object source, ElapsedEventArgs e)
{
Application.Exit();
bCanExit = true;
}
public void Close()
{
if(dbConnection != null)
{
if(dbConnection.State != ConnectionState.Closed)
dbConnection.Close();
}
}
public static System.Data.OracleClient.OracleConnection DBConnection
{
get
{
if(dbConnection == null)
return null;
if (dbConnection.State != ConnectionState.Open)
{
try
{
dbConnection.Open();
}
catch (OracleException)
{
ErrorCode E = new ErrorCode();
E.ShowMessage(ErrorCode.E_3_ConnectDBFailed_Code);
return null;
}
}
return dbConnection;
}
}
public static String LoginUser
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -