FKAttendCtrlMgr.cpp 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. #include "stdafx.h"
  2. #include "CDFKAttendOcx.h"
  3. #include "FKAttendCtrlMgr.h"
  4. CFKAttendCtrlMgr::CFKAttendCtrlMgr()
  5. {
  6. m_nHandleIndex = 0;
  7. }
  8. CFKAttendCtrlMgr::CFKAttendCtrlMgr(CWnd* pOcx)
  9. : CMachineMgrBase(pOcx)
  10. {
  11. m_nHandleIndex = 0;
  12. }
  13. CFKAttendCtrlMgr::~CFKAttendCtrlMgr()
  14. {
  15. CloseDevice();
  16. }
  17. int CFKAttendCtrlMgr::OpenDevice()
  18. {
  19. CString strShow;
  20. if(!m_pOcxCtrl)
  21. {
  22. strShow = "";
  23. strShow.Format(_T("没有初始化设备"));
  24. SendMessage(g_hwnd, MSG_SHOWPROMPTING,(WPARAM)&strShow, 0);
  25. return 0;
  26. }
  27. strShow = "";
  28. CDFKAttendOcx* p = (CDFKAttendOcx*)m_pOcxCtrl;
  29. switch (m_lpCfg->nType)
  30. {
  31. case 1: //optNetworkDevice tcp通信
  32. {
  33. char szIp[260] = {0};
  34. WChar2Char(szIp, m_lpCfg->szIpAddress);
  35. m_nHandleIndex = p->ConnectNet(m_lpCfg->lMachineNumber, szIp, m_lpCfg->lPort, m_lpCfg->lTimeOut, m_lpCfg->lProtocolType, m_lpCfg->lNetPassword, m_lpCfg->lLicense);
  36. }
  37. break;
  38. case 2: //optSerialDevice 串口通信
  39. {
  40. char szTelNumBer[260] = {0};
  41. WChar2Char(szTelNumBer, m_lpCfg->szTelNumber);
  42. m_nHandleIndex = p->ConnectComm(m_lpCfg->lMachineNumber, m_lpCfg->lComPort, m_lpCfg->lBaudRate, szTelNumBer, m_lpCfg->lWaitDialTime, m_lpCfg->lLicense);
  43. }
  44. break;
  45. case 3: //OptIsUSB USB通信
  46. m_nHandleIndex = p->ConnectUSB(m_lpCfg->lMachineNumber, m_lpCfg->lLicense);
  47. break;
  48. case 4: //optServer
  49. break;
  50. }
  51. if (m_nHandleIndex > 0)
  52. {
  53. strShow.Format(_T("连接设置成功"));
  54. m_bOpenDevice = 1;
  55. }
  56. else
  57. {
  58. strShow.Format(_T("连接设置失败"));
  59. SolveError(m_nHandleIndex);
  60. m_bOpenDevice = 0;
  61. }
  62. SendMessage(g_hwnd, MSG_SHOWPROMPTING,(WPARAM)&strShow, 0);
  63. return m_bOpenDevice;
  64. }
  65. int CFKAttendCtrlMgr::CloseDevice()
  66. {
  67. if(m_pOcxCtrl == NULL)
  68. return 0;
  69. ((CDFKAttendOcx*)m_pOcxCtrl)->DisConnect(m_nHandleIndex);
  70. m_pOcxCtrl == NULL;
  71. CString strShow = _T("");
  72. strShow.Format(_T("已断开连接"));
  73. SendMessage(g_hwnd, MSG_SHOWPROMPTING,(WPARAM)&strShow, 0);
  74. m_bOpenDevice = 0;
  75. return 1;
  76. }
  77. //读取记录
  78. int CFKAttendCtrlMgr::ReadGeneralLogData(std::vector<STGeneralLogData>* pVData)
  79. {
  80. if(!m_pOcxCtrl || pVData == NULL)
  81. return -1;
  82. int nCount = 0;
  83. int nErroCode = ((CDFKAttendOcx*)m_pOcxCtrl)->LoadGeneralLogData(m_nHandleIndex, 1); // ==0 读取全部记录,==1 读取最新的记录;
  84. if (nErroCode != 1)
  85. {
  86. SolveError(nErroCode);
  87. LOG4C((LOG_NOTICE, "设置指纹机读取模式失败"));
  88. return FALSE;
  89. }
  90. // 循环读取全部记录;
  91. int nRet = 0;
  92. long lEnrollNumber = 0;
  93. long lEMachineNumber = 0;
  94. long lVerifyMode = 0;
  95. long lInOutMode = 0;
  96. DATE dDateTime;
  97. int nYear = 0;
  98. int nMonth = 0;
  99. int nDay = 0;
  100. int nHour = 0;
  101. int nMinute = 0;
  102. do
  103. {
  104. nRet = ((CDFKAttendOcx*)m_pOcxCtrl)->GetGeneralLogData(m_nHandleIndex, &lEnrollNumber, &lVerifyMode, &lInOutMode, &dDateTime);
  105. if (nRet == 1)
  106. {
  107. nCount++;
  108. COleDateTime cOleTime(dDateTime);
  109. SYSTEMTIME systime;
  110. VariantTimeToSystemTime(cOleTime, &systime);
  111. CTime ct(systime);
  112. nYear = ct.GetYear();
  113. nMonth = ct.GetMonth();
  114. nDay = ct.GetDay();
  115. nHour = ct.GetHour();
  116. nMinute = ct.GetMinute();
  117. STGeneralLogData data;
  118. data.Clone(m_lpCfg->lMachineNumber, lEnrollNumber, lEMachineNumber, lVerifyMode, lInOutMode, nYear, nMonth, nDay, nHour, nMinute);
  119. pVData->push_back(data);
  120. }
  121. } while (nRet == 1);
  122. return nCount;
  123. }
  124. int CFKAttendCtrlMgr::ReadAllGlLogData(std::vector<STGeneralLogData>* pVData)
  125. {
  126. if(!m_pOcxCtrl || pVData == NULL)
  127. return -1;
  128. int nCount = 0;
  129. int nErroCode = ((CDFKAttendOcx*)m_pOcxCtrl)->LoadGeneralLogData(m_nHandleIndex, 0); // ==0 读取全部记录,==1 读取最新的记录;
  130. if (nErroCode != 1)
  131. {
  132. SolveError(nErroCode);
  133. LOG4C((LOG_NOTICE, "设置指纹机读取模式失败"));
  134. return FALSE;
  135. }
  136. // 循环读取全部记录;
  137. long dwEnrollNumber = 0;
  138. long dwEMachineNumber = 0;
  139. long dwVerifyMode = 0;
  140. long dwInOutMode = 0;
  141. DATE dDateTime;
  142. int nYear = 0;
  143. int nMonth = 0;
  144. int nDay = 0;
  145. int nHour = 0;
  146. int nMinute = 0;
  147. int nRet = 0;
  148. do
  149. {
  150. nRet = ((CDFKAttendOcx*)m_pOcxCtrl)->GetGeneralLogData(m_nHandleIndex, &dwEnrollNumber, &dwVerifyMode, &dwInOutMode, &dDateTime);
  151. if (nRet == 1)
  152. {
  153. nCount++;
  154. COleDateTime cOleTime(dDateTime);
  155. SYSTEMTIME systime;
  156. VariantTimeToSystemTime(cOleTime, &systime);
  157. CTime ct(systime);
  158. nYear = ct.GetYear();
  159. nMonth = ct.GetMonth();
  160. nDay = ct.GetDay();
  161. nHour = ct.GetHour();
  162. nMinute = ct.GetMinute();
  163. STGeneralLogData data;
  164. data.Clone(m_lpCfg->lMachineNumber, dwEnrollNumber, dwEMachineNumber, dwVerifyMode, dwInOutMode, nYear, nMonth, nDay, nHour, nMinute);
  165. pVData->push_back(data);
  166. }
  167. } while (nRet == 1);
  168. return nCount;
  169. }
  170. int CFKAttendCtrlMgr::USBReadSuperLogData(LPWSTR LPSZFileName)
  171. {
  172. if(m_pOcxCtrl)
  173. {
  174. char szFileName[256] = {0};
  175. WChar2Char(szFileName, LPSZFileName);
  176. return ((CDFKAttendOcx*)m_pOcxCtrl)->USBLoadSuperLogDataFromFile(m_nHandleIndex, szFileName);
  177. }
  178. return 0;
  179. }
  180. //设置指纹机可用/不可用
  181. BOOL CFKAttendCtrlMgr::SetMachineEnable(BOOL bEnable/*=TRUE*/)
  182. {
  183. if (m_pOcxCtrl)
  184. {
  185. BOOL ret = ((CDFKAttendOcx*)m_pOcxCtrl)->EnableDevice(m_nHandleIndex, bEnable);
  186. if(!ret)
  187. {
  188. long nErroCode = 0;
  189. ((CDFKAttendOcx*)m_pOcxCtrl)->GetLastError(&nErroCode);
  190. SolveError(nErroCode);
  191. //LOG4C((LOG_NOTICE, "设置指纹机可用/不可用状态失败"));
  192. return FALSE;
  193. }
  194. }
  195. else
  196. {
  197. LOG4C((LOG_NOTICE, "CFKAttendCtrlMgr SetMachineEnable方法无效"));
  198. return FALSE;
  199. }
  200. return TRUE;
  201. }
  202. BOOL CFKAttendCtrlMgr::DelLogData()
  203. {
  204. if(m_pOcxCtrl == NULL)
  205. return FALSE;
  206. return ((CDFKAttendOcx*)m_pOcxCtrl)->EmptyGeneralLogData(m_nHandleIndex);
  207. }
  208. //清除所有管理员
  209. int CFKAttendCtrlMgr::BenumbAllManager()
  210. {
  211. if(m_bOpenDevice == 0)
  212. {
  213. AfxMessageBox(_T("没有连接指纹机"));
  214. return 0;
  215. }
  216. SetMachineEnable(FALSE);
  217. LOG4C((LOG_NOTICE, "CFKAttendCtrlMgr BenumbAllManager Index=%d", m_nHandleIndex));
  218. long ret = ((CDFKAttendOcx*)m_pOcxCtrl)->BenumbAllManager(m_nHandleIndex);
  219. LOG4C((LOG_NOTICE, "CFKAttendCtrlMgr BenumbAllManager ret=%d", ret));
  220. return ret;
  221. }
  222. //错误输出
  223. BOOL CFKAttendCtrlMgr::SolveError(CONST LONG& nErroCode)
  224. {
  225. /*
  226. 1: RUN_SUCCESS 表示指令成功的通知
  227. 0: RUNERR_NOSUPPORT表示机器不支持对应指令的错误代码
  228. -1: RUNERR_UNKNOWNERROR表示不明错误代码
  229. -2: RUNERR_NO_OPEN_COMM表示机器没有连接的错误代码
  230. -3: RUNERR_WRITE_FAIL表示机器上不能传送数据的错误代码
  231. -4: RUNERR_READ_FAIL表示从机器上不能读数据的错误代码
  232. -5: RUNERR_INVALID_PARAM表示读的参数不正确的错误代码
  233. -6: RUNERR_NON_CARRYOUT表示指令失败的错误代码
  234. -7: RUNERR_DATAARRAY_END表示读完数据的通知
  235. -8: RUNERR_DATAARRAY_NONE表示数据不存在的错误代码
  236. -9: RUNERR_MEMORY表示 PC 的内存不足的错误代码
  237. -10: RUNERR_MIS_PASSWORD表示连接机器许可号码是不正确的错误代码
  238. -11: RUNERR_MEMORYOVER表示机器上不足存储器的错误代码
  239. -12: RUNERR_DATADOUBLE表示要登记的号码已经在机器数据里存在的错误代码
  240. -14: RUNERR_MANAGEROVER表示机器里没有空间,未能登记管理者.数据的错误代码
  241. -15: RUNERR_FPDATAVERSION表示要用的指纹数据的版本不正确的错误代码
  242. */
  243. static CString strErrorDescriptor;
  244. switch (nErroCode)
  245. {
  246. case RUNERR_NOSUPPORT: // 表示机器不支持对应指令的错误代码;
  247. strErrorDescriptor = _T("机器不支持对应指令,请重试");
  248. break;
  249. case RUNERR_UNKNOWERROR: // 表示不明错误代码;
  250. strErrorDescriptor = _T("不明错误代码");
  251. break;
  252. case RUNERR_NO_OPEN_COMM: // 表示机器没有连接的错误代码;
  253. strErrorDescriptor = _T("机器没有连接的错误代码");
  254. break;
  255. case RUNERR_WRITE_FAIL: // 表示机器上不能传送数据的错误代码;
  256. {
  257. //g_phWnd->OnBnClickedDisconnectdevice();
  258. PostMessage(g_hwnd, MSG_DISCONNECT, 0, 0);
  259. //PostMessage(g_hwnd, MSG_CONNECT, 0, 0);
  260. strErrorDescriptor = _T("机器上不能传送数据的错误代码,请断开连接重新连接指纹机");
  261. }
  262. break;
  263. case RUNERR_READ_FAIL: // 表示从机器上不能读数据;
  264. strErrorDescriptor = _T("从机器上不能读数据");
  265. break;
  266. case RUNERR_INVALID_PARAM: // 表示读的参数不正确;
  267. strErrorDescriptor = _T("读的参数不正确");
  268. break;
  269. case RUNERR_NON_CARRYOUT: // 表示指令失败;
  270. strErrorDescriptor = _T("指令失败");
  271. break;
  272. case RUNERR_DATAARRAY_END: // 表示读完数据的通知;
  273. strErrorDescriptor = _T("读完数据的通知");
  274. break;
  275. case RUNERR_DATAARRAY_NONE: // 表示数据不存在;
  276. strErrorDescriptor = _T("指纹机已无最新数据");
  277. break;
  278. case RUNERR_MEMORY: // 表示PC的内存不足;
  279. strErrorDescriptor = _T("PC的内存不足");
  280. break;
  281. case RUNERR_MIS_PASSWORD: // 表示连接机器许可号码是不正确;
  282. strErrorDescriptor = _T("连接机器许可号码是不正确");
  283. break;
  284. case RUNERR_MEMORYOVER: // 表示指纹机内存不足;
  285. strErrorDescriptor = _T("指纹机内存不足");
  286. break;
  287. case RUNERR_DATADOUBLE: // 表示要登记的号码已经在机器数据里存在;
  288. strErrorDescriptor = _T("要登记的号码已经在机器数据里存在");
  289. break;
  290. case RUNERR_MANAGEROVER: // 表示机器里没有内存空间,未能登记管理者数据;
  291. strErrorDescriptor = _T("机器里没有内存空间,未能登记管理者数据");
  292. break;
  293. case RUNERR_FPDATAVERSION: // 表示要用的指纹数据的版本不正确;
  294. strErrorDescriptor = _T("要用的指纹数据的版本不正确");
  295. break;
  296. default:
  297. break;
  298. }
  299. PostMessage(g_hwnd, MSG_SHOWPROMPTING, (WPARAM)&strErrorDescriptor, 1);
  300. return TRUE;
  301. }