Form1.cs 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. using UAS_MES.DataOperate;
  12. using UAS_MES.PublicForm;
  13. namespace UAS_CheckWork
  14. {
  15. public partial class Form1 : Form
  16. {
  17. public Form1()
  18. {
  19. InitializeComponent();
  20. }
  21. DataHelper dh;
  22. //Create Standalone SDK class dynamicly.
  23. public zkemkeeper.CZKEMClass axCZKEM1 = new zkemkeeper.CZKEMClass();
  24. private bool bIsConnected = false;//the boolean value identifies whether the device is connected
  25. private int iMachineNumber = 1;//the serial number of the device.After connecting the device ,this value will be changed.
  26. //开启线程
  27. Thread InitGetInfo;
  28. private void btnConnect_Click(object sender, EventArgs e)
  29. {
  30. if (txtIP.Text.Trim() == "" || txtPort.Text.Trim() == "")
  31. {
  32. MessageBox.Show("请先输入IP和端口", "Error");
  33. return;
  34. }
  35. int idwErrorCode = 0;
  36. Cursor = Cursors.WaitCursor;
  37. if (btnConnect.Text == "断开连接")
  38. {
  39. axCZKEM1.Disconnect();
  40. bIsConnected = false;
  41. btnConnect.Text = "连接";
  42. lblState.Text = "状态:未连接";
  43. Cursor = Cursors.Default;
  44. return;
  45. }
  46. bIsConnected = axCZKEM1.Connect_Net(txtIP.Text, Convert.ToInt32(txtPort.Text));
  47. if (bIsConnected)
  48. {
  49. btnConnect.Text = "断开连接";
  50. btnConnect.Refresh();
  51. lblState.Text = "状态:已连接";
  52. 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.
  53. axCZKEM1.RegEvent(iMachineNumber, 65535);//Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all)
  54. }
  55. else
  56. {
  57. axCZKEM1.GetLastError(ref idwErrorCode);
  58. MessageBox.Show("无法连接设备,ErrorCode=" + idwErrorCode.ToString(), "Error");
  59. }
  60. Cursor = Cursors.Default;
  61. }
  62. private void getAllData_Click(object sender, EventArgs e)
  63. {
  64. if (!bIsConnected)
  65. {
  66. MessageBox.Show("请先连接设备", "Error");
  67. return;
  68. }
  69. int idwErrorCode = 0;
  70. if (axCZKEM1.ReadAllUserID(iMachineNumber))
  71. {
  72. string sdwEnrollNumber = "";
  73. string sName = "";
  74. string sPassword = "";
  75. int iPrivilege = 1;
  76. bool bEnabled = false;
  77. while (axCZKEM1.SSR_GetAllUserInfo(iMachineNumber, out sdwEnrollNumber, out sName, out sPassword, out iPrivilege, out bEnabled))
  78. {
  79. Console.WriteLine("人员编号" + sdwEnrollNumber);
  80. Console.WriteLine("人员名称" + sName);
  81. Console.WriteLine("人员密码" + sPassword);
  82. Console.WriteLine("privilege" + iPrivilege);
  83. Console.WriteLine("可用?" + bEnabled);
  84. }
  85. }
  86. else
  87. {
  88. axCZKEM1.GetLastError(ref idwErrorCode);
  89. MessageBox.Show("Unable to get data,ErrorCode=" + idwErrorCode.ToString(), "Error");
  90. }
  91. //axCZKEM1.EnableDevice(iMachineNumber, false);
  92. //获取所有的考勤记录
  93. if (axCZKEM1.ReadGeneralLogData(iMachineNumber))
  94. {
  95. //循环获取
  96. DataTable dt = new DataTable();
  97. dt.Columns.Add("cl_emcode");
  98. dt.Columns.Add("cl_time");
  99. string enrollNumber = "";//记录用户ID
  100. int verifyCode = 0;//记录用户验证方式 0 为密码验证,1 为指纹验证,2 为卡验证
  101. int inoutMode = 0;//考勤状态,具体含义如下: 默认 0—Check-In 1—Check-Out 2—Break-Out 3—Break-In 4—OT-In 5—OT-Out
  102. int year = 0;//记录考勤年份
  103. int month = 0;//记录考勤月份
  104. int day = 0;//记录考勤日期
  105. int hour = 0;//记录考勤小时
  106. int minute = 0;//记录考勤分钟
  107. int second = 0;//记录考勤秒
  108. int workCode = 0; //记录workCode
  109. 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))
  110. {
  111. //将数据加入DataTable中
  112. DataRow dr = dt.NewRow();
  113. dr["cl_emcode"] = enrollNumber;
  114. dr["cl_time"] = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
  115. dt.Rows.Add(dr);
  116. }
  117. allData.DataSource = dt;
  118. //显示
  119. showDataGrid.DataSource = (DataTable)allData.DataSource;
  120. }
  121. else
  122. {
  123. axCZKEM1.GetLastError(ref idwErrorCode);
  124. MessageBox.Show("Unable to get data,ErrorCode=" + idwErrorCode.ToString(), "Error");
  125. }
  126. }
  127. private void Form1_Load(object sender, EventArgs e)
  128. {
  129. dh = new DataHelper();
  130. }
  131. private void saveData_Click(object sender, EventArgs e)
  132. {
  133. //点击保存数据
  134. string lastTime = dh.getFieldDataByCondition("cardlog", "TO_CHAR(max(wl_indate),'yyyy-MM-dd hh24:mi:ss')","").ToString();
  135. //筛选数据
  136. DataTable fd = filterDataTable((DataTable)allData.DataSource, "cl_time > '"+lastTime+"'");
  137. //插入数据库
  138. //新增的数据
  139. List<string> cl_emcode = new List<string>();
  140. List<string> cl_time = new List<string>();
  141. for (int i=0;i<fd.Rows.Count;i++)
  142. {
  143. cl_emcode.Add(fd.Rows[i]["cl_emcode"].ToString());
  144. cl_time.Add(fd.Rows[i]["cl_time"].ToString());
  145. }
  146. //批量插入
  147. StringBuilder sql = new StringBuilder();
  148. sql.Append("insert into cardlog (cl_id,cl_emcode,cl_time) values (cardlog_seq.nextval,:cl_emcode,:cl_time)");
  149. dh.BatchInsert(sql.ToString(), new string[] { "cl_emcode", "cl_time"}, cl_emcode.ToArray(), cl_time.ToArray());
  150. }
  151. private DataTable filterDataTable(DataTable dt, String condition)
  152. {
  153. if (dt == null)
  154. return new DataTable();
  155. //获取筛选条件中的列名,值
  156. DataRow[] dataRows = dt.Select(condition);
  157. DataTable ndt = dt.Clone();
  158. for (int i = 0; i < dataRows.Length; i++)
  159. {
  160. ndt.Rows.Add(dataRows[i].ItemArray);
  161. }
  162. return ndt;
  163. }
  164. }
  165. }