| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- 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<string> cl_emcode = new List<string>();
- List<string> cl_time = new List<string>();
- for (int i=0;i<fd.Rows.Count;i++)
- {
- cl_emcode.Add(fd.Rows[i]["cl_emcode"].ToString());
- cl_time.Add(fd.Rows[i]["cl_time"].ToString());
- }
- //批量插入
- StringBuilder sql = new StringBuilder();
- sql.Append("insert into cardlog (cl_id,cl_emcode,cl_time) values (cardlog_seq.nextval,:cl_emcode,:cl_time)");
- dh.BatchInsert(sql.ToString(), new string[] { "cl_emcode", "cl_time"}, cl_emcode.ToArray(), cl_time.ToArray());
- }
- private DataTable filterDataTable(DataTable dt, String condition)
- {
- if (dt == null)
- return new DataTable();
- //获取筛选条件中的列名,值
- DataRow[] dataRows = dt.Select(condition);
- DataTable ndt = dt.Clone();
- for (int i = 0; i < dataRows.Length; i++)
- {
- ndt.Rows.Add(dataRows[i].ItemArray);
- }
- return ndt;
- }
- }
- }
|