Form1.cs 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. using Check.DataOperate;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using System.Globalization;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading;
  9. using System.Windows.Forms;
  10. using UAS_MES.PublicForm;
  11. namespace UAS_CheckWork
  12. {
  13. public partial class Form1 : Form
  14. {
  15. DataHelper dh;
  16. //Create Standalone SDK class dynamicly.
  17. public zkemkeeper.CZKEMClass axCZKEM1 = new zkemkeeper.CZKEMClass();
  18. private bool bIsConnected = false;//the boolean value identifies whether the device is connected
  19. private int iMachineNumber = 1;//the serial number of the device.After connecting the device ,this value will be changed.
  20. //开启线程
  21. Thread InitGetInfo;
  22. public Form1()
  23. {
  24. InitializeComponent();
  25. StartPosition = FormStartPosition.CenterScreen;
  26. }
  27. private void Form1_Load(object sender, EventArgs e)
  28. {
  29. CheckForIllegalCrossThreadCalls = false;//可跨线程
  30. txtIP.Text = Properties.Settings.Default.IP;
  31. txtPort.Text = Properties.Settings.Default.Port;
  32. dh = new DataHelper();
  33. DataTable dt = (DataTable)dh.ExecuteSql("select ma_user,ma_function from master", "select");
  34. Master.DataSource = dt;
  35. Master.DisplayMember = "ma_function";
  36. Master.ValueMember = "ma_user";
  37. }
  38. private void btnConnect_Click(object sender, EventArgs e)
  39. {
  40. Properties.Settings.Default.IP = txtIP.Text;
  41. Properties.Settings.Default.Port = txtPort.Text;
  42. Properties.Settings.Default.Save();
  43. if (txtIP.Text.Trim() == "" || txtPort.Text.Trim() == "")
  44. {
  45. MessageBox.Show("请先输入IP和端口", "Error");
  46. return;
  47. }
  48. int idwErrorCode = 0;
  49. Cursor = Cursors.WaitCursor;
  50. if (btnConnect.Text == "断开连接")
  51. {
  52. axCZKEM1.Disconnect();
  53. bIsConnected = false;
  54. btnConnect.Text = "连接";
  55. lblState.Text = "状态:未连接";
  56. Cursor = Cursors.Default;
  57. return;
  58. }
  59. bIsConnected = axCZKEM1.Connect_Net(txtIP.Text, Convert.ToInt32(txtPort.Text));
  60. if (bIsConnected)
  61. {
  62. btnConnect.Text = "断开连接";
  63. btnConnect.Refresh();
  64. lblState.Text = "状态:已连接";
  65. 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.
  66. axCZKEM1.RegEvent(iMachineNumber, 65535);//Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all)
  67. }
  68. else
  69. {
  70. axCZKEM1.GetLastError(ref idwErrorCode);
  71. MessageBox.Show("无法连接设备,ErrorCode=" + idwErrorCode.ToString(), "Error");
  72. }
  73. Cursor = Cursors.Default;
  74. }
  75. private void getAllData_Click(object sender, EventArgs e)
  76. {
  77. string master = Master.SelectedValue.ToString();
  78. DataHelper.DBConnectionString = "Connection Timeout=0;Pooling=false;Password=select!#%*(;User ID="+master+";Pooling=false;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=yitoadt.wicp.io)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));";
  79. dh = new DataHelper();
  80. if (!bIsConnected)
  81. {
  82. MessageBox.Show("请先连接设备", "Error");
  83. return;
  84. }
  85. InitGetInfo = new Thread(InPrint);
  86. SetLoadingWindow stw = new SetLoadingWindow(InitGetInfo, "正在同步数据...");
  87. stw.StartPosition = FormStartPosition.CenterParent;
  88. stw.ShowDialog();
  89. }
  90. private void InPrint()
  91. {
  92. int idwErrorCode = 0;
  93. //获取所有的考勤记录
  94. if (axCZKEM1.ReadGeneralLogData(iMachineNumber))
  95. {
  96. //循环获取
  97. DataTable dt = new DataTable();
  98. dt.Columns.Add("cl_cardcode");
  99. dt.Columns.Add("cl_time");
  100. showDataGrid.DataSource = dt;
  101. string SerialNum = "";
  102. axCZKEM1.GetSerialNumber(axCZKEM1.MachineNumber, out SerialNum);
  103. string LastDate = dh.getFieldDataByCondition("cardlog", "to_char(max(cl_time),'yyyy-MM-dd HH24:mi:ss')", "cl_address='考勤机数据导入' and cl_code='" + SerialNum + "'").ToString();
  104. if (LastDate == "")
  105. {
  106. LastDate = "1990-01-01 00:00:00";
  107. }
  108. string enrollNumber = "";//记录用户ID
  109. int verifyCode = 0;//记录用户验证方式 0 为密码验证,1 为指纹验证,2 为卡验证
  110. int inoutMode = 0;//考勤状态,具体含义如下: 默认 0—Check-In 1—Check-Out 2—Break-Out 3—Break-In 4—OT-In 5—OT-Out
  111. int year = 0;//记录考勤年份
  112. int month = 0;//记录考勤月份
  113. int day = 0;//记录考勤日期
  114. int hour = 0;//记录考勤小时
  115. int minute = 0;//记录考勤分钟
  116. int second = 0;//记录考勤秒
  117. int workCode = 0; //记录workCode
  118. List<string> cl_cardcode = new List<string>();
  119. List<string> cl_time = new List<string>();
  120. List<string> cl_machinenum = new List<string>();
  121. StringBuilder sql = new StringBuilder();
  122. sql.Append("insert into cardlog (cl_id,cl_cardcode,cl_time,cl_address,cl_code) values (cardlog_seq.nextval,:cl_emcode,TO_DATE(:cl_time,'yyyy-MM-dd hh24:mi:ss'),'考勤机数据导入',:cl_machinenum)");
  123. int count = 0;
  124. 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))
  125. {
  126. string logtime = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
  127. if (Convert.ToDateTime(logtime) > Convert.ToDateTime(LastDate))
  128. {
  129. cl_cardcode.Add(enrollNumber);
  130. cl_time.Add(year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second);
  131. cl_machinenum.Add(SerialNum);
  132. if (count % 1000 == 0)
  133. {
  134. dh.BatchInsert(sql.ToString(), new string[] { "cl_cardcode", "cl_time", "cl_machinenum" }, cl_cardcode.ToArray(), cl_time.ToArray(), cl_machinenum.ToArray());
  135. cl_cardcode.Clear();
  136. cl_time.Clear();
  137. cl_machinenum.Clear();
  138. }
  139. count = count + 1;
  140. //将数据加入DataTable中
  141. DataRow dr = dt.NewRow();
  142. dr["cl_cardcode"] = enrollNumber;
  143. dr["cl_time"] = logtime;
  144. dt.Rows.Add(dr);
  145. }
  146. }
  147. if (cl_time.Count > 0)
  148. dh.BatchInsert(sql.ToString(), new string[] { "cl_cardcode", "cl_time", "cl_machinenum" }, cl_cardcode.ToArray(), cl_time.ToArray(), cl_machinenum.ToArray());
  149. showDataGrid.DataSource = dt;
  150. if (dt.Rows.Count > 0)
  151. {
  152. MessageBox.Show("数据同步成功");
  153. }
  154. else
  155. {
  156. MessageBox.Show("没有需要同步的数据");
  157. }
  158. }
  159. else
  160. {
  161. axCZKEM1.GetLastError(ref idwErrorCode);
  162. MessageBox.Show("Unable to get data,ErrorCode=" + idwErrorCode.ToString(), "Error");
  163. }
  164. }
  165. private void showDataGrid_DataError(object sender, DataGridViewDataErrorEventArgs e)
  166. {
  167. }
  168. private void ExportEmp_Click(object sender, EventArgs e)
  169. {
  170. if (!bIsConnected)
  171. {
  172. MessageBox.Show("请先连接设备", "Error");
  173. return;
  174. }
  175. folderBrowserDialog1.Description = "选择导出的路径";
  176. DialogResult result = folderBrowserDialog1.ShowDialog();
  177. if (result == DialogResult.OK)
  178. {
  179. string FolderPath = folderBrowserDialog1.SelectedPath;
  180. string EMenrollNumber = "";
  181. string Name = "";
  182. string Pwd = "";
  183. int Privilege = 0;
  184. bool Enable = false;
  185. DataTable dt = new DataTable();
  186. dt.Columns.Add("卡号");
  187. dt.Columns.Add("姓名");
  188. dt.Columns.Add("密码");
  189. dt.Columns.Add("权限");
  190. dt.Columns.Add("是否可用");
  191. while (axCZKEM1.SSR_GetAllUserInfo(iMachineNumber, out EMenrollNumber, out Name, out Pwd, out Privilege, out Enable))
  192. {
  193. DataRow dr = dt.NewRow();
  194. dr["卡号"] = EMenrollNumber;
  195. dr["姓名"] = Name;
  196. dr["密码"] = Pwd;
  197. dr["权限"] = Privilege;
  198. dr["是否可用"] = Enable;
  199. dt.Rows.Add(dr);
  200. }
  201. ExcelHandler ex = new ExcelHandler();
  202. ex.ExportExcel(dt, FolderPath);
  203. }
  204. }
  205. }
  206. }