| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292 |
- // ClyfzAttendanceDlg.cpp : 实现文件
- //
- #include "stdafx.h"
- #include "lyfzAttendance.h"
- #include "lyfzAttendanceDlg.h"
- #include "DlgTimeChoose.h"
- #include "DlgConfig.h"
- #include "Global.h"
- #include "DBInterface.h"
- #include "DataManager.h"
- #include "FpClockCtrlMgr.h"
- #include "FKAttendCtrlMgr.h"
- #include "ClearMgrDlg.h"
- #include "md5.h"
- const UINT WM_TASKBARCREATED = ::RegisterWindowMessage(_T("lyfzAoXinItray"));
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #endif
- ClyfzAttendanceDlg *g_phWnd = NULL;
- // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
- class CAboutDlg : public CDialog
- {
- public:
- CAboutDlg();
- // 对话框数据
- enum { IDD = IDD_ABOUTBOX };
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
- // 实现
- protected:
- DECLARE_MESSAGE_MAP()
- };
- CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
- {
- }
- void CAboutDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- }
- BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
- END_MESSAGE_MAP()
- // ClyfzAttendanceDlg 对话框
- ClyfzAttendanceDlg::ClyfzAttendanceDlg(CWnd* pParent /*=NULL*/)
- : CDialog(ClyfzAttendanceDlg::IDD, pParent)
- , m_trayIcon(IDR_MAINFRAME)
- {
- m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
- m_dwRecord = 0;
- m_isNotify = TRUE;
- m_bNoticeTray = TRUE;
- m_bAutoRuning = AfxGetApp()->GetProfileInt(_T("lyfzAoXin"), _T("autoruning"), 0);
- memset(&m_Devicecfg, 0, sizeof(DEVICECFG));
- }
- void ClyfzAttendanceDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- DDX_Control(pDX, IDC_FP_CLOCKCTRL1, m_FP_CLOCK);
- DDX_Control(pDX, IDC_RICHEDIT21, m_TipsMsgWnd);
- DDX_Control(pDX, IDC_LIST3, m_ctrlListShow);
- }
- BEGIN_MESSAGE_MAP(ClyfzAttendanceDlg, CDialog)
- ON_WM_SYSCOMMAND()
- ON_WM_PAINT()
- ON_WM_TIMER()
- ON_WM_DESTROY()
- ON_WM_CLOSE()
- ON_WM_QUERYDRAGICON()
- //}}AFX_MSG_MAP
- ON_MESSAGE(MSG_TRAY_NOTIFICATION, OnTrayNotification)
- ON_REGISTERED_MESSAGE(WM_TASKBARCREATED, OnTaskBarCreated)
-
- ON_COMMAND(Menu_Exit, &ClyfzAttendanceDlg::OnExit)
- ON_COMMAND(Menu_AutoRun, &ClyfzAttendanceDlg::OnAutorun)
- ON_COMMAND(Menu_ShowWindow, &ClyfzAttendanceDlg::OnShowwindow)
- ON_COMMAND(Menu_ReadAllLog, &ClyfzAttendanceDlg::OnReadalllog)
- ON_COMMAND(Menu_InitAttend, &ClyfzAttendanceDlg::OnInitAttend)
- ON_MESSAGE(MSG_SHOWPROMPTING, &ClyfzAttendanceDlg::ShowPrompting)
- ON_MESSAGE(MSG_SHOWREALTIMELOG, &ClyfzAttendanceDlg::ShowRealTimeLog)
- ON_BN_CLICKED(IDC_Config_BTN, &ClyfzAttendanceDlg::OnBnClickedConfig)
- ON_BN_CLICKED(IDC_ConnectSet_BTN, &ClyfzAttendanceDlg::OnBnClickedConnectSet)
- ON_BN_CLICKED(IDC_Black_BTN, &ClyfzAttendanceDlg::OnBnClickedBlack)
- ON_BN_CLICKED(IDC_Save_BTN, &ClyfzAttendanceDlg::OnBnClickedSaveBtn)
- ON_BN_CLICKED(IDC_FileLog_BTN, &ClyfzAttendanceDlg::OnBnClickedFilelogBtn)
- ON_BN_CLICKED(IDC_AllSubmit_BTN, &ClyfzAttendanceDlg::OnBnClickedAllsubmitBtn)
- ON_BN_CLICKED(IDC_SelSubmit_BTN, &ClyfzAttendanceDlg::OnBnClickedSelsubmitBtn)
- ON_BN_CLICKED(IDC_DelLog_BTN, &ClyfzAttendanceDlg::OnBnClickedDelLogBtn)
- ON_BN_CLICKED(IDC_RealTimeConfirm_BTN, &ClyfzAttendanceDlg::OnBnClickedRealtimeconfirmBtn)
- ON_BN_CLICKED(IDC_StopConfirm_BTN, &ClyfzAttendanceDlg::OnBnClickedStopconfirmBtn)
- ON_WM_DESTROY()
- //ON_BN_CLICKED(IDC_DB_CONNECT, &ClyfzAttendanceDlg::OnBnClickedDbConnect)
- ON_BN_CLICKED(IDC_ClearMgr_BTN, &ClyfzAttendanceDlg::OnBnClickedClearMgrBtn)
- END_MESSAGE_MAP()
- // ClyfzAttendanceDlg 消息处理程序
- BOOL ClyfzAttendanceDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- // 将“关于...”菜单项添加到系统菜单中。
- // IDM_ABOUTBOX 必须在系统命令范围内。
- ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
- ASSERT(IDM_ABOUTBOX < 0xF000);
- CMenu* pSysMenu = GetSystemMenu(FALSE);
- if (pSysMenu != NULL)
- {
- BOOL bNameValid;
- CString strAboutMenu;
- bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
- ASSERT(bNameValid);
- if (!strAboutMenu.IsEmpty())
- {
- pSysMenu->AppendMenu(MF_SEPARATOR);
- pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
- }
- }
- // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
- // 执行此操作
- SetIcon(m_hIcon, TRUE); // 设置大图标
- SetIcon(m_hIcon, FALSE); // 设置小图标
- // TODO: 在此添加额外的初始化代码
-
- g_hwnd = GetSafeHwnd();
- g_phWnd = this;
- InitTrayIcon();
- InitCtrlList();
- ChangeCtrlStatus(1);
- //连接数据库
- CDBInterface* pDBInterface = CDBInterface::GetInstance();
- pDBInterface->GetIniInfo();
- // 这一段,应该放在升级包里处理比较统一;
- if ( pDBInterface->OpenDatabase() )
- ReadUserInfo();//获取员工信息
- else
- pDBInterface->SolveDBError(WSAECONNRESET);
- if ( m_bAutoRuning )
- {
- ShowWindow(SW_HIDE);
- OnBnClickedConnectSet();
- }
- //读取ocx.ini文件
- ReadConnectInfo(m_Devicecfg);
- return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
- }
- ///////////////////////////////////////////////////////////////////////////////
- // 函数:ReadUserInfo
- // 说明:获取在职员工信息
- // 参数:
- // 返回值:0成功,-1失败
- //
- ///////////////////////////////////////////////////////////////////////////////
- int ClyfzAttendanceDlg::ReadUserInfo()
- {
- CDBInterface* pDBInterface = CDBInterface::GetInstance();
- if(!pDBInterface->IsOpen())
- return -1;
- m_strArrayRenyuan.RemoveAll();
- //获取员工信息renyuan
- CString strfilter = _T("dimission='在职'");
- std::vector<CString> vFieldName;
- vFieldName.push_back(_T("id"));
- vFieldName.push_back(_T("name"));
- vFieldName.push_back(_T("sex"));
- vFieldName.push_back(_T("loginno1"));
- vFieldName.push_back(_T("loginno2"));
- pDBInterface->GetDataBySelect(m_strArrayRenyuan, NAME_renyuan1, vFieldName, &strfilter);
- if(m_strArrayRenyuan.GetSize() == 0)
- {
- //查询新表dbo.View_UserInfo
- vFieldName.clear();
- vFieldName.push_back(_T("Account"));
- vFieldName.push_back(_T("UserName"));
- vFieldName.push_back(_T("sex"));
- vFieldName.push_back(_T("loginnoID1"));
- vFieldName.push_back(_T("loginnoID2"));
- pDBInterface->GetDataBySelect(m_strArrayRenyuan, NAME_renyuan2, vFieldName, &strfilter);
- }
- return 0;
- }
- void ClyfzAttendanceDlg::InitCtrlList()
- {
- m_ctrlListShow.InsertColumn(0,_T("记录号"));
- m_ctrlListShow.SetColumnWidth(0,80);
- m_ctrlListShow.InsertColumn(1,_T("员工"));
- m_ctrlListShow.SetColumnWidth(1,100);
- m_ctrlListShow.InsertColumn( 2, _T("部门"));
- m_ctrlListShow.SetColumnWidth( 2, 100 );
- m_ctrlListShow.InsertColumn( 3, _T("性别"));
- m_ctrlListShow.SetColumnWidth( 3, 100 );
- m_ctrlListShow.InsertColumn( 4, _T("指纹ID"));
- m_ctrlListShow.SetColumnWidth( 4, 100 );
- m_ctrlListShow.InsertColumn( 5, _T("打卡状态"));
- m_ctrlListShow.SetColumnWidth( 5, 100 );
- m_ctrlListShow.InsertColumn( 6, _T("打卡时间"));
- m_ctrlListShow.SetColumnWidth( 6, 200);
- m_ctrlListShow.SetExtendedStyle(m_ctrlListShow.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
- }
- void ClyfzAttendanceDlg::OnExit()
- {
- if(g_pCMachineMgrBase)
- {
- g_pCMachineMgrBase->CloseDevice();
- delete g_pCMachineMgrBase;
- g_pCMachineMgrBase = NULL;
- }
- CDialog::OnOK();
- }
- void ClyfzAttendanceDlg::OnShowwindow()
- {
- // TODO: 在此添加命令处理程序代码
- ShowWindow(SW_SHOWNORMAL);
- }
- void ClyfzAttendanceDlg::OnAutorun()
- {
- m_bAutoRuning = !m_bAutoRuning;
- AfxGetApp()->WriteProfileInt(_T("lyfzAoXin"), _T("autoruning"), m_bAutoRuning);
- AddAutoSysRun((CHAR*)g_ModuleFileName, m_bAutoRuning);
- }
- void ClyfzAttendanceDlg::OnReadalllog()
- {
- CString strShow;
- TCHAR szOldLog[MAX_PATH] = {0};
- wsprintf(szOldLog, _T("%s\\AllLog.txt"), g_ModulePath);
- if( FALSE == ::PathFileExists(szOldLog) )
- {
- //LOG4C((LOG_NOTICE,"%s:不存在",szOldLog));
- strShow.Format(_T("AllLog.txt不存在..."));
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strShow,1);
- return;
- }
- CStringArray array;
- CStdioFile fp;
- if( !fp.Open(szOldLog, CFile::modeRead) )
- {
- LOG4C((LOG_NOTICE,"%s:打开文件",szOldLog));
- return;
- }
- CString strEnrollNumber; // 指纹ID;
- CString strDateTime; // 指纹登记时间;
- CString strTemp;
- fp.ReadString(strTemp);
- CString strFinder = _T(""); // Jeff.AllLog.txt里是用tab键分隔数据的;
- std::vector<STAllLog> vtAllLog;
- STAllLog tagAllLog;
- // Jeff.一条记录里有4个tab键;
- LOG4C((LOG_NOTICE,"%s:read ready",szOldLog));
- while( !feof(fp.m_pStream) )
- {
- // Jeff.读一行数据;
- fp.ReadString(strTemp);
- // Jeff.第一个tab键前的数据是记录数;
- int pos = strTemp.Find(strFinder);
- if(pos == -1)
- {
- // WriteLogin("返回1");
- continue;
- }
- strTemp = strTemp.Right(strTemp.GetLength()-pos-1);
- // Jeff.第二个tab键前的数据是指纹ID号;
- pos = strTemp.Find(strFinder);
- if(pos == -1)
- {
- //WriteLogin("返回2");
- continue;
- }
- strEnrollNumber = strTemp.Left(pos);
- strTemp=strTemp.Right(strTemp.GetLength()-pos-1);
- // Jeff.第三个tab键前的数据是Verify(验证什么未知)字段;
- pos = strTemp.Find(strFinder);
- if(pos == -1)
- {
- //WriteLogin("返回3");
- continue;
- }
- strTemp = strTemp.Right(strTemp.GetLength()-pos-1);
- // Jeff.第四个tab键前的数据是InOut字段;
- pos = strTemp.Find(strFinder);
- if(pos == -1)
- {
- //WriteLogin("返回4");
- continue;
- }
- // Jeff.最后的字段内容是指纹登记时间;
- strDateTime = strTemp.Right(strTemp.GetLength()-pos-1);
- strEnrollNumber.TrimLeft();
- strEnrollNumber.TrimRight();
- strDateTime.TrimLeft();
- strDateTime.TrimRight();
- strDateTime.Replace(_T("/"), _T("-"));
- tagAllLog.strEnrollNumber = strEnrollNumber;
- tagAllLog.strDateTime = strDateTime;
- vtAllLog.push_back(tagAllLog);
- }
- strShow.Format(_T("读取AllLog.txt完毕,记录数=%d,即将提交数据..."),vtAllLog.size());
- SendMessage(MSG_SHOWPROMPTING, (WPARAM)&strShow, 0);
- Sleep(10);
- CDataManager::GetInstance()->ReadOldLog(vtAllLog);
- }
- // 从文件中读出数据,并初始指纹机里的管理数据.
- void ClyfzAttendanceDlg::OnInitAttend()
- {
- // 获取指定文件.
- CString strFindFile = _T("");
- CString lpszFilter = _T("(dat*.dat)|*.dat||");
- DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT |OFN_ALLOWMULTISELECT;
- CFileDialog dlg(TRUE, _T("default Files (*dat)"), NULL, dwFlags, lpszFilter, NULL);
- dlg.m_ofn.lpstrTitle=_T("请加载相关的指纹机数据文件");
- if(dlg.DoModal() == IDCANCEL)
- return ;
- strFindFile = dlg.GetPathName();
- // 加载指定数据;
- if ( g_pCMachineMgrBase->USBReadSuperLogData(strFindFile.GetBuffer()))
- {
- TRACE("11111");
- }
- strFindFile.ReleaseBuffer();
- }
- void ClyfzAttendanceDlg::OnSysCommand(UINT nID, LPARAM lParam)
- {
- if ((nID & 0xFFF0) == IDM_ABOUTBOX)
- {
- CAboutDlg dlgAbout;
- dlgAbout.DoModal();
- }
- else
- {
- CDialog::OnSysCommand(nID, lParam);
- }
- }
- // 如果向对话框添加最小化按钮,则需要下面的代码
- // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
- // 这将由框架自动完成。
- void ClyfzAttendanceDlg::OnPaint()
- {
- if (IsIconic())
- {
- CPaintDC dc(this); // 用于绘制的设备上下文
- SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
- // 使图标在工作区矩形中居中
- int cxIcon = GetSystemMetrics(SM_CXICON);
- int cyIcon = GetSystemMetrics(SM_CYICON);
- CRect rect;
- GetClientRect(&rect);
- int x = (rect.Width() - cxIcon + 1) / 2;
- int y = (rect.Height() - cyIcon + 1) / 2;
- // 绘制图标
- dc.DrawIcon(x, y, m_hIcon);
- }
- else
- {
- CDialog::OnPaint();
- }
- }
- //当用户拖动最小化窗口时系统调用此函数取得光标
- //显示。
- HCURSOR ClyfzAttendanceDlg::OnQueryDragIcon()
- {
- return static_cast<HCURSOR>(m_hIcon);
- }
- void ClyfzAttendanceDlg::InitTrayIcon()
- {
- m_trayIcon.SetNotificationWnd(this, MSG_TRAY_NOTIFICATION);
- m_trayIcon.SetIcon(IDI_ATTENDANCE, g_strDefaultTip.c_str());
- m_trayIcon.SetIconInfos((INT)IDI_ATTENDANCE, (INT)IDI_WARNING, (UINT)IDI_TRANSPARENT);
- m_trayIcon.SetDefaultTip(g_strDefaultTip.c_str());
- }
- LRESULT ClyfzAttendanceDlg::OnTaskBarCreated(WPARAM wp, LPARAM lp)
- {
- Shell_NotifyIcon(NIM_ADD, &m_trayIcon.m_nid);
- return 0;
- }
- LRESULT ClyfzAttendanceDlg::OnTrayNotification(WPARAM wp, LPARAM lp)
- {
- if(wp != IDR_MAINFRAME)
- return m_trayIcon.OnTrayNotification(wp, lp);
- switch(lp)
- {
- case WM_RBUTTONUP:
- TrayRight();
- break;
- case WM_LBUTTONUP:
- TaskNotifyIcon();
- break;
- default:
- break;
- }
- return 0;
- }
- void ClyfzAttendanceDlg::TrayRight()
- {
- CMenu menu;
- if (!menu.LoadMenu(IDR_MENU1))
- return ;
- CMenu* pSubMenu = menu.GetSubMenu(0);
- if (!pSubMenu)
- return ;
- if(m_bAutoRuning)
- pSubMenu->CheckMenuItem(Menu_AutoRun, MF_BYCOMMAND | MF_CHECKED);
- else
- pSubMenu->CheckMenuItem(Menu_AutoRun, MF_BYCOMMAND | MF_UNCHECKED);
- CPoint point;
- GetCursorPos(&point);
- ::SetForegroundWindow(m_hWnd);
- pSubMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);
- }
- void ClyfzAttendanceDlg::TaskNotifyIcon()
- {
- if ( !m_bNoticeTray )
- {
- m_trayIcon.SetIcon(IDI_ATTENDANCE, g_strDefaultTip.c_str());
- ShowWindow(SW_SHOWNORMAL);
- m_bNoticeTray = TRUE;
- }
- else
- {
- m_trayIcon.SetIcon(IDI_ATTENDANCE, g_strDefaultTip.c_str());
- ShowWindow(SW_HIDE);
- m_bNoticeTray = FALSE;
- }
- }
- //按扭状态0=全部失效, 1==只有(软件配置/连接)可用, 2=只有连接不可用
- void ClyfzAttendanceDlg::ChangeCtrlStatus(int nType)
- {
- GetDlgItem(IDC_Config_BTN)->EnableWindow(FALSE);
- GetDlgItem(IDC_ConnectSet_BTN)->EnableWindow(FALSE);
- GetDlgItem(IDC_Black_BTN)->EnableWindow(FALSE);
- GetDlgItem(IDC_Save_BTN)->EnableWindow(FALSE);
- GetDlgItem(IDC_AllSubmit_BTN)->EnableWindow(FALSE);
- GetDlgItem(IDC_FileLog_BTN)->EnableWindow(FALSE);
- GetDlgItem(IDC_DelLog_BTN)->EnableWindow(FALSE);
- GetDlgItem(IDC_SelSubmit_BTN)->EnableWindow(FALSE);
- GetDlgItem(IDC_RealTimeConfirm_BTN)->EnableWindow(FALSE);
- GetDlgItem(IDC_StopConfirm_BTN)->EnableWindow(FALSE);
- switch(nType)
- {
- case 1:
- {
- GetDlgItem(IDC_Config_BTN)->EnableWindow(TRUE);
- GetDlgItem(IDC_ConnectSet_BTN)->EnableWindow(TRUE);
- }
- break;
- case 2:
- {
- //GetDlgItem(IDC_Config_BTN)->EnableWindow(TRUE);
- GetDlgItem(IDC_Black_BTN)->EnableWindow(TRUE);
- GetDlgItem(IDC_Save_BTN)->EnableWindow(TRUE);
- GetDlgItem(IDC_AllSubmit_BTN)->EnableWindow(TRUE);
- GetDlgItem(IDC_FileLog_BTN)->EnableWindow(TRUE);
- GetDlgItem(IDC_DelLog_BTN)->EnableWindow(TRUE);
- GetDlgItem(IDC_SelSubmit_BTN)->EnableWindow(TRUE);
- GetDlgItem(IDC_RealTimeConfirm_BTN)->EnableWindow(TRUE);
- }
- break;
- }
- }
- //软件配置
- void ClyfzAttendanceDlg::OnBnClickedConfig()
- {
- // TODO: 在此添加控件通知处理程序代码
- CString strShow = _T("");
- CDlgConfig dlg;
- dlg.m_lpCfg = &m_Devicecfg;
- if ( dlg.DoModal() != IDOK )
- {
- strShow.Format(_T("取消选择提交!!!"));
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strShow,1);
- return;
- }
- CDBInterface* pdb = CDBInterface::GetInstance();
- if(pdb->IsOpen())
- pdb->CloseDatabase();
- pdb->GetIniInfo();
- if(!pdb->OpenDatabase())
- return;
- ReadUserInfo();
- }
- //连接设置
- void ClyfzAttendanceDlg::OnBnClickedConnectSet()
- {
- // TODO: 在此添加控件通知处理程序代码
- if(!InitDeviceData())
- {
- MessageBox(_T("初始化设备数据失败"));
- return;
- }
- if(!g_pCMachineMgrBase->OpenDevice())
- return;
- ChangeCtrlStatus(2);
- //设备置为不可考勤状态
- //m_FP_CLOCK.EnableDevice(g_lMachineNumber, 0);
- }
- //提示信息
- LRESULT ClyfzAttendanceDlg::ShowPrompting(WPARAM wParam, LPARAM lParam)
- {
- int nShowType = lParam;
- CString strMSG = *(CString*)wParam;
- static CHARFORMAT cf;
- cf.cbSize = sizeof(CHARFORMAT);
- static COleDateTime oletime;
- oletime=COleDateTime::GetCurrentTime();
- strMSG.Format(_T("%s: #%s.\r"),oletime.Format(_T("%Y/%m/%d %H:%M:%S")),strMSG);
- //strMSG += ".\r";
- if ( nShowType == 1) // 错误信息提示
- {
- // 显示前,设置字体颜色;
- //m_EditShow.GetDefaultCharFormat(cf);
- m_TipsMsgWnd.GetDefaultCharFormat(cf);
- cf.dwMask=CFM_COLOR|CFM_FACE|CFM_SIZE|CFM_BOLD;
- cf.dwEffects = (unsigned long)~(CFE_UNDERLINE | CFE_BOLD | CFE_AUTOCOLOR);
- //cf.dwEffects ^= CFE_AUTOCOLOR;
- cf.crTextColor = RGB(255, 0, 0);
- cf.yHeight = 180;
- memset(cf.szFaceName, 0, LF_FACESIZE);
- // memcpy(cf.szFaceName, "楷体_GB2312", sizeof("楷体_GB2312"));
- memcpy(cf.szFaceName, _T("宋体"), sizeof(_T("宋体")));
- m_TipsMsgWnd.SetSelectionCharFormat(cf);
- m_TipsMsgWnd.SetSel(-1,-1);
- m_TipsMsgWnd.ReplaceSel(strMSG);
- }
- else // 成功信息提示;
- {
- m_TipsMsgWnd.GetDefaultCharFormat(cf);
- cf.dwMask=CFM_COLOR|CFM_FACE|CFM_SIZE|CFM_BOLD;
- cf.dwEffects = (unsigned long)~(CFE_UNDERLINE | CFE_BOLD | CFE_AUTOCOLOR);
- //cf.dwEffects ^= CFE_AUTOCOLOR;
- cf.crTextColor = RGB(0, 0, 255);
- cf.yHeight = 180;
- memset(cf.szFaceName, 0, LF_FACESIZE);
- // memcpy(cf.szFaceName, "楷体_GB2312", sizeof("楷体_GB2312"));
- memcpy(cf.szFaceName, _T("宋体"), sizeof(_T("宋体")));
- m_TipsMsgWnd.SetSelectionCharFormat(cf);
- m_TipsMsgWnd.SetSel(-1,-1);
- m_TipsMsgWnd.ReplaceSel(strMSG);
- }
- m_TipsMsgWnd.PostMessage(WM_VSCROLL, SB_BOTTOM,0);
- return 0;
- }
- LRESULT ClyfzAttendanceDlg::ShowRealTimeLog(WPARAM wParam,LPARAM lParam)
- {
- long nEnrollNumber = *(long*)wParam;
- DATE nDateTime = *(DATE*)lParam;
- //static DWORD dwRecord = 0;//用成员变量代替;
- wchar_t wszEnrollNumber[10] = {0};
- char szEnrollNumber[10] = {0};
- _ltoa_s(nEnrollNumber,szEnrollNumber,10);
- Char2WChar(wszEnrollNumber, szEnrollNumber);
- BOOL bExist = FALSE;
- int nSize = m_strArrayRenyuan.GetSize();
- for ( int i = 0; i < nSize; i++)
- {
- if ( _tcscmp(m_strArrayRenyuan.ElementAt(i).ElementAt(3), wszEnrollNumber) == 0 || _tcscmp(m_strArrayRenyuan.ElementAt(i).ElementAt(4), wszEnrollNumber) == 0 )
- {
- bExist = TRUE;
- CString strRecord;
- strRecord.Format(_T("%d"),m_dwRecord);
- m_ctrlListShow.InsertItem(m_dwRecord,strRecord);
- m_ctrlListShow.SetItemText(m_dwRecord,1,m_strArrayRenyuan.ElementAt(i).ElementAt(0));
- m_ctrlListShow.SetItemText(m_dwRecord,2,m_strArrayRenyuan.ElementAt(i).ElementAt(1));
- m_ctrlListShow.SetItemText(m_dwRecord,3,m_strArrayRenyuan.ElementAt(i).ElementAt(2));
- //m_ctrlListShow.SetItemText(m_dwRecord,4,m_strArrayRenyuan.ElementAt(i).ElementAt(3));
- m_ctrlListShow.SetItemText(m_dwRecord, 4, wszEnrollNumber);
- COleDateTime tagOleTime(nDateTime);
- CString strMode = _T("");
- GetVerifyMode(tagOleTime.GetSecond(), strMode);
- m_ctrlListShow.SetItemText(m_dwRecord, 5, strMode);
- m_ctrlListShow.SetItemText(m_dwRecord, 6, tagOleTime.Format(_T("%Y-%m-%d %H:%M:00")));
- m_dwRecord++;
- break;
- }
- }
- if ( !bExist )
- {
- CString strRecord;
- strRecord.Format(_T("%d"), m_dwRecord);
- m_ctrlListShow.InsertItem(m_dwRecord, strRecord);
- m_ctrlListShow.SetItemText(m_dwRecord,1,_T("无此指纹员工"));
- m_ctrlListShow.SetItemText(m_dwRecord,2,_T("无此指纹员工"));
- m_ctrlListShow.SetItemText(m_dwRecord,3,_T("无此指纹员工"));
- strRecord.Format(_T("%ld"),nEnrollNumber);
- m_ctrlListShow.SetItemText(m_dwRecord,4,strRecord);
- COleDateTime tagOleTime(nDateTime);
- CString strMode = _T("");
- GetVerifyMode(tagOleTime.GetSecond(), strMode);
- m_ctrlListShow.SetItemText(m_dwRecord, 5, strMode);
- m_ctrlListShow.SetItemText(m_dwRecord,6,tagOleTime.Format(_T("%Y-%m-%d %H:%M:%S")));
- m_dwRecord++;
- }
- int nItem = m_ctrlListShow.GetTopIndex();
- int nCount = m_ctrlListShow.GetItemCount();
- CRect rc;
- m_ctrlListShow.GetItemRect(nItem, rc, LVIR_BOUNDS);
- CSize sz(0, (nCount-nItem)*rc.Height());
- m_ctrlListShow.Scroll(sz);//m_List1.SendMessage(WM_VSCROLL,SB_LINERIGHT,0);
- //m_ctrlListShow.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED);
- m_ctrlListShow.SetItemState(nCount,LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
- m_ctrlListShow.SetFocus();
- return 0;
- }
- int ClyfzAttendanceDlg::GetVerifyMode(const int nMode, CString& strMode)
- {
- /*
- 指向long型变量的指针,该变量接收已考勤用户的确认方式值
- 参数说明:
- 1:指纹 2:密码 3:感应卡 4:返回 5:外出
- 6:按钮开门 7:软件开门 8:长时间开门(强制开门) 9:强制关门 10:识别成功但不开门
- 11:非法开门报警 12:上班 13:下班 14:加班上班 15:加班下班
- */
- switch(nMode)
- {
- case VERIFYMODE_FINGER:
- strMode = _T("指纹");
- break;
- case VERIFYMODE_PWD:
- strMode = _T("密码");
- break;
- case VERIFYMODE_INDUCTIONCARD:
- strMode = _T("感应卡");
- break;
- case VERIFYMODE_RETURN:
- strMode = _T("返回");
- break;
- case VERIFYMODE_OUT:
- strMode = _T("外出");
- break;
- case VERIFYMODE_BTNOPENDOOR:
- strMode = _T("按钮开门");
- break;
- case VERIFYMODE_SOWAREOPENDOOR:
- strMode = _T("软件开门");
- break;
- case VERIFYMODE_LONGTIMEOPENDOOR:
- strMode = _T("长时间开门");
- break;
- case VERIFYMODE_FORCEDTOCLOSE:
- strMode = _T("强制关门");
- break;
- case VERIFYMODE_NOTOPENDOOR:
- strMode = _T("识别成功但不开门");
- break;
- case VERIFYMODE_TOALARM:
- strMode = _T("非法开门报警");
- break;
- case VERIFYMODE_ONWORK:
- strMode = _T("上班");
- break;
- case VERIFYMODE_OFFWORK:
- strMode = _T("下班");
- break;
- case VERIFYMODE_ONWORKOVERTIME:
- strMode = _T("加班上班");
- break;
- case VERIFYMODE_OFFWORKOVERTIME:
- strMode = _T("加班下班");
- break;
- }
- return 1;
- }
- //断开
- void ClyfzAttendanceDlg::OnBnClickedBlack()
- {
- // TODO: 在此添加控件通知处理程序代码
- if(g_pCMachineMgrBase)
- {
- g_pCMachineMgrBase->CloseDevice();
- delete g_pCMachineMgrBase;
- g_pCMachineMgrBase = NULL;
- }
- ChangeCtrlStatus(1);
- }
- //保存记录
- void ClyfzAttendanceDlg::OnBnClickedSaveBtn()
- {
- // TODO: 在此添加控件通知处理程序代码
- CString strShow;
- CString strRet = ExportListToExcel(&m_ctrlListShow, _T("LoginData"));
- if ( strRet == "")
- {
- return;
- }
- strShow.Format(_T("备份当前列表数据于%s.xls中成功"), strRet);
- SendMessage(MSG_SHOWPROMPTING, (WPARAM)&strShow, 0);
- }
- //文件记录
- void ClyfzAttendanceDlg::OnBnClickedFilelogBtn()
- {
- // TODO: 在此添加控件通知处理程序代码
- CString lpszFilter = _T("(Excel*.xls)|*.xls||");
- DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT |OFN_ALLOWMULTISELECT|OFN_ENABLESIZING;
- CFileDialog dlg(TRUE, _T("default Files (*xls)"), NULL, dwFlags, lpszFilter, NULL);
- dlg.m_ofn.lpstrTitle=_T("请加载相关图层");
- // 最多可以打开20个文件
- dlg.m_ofn.nMaxFile = 20 * MAX_PATH;
- dlg.m_ofn.lpstrFile = new TCHAR[dlg.m_ofn.nMaxFile];
- ZeroMemory(dlg.m_ofn.lpstrFile, sizeof(TCHAR) * dlg.m_ofn.nMaxFile);
- // 显示文件对话框,获得文件名集合
- int retval = dlg.DoModal();
- if(retval==IDCANCEL)
- return ;
- POSITION pos_file;
- pos_file = dlg.GetStartPosition();
- CArray<CString, CString> ary_filename;
- while(pos_file != NULL)
- ary_filename.Add(dlg.GetNextPathName(pos_file));
- int nFileCount = ary_filename.GetSize();
-
- // 清屏;
- m_ctrlListShow.DeleteAllItems();
- m_dwRecord = 0;
- //根据扩展名读取相关文件
- for(int i=0; i<nFileCount; i++)
- {
- CString str_ext;
- str_ext = ary_filename.GetAt(i).Right(3);
- if ( str_ext.CollateNoCase(_T("xls")) != 0 )
- {
- str_ext.Format(_T("文件:%s 不是xls文件,无法读取..."),ary_filename.GetAt(i));
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&str_ext,1);
- continue;
- }
- ReadExcelToList(&m_ctrlListShow, ary_filename.GetAt(i), m_dwRecord);
- str_ext.Format(_T("文件:%s 导入成功..."),ary_filename.GetAt(i));
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&str_ext,0);
- }
- delete []dlg.m_ofn.lpstrFile;
- dlg.m_ofn.lpstrFile=NULL;
- ++m_dwRecord;
- }
- //全部提交
- void ClyfzAttendanceDlg::OnBnClickedAllsubmitBtn()
- {
- // TODO: 在此添加控件通知处理程序代码
- KillTimer(3);
- CString strShow;
-
- if( m_ctrlListShow.GetItemCount() && MessageBox(_T("全部提交前,是否备份当前列表数据于xls文件中?"), _T("提示"), MB_YESNO|MB_ICONQUESTION) == IDYES ) //IDNO
- {
- CString strRet = ExportListToExcel(&m_ctrlListShow, _T("LoginData"));
- if(strRet == _T(""))
- {
- strShow.Format(_T("打开文件失败"));
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strShow,1);
- return;
- }
- strShow.Format(_T("备份当前列表数据于%s中成功"), strRet.GetBuffer(strRet.GetLength()-1));
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strShow,1);
- strRet.ReleaseBuffer();
- }
- if( CDataManager::GetInstance()->IsThreadRuning())
- {
- // 全部提交前,先停止实时提交;
- CDataManager::GetInstance()->EndofRealTimeSubmitThread();
- strShow.Format(_T("停止实时采集数据"));
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strShow,1);
- }
- // 清屏;
- m_ctrlListShow.DeleteAllItems();
- m_dwRecord = 0;
- strShow.Format(_T("全部数据正在提交,指纹机不可用,请等待提交完毕......."));
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strShow,0);
- // 禁用全部按钮;
- ChangeCtrlStatus();
- if(CDataManager::GetInstance()->StartSubmitAllThread() == 0)
- {
- // 创建线程失败;
- CString strShow = _T("全部提交失败,请重试");
- SendMessage(MSG_SHOWPROMPTING, (WPARAM)&strShow, 1);
- return;
- }
- else
- {
- SetTimer(2,1000,NULL);
- }
- }
- //选择提交
- void ClyfzAttendanceDlg::OnBnClickedSelsubmitBtn()
- {
- // TODO: 在此添加控件通知处理程序代码
- // 读取指纹机全部记录,通过筛选获取指定时间的记录;
- KillTimer(3);
- CString strShow;
- if( CDataManager::GetInstance()->IsThreadRuning())
- {
- // 全部提交前,先停止实时提交;
- CDataManager::GetInstance()->EndofRealTimeSubmitThread();
- strShow.Format(_T("停止实时采集数据"));
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strShow,1);
- }
- // 选择提交前,先备份当前list记录;
- if( m_ctrlListShow.GetItemCount() && MessageBox(_T("选择提交前,是否备份当前列表数据于xls文件中?"), _T("提示"), MB_YESNO|MB_ICONQUESTION) == IDYES ) //IDNO
- {
- CString strRet = ExportListToExcel(&m_ctrlListShow, _T("LoginData"));
- if(strRet == _T(""))
- {
- strShow.Format(_T("打开文件失败"));
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strShow,1);
- return;
- }
- strShow.Format(_T("备份当前列表数据于%s中成功"), strRet.GetBuffer(strRet.GetLength()-1));
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strShow,1);
- strRet.ReleaseBuffer();
- }
- // 清屏;
- m_ctrlListShow.DeleteAllItems();
- m_dwRecord = 0;
- //读取数据
- std::vector<STGeneralLogData> vtGeneralLogData;
- if(g_pCMachineMgrBase->ReadAllGlLogData(&vtGeneralLogData) == -1)
- return;
- DlgTimeChoose dlg;
- if ( dlg.DoModal() != IDOK )
- {
- strShow.Format(_T("取消选择提交!!!"));
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strShow,1);
- return;
- }
- std::vector<STGeneralLogData>::iterator it = vtGeneralLogData.begin();
- for ( ;it != vtGeneralLogData.end(); )
- {
- // 删除不符合条件的记录;
- COleDateTime tagDT(it->dwYear, it->dwMonth, it->dwDay, it->dwHour, it->dwMinute, 0);
- if ( tagDT <= dlg.m_BeginTime1 || tagDT >= dlg.m_EndTime1)
- it = vtGeneralLogData.erase(it);
- else
- ++it;
- }
- if ( vtGeneralLogData.size() == 0 )
- {
- // 指定时间段没有数据;
- strShow.Format(_T("指定时间段没有数据!!!"));
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strShow,1);
- return;
- }
- DWORD dwTime = GetTickCount();
- DWORD dwRealCount = CDataManager::GetInstance()->WriteIntoDatabase(&vtGeneralLogData);
- dwTime = GetTickCount() - dwTime;
- strShow.Format(_T("指定时间段的记录共%d条,去除重复的共提交到数据库%d条记录,耗时%d毫秒"), vtGeneralLogData.size(), dwRealCount, dwTime);
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strShow,0);
- //UpdateData(FALSE);
- //m_ctrlListShow.Invalidate();
- CString strRet = ExportListToExcel(&m_ctrlListShow,_T("LoginData"));
- if ( strRet == "" )
- {
- strShow = _T("选择提交前备份指纹机全部登进数据于xls中失败,请手动保存");
- SendMessage(MSG_SHOWPROMPTING, (WPARAM)&strShow, 1);
- }
- else
- {
- strShow.Format(_T("选择提交前备份指纹机全部登进数据于%s.xls中成功"), strRet.GetBuffer(strRet.GetLength()-1));// Debug下,这样用strShow自己format自己的用法,会产生栈越界;
- SendMessage(MSG_SHOWPROMPTING, (WPARAM)&strShow, 0);
- strRet.ReleaseBuffer();
- }
- }
- //删除记录
- void ClyfzAttendanceDlg::OnBnClickedDelLogBtn()
- {
- // TODO: 在此添加控件通知处理程序代码
- CString strShow;
- // 删除前,提示备份处理;
- MessageBox(_T("删除指纹机打卡数据前,需要提交全部数据并保存于文件中"), _T("提示"), MB_OK | MB_ICONQUESTION);
- if( CDataManager::GetInstance()->IsThreadRuning())
- {// 全部提交前,先停止实时提交;
- CDataManager::GetInstance()->EndofRealTimeSubmitThread();
- strShow.Format(_T("停止实时采集数据"));
- SendMessage(MSG_SHOWPROMPTING, (WPARAM)&strShow, 1);
- }
- // 清屏;
- m_ctrlListShow.DeleteAllItems();
- UpdateData(FALSE);
- m_dwRecord = 0;
- strShow.Format(_T("删除前全部数据正在提交,指纹机不可用,请等待提交完毕......."));
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strShow,0);
- std::vector<STGeneralLogData> vtGeneralLogData;
- DWORD dwCount = g_pCMachineMgrBase->ReadAllGlLogData(&vtGeneralLogData); // 不用1的.因为提交全部时,要禁止使用指纹机;
- DWORD dwTime = GetTickCount();
- DWORD dwRealCount = CDataManager::GetInstance()->WriteIntoDatabase(&vtGeneralLogData); // 不使用PostMessage来处理;
- dwTime = GetTickCount() - dwTime;
- if ( dwCount == 0)
- {
- strShow.Format(_T("指纹机无记录!!!"),dwCount,dwRealCount,dwTime);
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strShow, 1);
- return;
- }
- strShow.Format(_T("全部记录共%d条,去除重复的共提交到数据库%d条记录,耗时%d毫秒"), dwCount, dwRealCount, dwTime);
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strShow,0);
- // 提交到数据库完毕后,备份于xls文件中;
- // int n = m_ctrlListShow.GetItemCount();
- // m_ctrlListShow.Invalidate();
-
- AfxMessageBox(_T("请确保所有数据已上传并备份"));
- CString strRet = ExportListToExcel(&m_ctrlListShow,_T("LoginData"));
- if ( strRet == _T(""))
- {
- strShow = _T("删除前备份指纹机全部登进数据于xls中失败,请重新尝试");
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strShow,1);
- m_ctrlListShow.DeleteAllItems();
- UpdateData(FALSE);
- m_dwRecord = 0;
- vector<STGeneralLogData> vtGeneralLogData;
- g_pCMachineMgrBase->ReadAllGlLogData(&vtGeneralLogData); // 不用1的.因为提交全部时,要禁止使用指纹机;
- ChangeCtrlStatus(2);
- return;
- }
- else
- {
- m_ctrlListShow.DeleteAllItems();
- UpdateData(FALSE);
- m_dwRecord = 0;
- strShow.Format(_T("删除前备份指纹机全部登进数据于%s.xls中成功"), strRet.GetBuffer(strRet.GetLength()-1));// Debug下,这样用strShow自己format自己的用法,会产生栈越界;
- SendMessage(MSG_SHOWPROMPTING, (WPARAM)&strShow, 0);
- strRet.ReleaseBuffer();
- }
- // 备份完毕,删除指纹机数据;
- // 未发布前,禁用
- g_pCMachineMgrBase->DelLogData();
- strShow.Format(_T("指纹机全部登进数据已完成删除,不可恢复"));
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strShow,1);
- }
- //实时提交
- void ClyfzAttendanceDlg::OnBnClickedRealtimeconfirmBtn()
- {
- // TODO: 在此添加控件通知处理程序代码
- SetTimer(3, 60*1000, NULL);
- GetDlgItem(IDC_RealTimeConfirm_BTN)->EnableWindow(FALSE);
- GetDlgItem(IDC_StopConfirm_BTN)->EnableWindow(TRUE);
- CString strShow;
- strShow.Format(_T("启动实时采集数据"));
- SendMessage(MSG_SHOWPROMPTING, (WPARAM)&strShow, 0);
- }
- //停止提交
- void ClyfzAttendanceDlg::OnBnClickedStopconfirmBtn()
- {
- // TODO: 在此添加控件通知处理程序代码
- KillTimer(3);
- CString strShow;
- strShow.Format(_T("停止实时采集数据"));
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strShow,1);
- GetDlgItem(IDC_RealTimeConfirm_BTN)->EnableWindow(TRUE);
- GetDlgItem(IDC_StopConfirm_BTN)->EnableWindow(FALSE);
- }
- void ClyfzAttendanceDlg::OnTimer(UINT_PTR nIDEvent)
- {
- if ( nIDEvent == 2)
- {
- if ( CDataManager::GetInstance()->IsSubmitAllThreadRuning() == FALSE)
- {
- // LOG4C((LOG_NOTICE, "启动log日志 全部提交完成"));
- KillTimer(2);
- // 启用全部按钮;
- ChangeCtrlStatus(2);
- CString strErrorDescriptor = _T("全部提交完成");
- SendMessage(MSG_SHOWPROMPTING,(WPARAM)&strErrorDescriptor,0);
- }
- }
- if( nIDEvent == 3)
- {
- if(CDBInterface::GetInstance()->IsOpen() && g_pCMachineMgrBase->IsOpenDevice())
- {
- if(CDataManager::GetInstance()->IsThreadRuning() == TRUE)
- return;
- // 注意,实际提交只适用没有大量数据囤积的情况;线程周期为100ms,所有处理必须在一个周期内完成;
- //m_pFKAttendImpl->ResumeAttendThread();// 线程挂起时,会占用FK接口函数;不能使用挂起,只能结束
- CDataManager::GetInstance()->StartRealTimeSubmitThread();
- }
- }
- CDialog::OnTimer(nIDEvent);
- }
- void ClyfzAttendanceDlg::OnDestroy()
- {
- if(g_pCMachineMgrBase)
- {
- g_pCMachineMgrBase->CloseDevice();
- delete g_pCMachineMgrBase;
- g_pCMachineMgrBase = NULL;
- }
- CDialog::OnDestroy();
- // TODO: 在此处添加消息处理程序代码
- }
- void ClyfzAttendanceDlg::OnClose()
- {
- ShowWindow(SW_HIDE);
- }
- //连接数据库
- void ClyfzAttendanceDlg::OnBnClickedDbConnect()
- {
- // TODO: 在此添加控件通知处理程序代码
- }
- void ClyfzAttendanceDlg::OnBnClickedClearMgrBtn()
- {
- // TODO: 在此添加控件通知处理程序代码
- if(!CDBInterface::GetInstance()->IsOpen())
- {
- MessageBox(_T("没有连接数据库"));
- return;
- }
- CClearMgrDlg dlg;
- if(dlg.DoModal() == IDCANCEL)
- return;
- CString strAccount = dlg.m_strAccount;
- CString strPSD = dlg.m_strPSD;
- if(strAccount == _T(""))
- {
- MessageBox(_T("请输入帐号"));
- return;
- }
- if(strPSD == _T(""))
- {
- MessageBox(_T("请输入密码"));
- return;
- }
- CString strFilter = _T("");
- CString strTableName = _T("");
- strFilter = _T("Account='") + strAccount + _T("' and PWD='") + strPSD + _T("'");
- CDBInterface::GetInstance()->GetTableNameByType(NAME_renyuan2, strTableName);
- if(CDBInterface::GetInstance()->GetSelectCount(&strTableName, &strFilter) <= 0)
- {
- LOG4C((LOG_NOTICE, "读取新数据库"));
- WCHAR szwBuffer[256] = {0};
- char szBuffer[256] = {0};
- WChar2Char(szBuffer, strPSD);
- CMD5 iMD5;
- iMD5.GenerateMD5((unsigned char*)szBuffer, strlen(szBuffer));
- string strss = iMD5.ToString();
- Char2WChar(szwBuffer, strss.c_str());
- strPSD = szwBuffer;
- strFilter = _T("Account='") + strAccount + _T("' and PWD='") + strPSD + _T("'");
- CDBInterface::GetInstance()->GetTableNameByType(NAME_renyuan2, strTableName);
- if(CDBInterface::GetInstance()->GetSelectCount(&strTableName, &strFilter) <= 0)
- {
- MessageBox(_T("帐号或密码不正确"));
- return;
- }
- }
- LOG4C((LOG_NOTICE, "纹机是否已连接"));
- if(g_pCMachineMgrBase->IsOpenDevice() == 0)
- {
- MessageBox(_T("请确保指纹机已连接"));
- return;
- }
- LOG4C((LOG_NOTICE, "清除管理员"));
- if(g_pCMachineMgrBase->BenumbAllManager() == 0)
- {
- MessageBox(_T("清除失败"));
- return;
- }
- MessageBox(_T("清除成功"));
- }
- /////////////////////////////////////////////////////////////////////////////
- /*
- 函数:ReadConnectInfo
- 描述:读取指纹机配置文件
- 参数:
- int& nType 返回机器类型
- 返回:
- */
- /////////////////////////////////////////////////////////////////////////////
- void ClyfzAttendanceDlg::ReadConnectInfo(DEVICECFG& cfg)
- {
- WCHAR szFile[MAX_PATH + 1] = {0};// = ".\\OTA710C.ini";
- wsprintf(szFile, _T("%s\\GC0307.ini"), g_ModulePath);
- // 1.公共信息;
- cfg.nMachineType = GetPrivateProfileInt(_T("CommonInfo"), _T("MachineType"), 0, szFile);
- cfg.nType = GetPrivateProfileInt(_T("CommonInfo"), _T("ConnectType"), 0, szFile);
- WCHAR wszMachineNumber[MAX_PATH + 1] = {0};
- GetPrivateProfileString(_T("CommonInfo"), _T("MachineNumber"), _T(""), wszMachineNumber, MAX_PATH, szFile);
- char szMachineNumber[MAX_PATH + 1] = {0};
- WChar2Char(szMachineNumber, wszMachineNumber);
- cfg.lMachineNumber = atol(szMachineNumber);
- WCHAR wszLicense[MAX_PATH + 1] = {0};
- GetPrivateProfileString(_T("CommonInfo"), _T("License"), _T(""), wszLicense, MAX_PATH, szFile);
- char szLicense[MAX_PATH + 1] = { 0 };
- WChar2Char(szLicense, wszLicense);
- cfg.lLicense = atol(szLicense);
- // 2.串口信息;
- cfg.lComPort = GetPrivateProfileInt(_T("SerialInfo"), _T("SerialPort"), 0, szFile);
- cfg.lBaudRate = GetPrivateProfileInt(_T("SerialInfo"), _T("Rate"), 0, szFile);
- cfg.lWaitDialTime = GetPrivateProfileInt(_T("SerialInfo"), _T("WaitDialTime"), 0, szFile);
- memset(cfg.szTelNumber, 0, sizeof(WCHAR)*(MAX_PATH));
- GetPrivateProfileString(_T("SerialInfo"), _T("TelNumber"), _T(""), cfg.szTelNumber, MAX_PATH, szFile);
- // 3.网络信息;
- memset(cfg.szIpAddress, 0, sizeof(WCHAR)*(MAX_PATH));
- GetPrivateProfileString(_T("NetInfo"), _T("IP"), _T(""), cfg.szIpAddress, MAX_PATH, szFile);
- cfg.lPort = GetPrivateProfileInt(_T("NetInfo"), _T("Port"), 0, szFile);
- cfg.lTimeOut = GetPrivateProfileInt(_T("NetInfo"), _T("TimeOut"), 0, szFile);
- cfg.lProtocolType = GetPrivateProfileInt(_T("NetInfo"), _T("ProtocolType"), 0, szFile);
- cfg.lNetPassword = GetPrivateProfileInt(_T("NetInfo"), _T("NetPassword"), 0, szFile);
- }
- /////////////////////////////////////////////////////////////////////////////
- /*
- 函数:InitDeviceData
- 描述:初始化设备数据
- 参数:
- int& nType 返回机器类型
- 返回:
- */
- /////////////////////////////////////////////////////////////////////////////
- int ClyfzAttendanceDlg::InitDeviceData()
- {
- if(g_pCMachineMgrBase)
- OnBnClickedBlack();
- if(g_pCMachineMgrBase == NULL)
- {
- switch(m_Devicecfg.nMachineType)
- {
- case 0: //奥芯
- g_pCMachineMgrBase = (CMachineMgrBase*)new CFpClockCtrlMgr((CWnd*)&m_FP_CLOCK);
- break;
- case 1: //鑫澳康
- g_pCMachineMgrBase = (CMachineMgrBase*)new CFKAttendCtrlMgr((CWnd*)&m_FKAttend);
- break;
- }
- return g_pCMachineMgrBase->InitMgrCfg(&m_Devicecfg);
- }
- return 1;
- }
|