1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291 |
- // 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;
- }
|