Form1.cs 7.0 KB

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