using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using UAS_MES.DataOperate; using UAS_MES.PublicForm; namespace UAS_CheckWork { public partial class Form1 : Form { public Form1() { InitializeComponent(); } DataHelper dh; //Create Standalone SDK class dynamicly. public zkemkeeper.CZKEMClass axCZKEM1 = new zkemkeeper.CZKEMClass(); private bool bIsConnected = false;//the boolean value identifies whether the device is connected private int iMachineNumber = 1;//the serial number of the device.After connecting the device ,this value will be changed. //开启线程 Thread InitGetInfo; private void btnConnect_Click(object sender, EventArgs e) { if (txtIP.Text.Trim() == "" || txtPort.Text.Trim() == "") { MessageBox.Show("请先输入IP和端口", "Error"); return; } int idwErrorCode = 0; Cursor = Cursors.WaitCursor; if (btnConnect.Text == "断开连接") { axCZKEM1.Disconnect(); bIsConnected = false; btnConnect.Text = "连接"; lblState.Text = "状态:未连接"; Cursor = Cursors.Default; return; } bIsConnected = axCZKEM1.Connect_Net(txtIP.Text, Convert.ToInt32(txtPort.Text)); if (bIsConnected) { btnConnect.Text = "断开连接"; btnConnect.Refresh(); lblState.Text = "状态:已连接"; iMachineNumber = 1;//In fact,when you are using the tcp/ip communication,this parameter will be ignored,that is any integer will all right.Here we use 1. axCZKEM1.RegEvent(iMachineNumber, 65535);//Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all) } else { axCZKEM1.GetLastError(ref idwErrorCode); MessageBox.Show("无法连接设备,ErrorCode=" + idwErrorCode.ToString(), "Error"); } Cursor = Cursors.Default; } private void getAllData_Click(object sender, EventArgs e) { if (!bIsConnected) { MessageBox.Show("请先连接设备", "Error"); return; } int idwErrorCode = 0; if (axCZKEM1.ReadAllUserID(iMachineNumber)) { string sdwEnrollNumber = ""; string sName = ""; string sPassword = ""; int iPrivilege = 1; bool bEnabled = false; while (axCZKEM1.SSR_GetAllUserInfo(iMachineNumber, out sdwEnrollNumber, out sName, out sPassword, out iPrivilege, out bEnabled)) { Console.WriteLine("人员编号" + sdwEnrollNumber); Console.WriteLine("人员名称" + sName); Console.WriteLine("人员密码" + sPassword); Console.WriteLine("privilege" + iPrivilege); Console.WriteLine("可用?" + bEnabled); } } else { axCZKEM1.GetLastError(ref idwErrorCode); MessageBox.Show("Unable to get data,ErrorCode=" + idwErrorCode.ToString(), "Error"); } //axCZKEM1.EnableDevice(iMachineNumber, false); //获取所有的考勤记录 if (axCZKEM1.ReadGeneralLogData(iMachineNumber)) { //循环获取 DataTable dt = new DataTable(); dt.Columns.Add("cl_emcode"); dt.Columns.Add("cl_time"); string enrollNumber = "";//记录用户ID int verifyCode = 0;//记录用户验证方式 0 为密码验证,1 为指纹验证,2 为卡验证 int inoutMode = 0;//考勤状态,具体含义如下: 默认 0—Check-In 1—Check-Out 2—Break-Out 3—Break-In 4—OT-In 5—OT-Out int year = 0;//记录考勤年份 int month = 0;//记录考勤月份 int day = 0;//记录考勤日期 int hour = 0;//记录考勤小时 int minute = 0;//记录考勤分钟 int second = 0;//记录考勤秒 int workCode = 0; //记录workCode while (axCZKEM1.SSR_GetGeneralLogData(iMachineNumber, out enrollNumber, out verifyCode, out inoutMode, out year, out month, out day, out hour, out minute, out second, ref workCode)) { //将数据加入DataTable中 DataRow dr = dt.NewRow(); dr["cl_emcode"] = enrollNumber; dr["cl_time"] = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second; dt.Rows.Add(dr); } allData.DataSource = dt; //显示 showDataGrid.DataSource = (DataTable)allData.DataSource; } else { axCZKEM1.GetLastError(ref idwErrorCode); MessageBox.Show("Unable to get data,ErrorCode=" + idwErrorCode.ToString(), "Error"); } } private void Form1_Load(object sender, EventArgs e) { dh = new DataHelper(); } private void saveData_Click(object sender, EventArgs e) { //点击保存数据 string lastTime = dh.getFieldDataByCondition("cardlog", "TO_CHAR(max(wl_indate),'yyyy-MM-dd hh24:mi:ss')","").ToString(); //筛选数据 DataTable fd = filterDataTable((DataTable)allData.DataSource, "cl_time > '"+lastTime+"'"); //插入数据库 //新增的数据 List cl_emcode = new List(); List cl_time = new List(); for (int i=0;i