// FQXBox_Log.cpp : implementation file // #include "stdafx.h" #include "corpsms.h" #include "FQXBox_Log.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CFQXBox_Log dialog #include "MainFrm.h" #include "ProcessSocket.h" #include "DLG_BAK.h" //#include "DLG_Find_Fail.h" //#include "DLG_Find_QXBOX_LOG.h" //#include "DLG_SMSLog_Export.h" CFQXBox_Log::CFQXBox_Log(CWnd* pParent /*=NULL*/) : CDialog(CFQXBox_Log::IDD, pParent) { //{{AFX_DATA_INIT(CFQXBox_Log) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_bInit = false; m_bRefresh = false; m_lRefreshStatusIndex = 0; m_bShowToday = true; m_bShowAllRecord = false; m_bNewDB = true; m_bShowProcess = false; m_lIconCount = 0; } void CFQXBox_Log::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CFQXBox_Log) DDX_Control(pDX, IDD_QXBOX_LOG_LIST, m_wndList); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CFQXBox_Log, CDialog) //{{AFX_MSG_MAP(CFQXBox_Log) ON_WM_SIZE() ON_NOTIFY(NM_RCLICK, IDD_QXBOX_LOG_LIST, OnRclickSmslogList) ON_NOTIFY(NM_DBLCLK, IDD_QXBOX_LOG_LIST, OnDblclkSmslogList) ON_NOTIFY(LVN_KEYDOWN, IDD_QXBOX_LOG_LIST, OnKeydownSmslogList) //}}AFX_MSG_MAP ON_COMMAND( MENU_LOG_DEL , On_User_Del ) ON_COMMAND( MENU_LOG_SEE , On_User_See ) ON_COMMAND( MENU_LOG_SEND , On_User_Send ) ON_COMMAND( MENU_LOG_EXPORT , On_User_Export ) ON_COMMAND( MENU_LOG_REFRESH , On_User_Refresh ) ON_COMMAND( MENU_LOG_REFSTATUS , On_User_RefStatus ) ON_COMMAND( MENU_LOG_FIND , On_User_Find ) ON_COMMAND( MENU_LOG_BAK , On_User_Bak ) ON_COMMAND( MENU_LOG_QUERYFAIL , On_User_QueryFail ) ON_COMMAND( MENU_LOG_SHOWALLRECORD , On_User_Refresh_All) ON_COMMAND( MENU_LOG_DOWNLOAD_SUCCESS , On_User_Download_Success) ON_COMMAND( MENU_LOG_DOWNLOAD_FAIL , On_User_Download_Fail) ON_WM_TIMER() END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CFQXBox_Log message handlers BOOL CFQXBox_Log::OnInitDialog() { CDialog::OnInitDialog(); //取得共用参数 //CMainFrame * pFrame = static_cast ((CMainFrame *)AfxGetMainWnd()); this->GetParent()->GetParentFrame(); m_pMainFrame = (CMainFrame *)this->GetParent()->GetParentFrame(); m_pSocket = &m_pMainFrame->m_Socket; m_AdoRS.SetAdoConnection( &m_pMainFrame->m_adoConnection ); //初始化List m_Image.Create(16,16,ILC_COLOR32|ILC_MASK,5,5); m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_MMSDF) ); m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_MMS_SEND) ); m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_MMSJS) ); m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_MMSSB) ); m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_SMS_UNREAD) ); m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_SMS_READ) ); m_wndList.SubClassWindow2(); m_wndList.SetHeadings(_T("序号,50; 状态,70;发送人,120;收信人,120;发信时间,130;方向,60;信息类型,80;总号码,80;成功号码,80; 内容,250;")); m_wndList.SetGridLines(true); m_wndList.SetImageList(&m_Image,LVSIL_SMALL); //m_wndList.SetBkColor( RGB(237,191,175) ); //m_wndList.SetTextBkColor( RGB(237,191,175) ); m_bInit = true; return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } BOOL CFQXBox_Log::ReHide() { ShowWindow( SW_HIDE ); return true; } BOOL CFQXBox_Log::ReShow(BOOL bRefresh) { USES_CONVERSION; m_AdoRS.Close(); if ( m_strBakDBName.GetLength()<=0 ) { m_adoConnection.Close(); m_AdoRS.SetAdoConnection( &m_pMainFrame->m_adoConnection ); } else { //解密码 char szPasswd[64]={0};strcpy(szPasswd , ACCESS_PASSWD ); char szKey[64]={0};strcpy( szKey , ACCESS_KEY ); char szNew2[64]={0};long lOut=sizeof(szNew2); TCHAR szNew[64]={0}; CDes des; des.Decrypt( szPasswd , strlen(szPasswd),szNew2,lOut,szKey,8); #ifdef UNICODE _tcscpy(szNew,A2W(szNew2)); #else _tcscpy(szNew,szNew2); #endif m_adoConnection.Close(); if ( !m_adoConnection.ConnectAccess(m_strBakDBName,szNew ) ) //连接数据库错误,需要重新创建 { MessageBox( _T("打开备份文件错误,请检查!") , _T("错误") , MB_ICONWARNING ); m_bShowToday = true; m_AdoRS.SetAdoConnection( &m_pMainFrame->m_adoConnection ); } else { m_bShowToday = false; m_AdoRS.SetAdoConnection( &m_adoConnection ); //设置连接 } } ShowWindow( SW_SHOW ); if ( bRefresh || !m_bRefresh || m_bNewDB ) { RefreshInfo(); m_bNewDB = false; } return true; } BOOL CFQXBox_Log::RefreshInfo() { m_wndList.ShowWindow( SW_HIDE ); //为了加快显示速度 m_bRefresh = true; m_wndList.DeleteAllItems(); TCHAR szSelect[256]={0}; CString strTop; if ( !m_bShowAllRecord && m_pMainFrame->m_Setup.lTopRecord>0 ) { strTop.Format(_T(" top %d "),m_pMainFrame->m_Setup.lTopRecord ); } if ( m_bShowToday ) { //仅查询当天的 SYSTEMTIME t;::GetLocalTime(&t); if ( m_pMainFrame->m_Setup.bSQLUse ) _stprintf( szSelect , _T("select %s * from QXLog where SubTime>='%04d%02d%02d' %s order by SubTime desc"),strTop,t.wYear,t.wMonth,t.wDay,m_strFindAdd ); //查询已发短信 else _stprintf( szSelect , _T("select %s * from QXLog where SubTime>=#%04d-%02d-%02d# %s order by SubTime desc"),strTop,t.wYear,t.wMonth,t.wDay,m_strFindAdd ); //查询已发短信 } else { if ( m_strFindAdd.GetLength()>0 ) _stprintf( szSelect , _T("select * from QXLog where 1 %s order by SubTime desc"),m_strFindAdd ); //查询接收记录 else _stprintf( szSelect , _T("select * from QXLog order by SubTime desc") ); //查询日志,显示全部的,不用只显示头部分 } BOOL b = m_AdoRS.Open( szSelect ); long lSendID=0; long lStatus=0; TCHAR szStatus[32]={0}; CString strSubTime; CString strMsgType; CString strMsgDataType; CString strMobileAll; CString strMobileSent; long lCount = m_AdoRS.GetRecordCount(); if ( !m_bShowAllRecord && m_pMainFrame->m_Setup.lTopRecord>0 && lCount>m_pMainFrame->m_Setup.lTopRecord ) { lCount = m_pMainFrame->m_Setup.lTopRecord; } m_bShowAllRecord = false; //显示完一次后,不用再全部显示 CString strSender; CString strRecver; CString strStatus; if ( b && lCount ) { CAdoQXLog adoSms; m_AdoRS.RecordBinding( adoSms ); m_AdoRS.MoveFirst(); long iItem = 0; while( !m_AdoRS.IsEOF() && iItem0 ) { if ( adoSms.m_MsgType ==4 ) strSender.Format(_T("%s(%s)") , adoSms.m_Sender,adoSms.m_Mobile); else strRecver = adoSms.m_Mobile; } else { strSender = adoSms.m_Sender; } m_wndList.InsertItemAndCol( iItem , _itot( lCount-iItem,szSelect,10) , szStatus,strSender,strRecver,strSubTime,strMsgType,strMsgDataType,strMobileAll,strMobileSent,adoSms.m_MsgData); m_wndList.SetItemData( iItem, adoSms.m_Rtx_GroupTaskID ); m_wndList.SetIconIndex( iItem , lIcon ); iItem++; memset(&adoSms,0,sizeof(adoSms)); m_AdoRS.MoveNext(); } } RefreshStatus(); m_wndList.ShowWindow( SW_SHOW ); //为了加快显示速度 if ( strTop.GetLength()>0 && lCount>=m_pMainFrame->m_Setup.lTopRecord) //显示显示“显示所有记录”的选项 { CMenu menu; menu.CreatePopupMenu(); menu.AppendMenu(MF_SEPARATOR ); menu.AppendMenu(MF_STRING , MENU_LOG_SHOWALLRECORD, _T(" 显示所有记录 ") ); menu.AppendMenu(MF_SEPARATOR ); CRect rect; GetWindowRect(&rect); //ClientToScreen(&rect); //显示菜单 POINT pt ; pt.x = rect.Width()/2; pt.y = rect.Height()/3; ClientToScreen(&pt); //menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL); menu.TrackPopupMenu(TPM_CENTERALIGN,pt.x,pt.y, this, NULL); menu.DestroyMenu(); } RecvQX(); //接收Q信 FlashIcon(true,false); //闪动图标 return true; } void CFQXBox_Log::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); if ( m_bInit ) { m_wndList.MoveWindow( 0 , 0 , cx,cy); } } long CFQXBox_Log::GetStatusText(long lStatus, TCHAR *pStatus) { _tcscpy( pStatus , _T("未知状态") ); long lIcon = 0; switch(lStatus) { case SEND_STATUS_SUB_OK: _tcscpy( pStatus , _T("提交成功") ); break; case SEND_STATUS_SUB_FILT: //_tcscpy( pStatus , _T("审核中") ); _tcscpy( pStatus , _T("提交成功") ); break; case SEND_STATUS_SUB_ERROR: case SEND_STATUS_SUB_USERNOSMS: case SEND_STATUS_SUB_CORPNOSMS: case SEND_STATUS_SUB_CORPOVRDATE: _tcscpy( pStatus , _T("提交失败") ); lIcon = 3; break; case SEND_STATUS_SUB_NUMNOSUP: _tcscpy( pStatus , _T("目标有误") ); lIcon = 3; break; case SEND_STATUS_FILT_ERROR: _tcscpy( pStatus , _T("审核失败") ); lIcon = 3; break; case SEND_STATUS_SEND_OK: _tcscpy( pStatus , _T("发送成功") ); lIcon = 1; break; case SEND_STATUS_SEND_ERROR: _tcscpy( pStatus , _T("发送失败") ); lIcon = 3; break; case SEND_STATUS_RECV_OK: _tcscpy( pStatus , _T("发送完成") ); lIcon = 2; break; case SEND_STATUS_RECV_ERROR: _tcscpy( pStatus , _T("发送失败") ); lIcon = 3; break; case 20: _tcscpy( pStatus , _T("正在上传") ); lIcon = 1; break; } return lIcon; } void CFQXBox_Log::OnRclickSmslogList(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; ShowRMenu(); } void CFQXBox_Log::ShowRMenu() { CMenu menu; menu.CreatePopupMenu(); BOOL bLock = false; long lItem = this->GetCurrentSelected(); BOOL bNoStatus = m_pMainFrame->m_Setup.bSDK & SDK_NOSTATUS ? true:false; if ( lItem >= 0 ) { menu.AppendMenu(MF_STRING , MENU_LOG_SEE , _T(" 查 看 ") ); //menu.AppendMenu(MF_STRING , MENU_LOG_SEND, _T(" 再次发送 ") ); menu.AppendMenu(MF_STRING , MENU_LOG_DEL , _T(" 删 除 ") ); menu.AppendMenu(MF_SEPARATOR ); menu.AppendMenu(MF_STRING , MENU_LOG_DOWNLOAD_SUCCESS , _T(" 下载成功号码") ); menu.AppendMenu(MF_STRING , MENU_LOG_DOWNLOAD_FAIL , _T(" 下载失败号码") ); } else { menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_LOG_SEE , _T(" 查 看 ") ); //menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_LOG_SEND, _T(" 再次发送 ") ); menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_LOG_DEL, _T(" 删 除 ") ); } /* menu.AppendMenu(MF_SEPARATOR ); //导出 menu.AppendMenu(MF_STRING , MENU_LOG_EXPORT, _T(" 导出... ") ); //刷新 menu.AppendMenu(MF_STRING , MENU_LOG_FIND , _T(" 查找... ") ); menu.AppendMenu(MF_SEPARATOR ); if ( lItem >= 0 ) menu.AppendMenu(MF_STRING , MENU_LOG_BAK , _T(" 备份... ") ); else menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED, MENU_LOG_BAK , _T(" 备份... ") ); menu.AppendMenu(MF_SEPARATOR ); BOOL bFindFail = m_pMainFrame->m_Setup.bSDK & SDK_ALLOWFINDFAIL ? true:false; if ( bFindFail && !bNoStatus ) { menu.AppendMenu(MF_STRING , MENU_LOG_QUERYFAIL, _T(" 查失败短信 ") ); menu.AppendMenu(MF_SEPARATOR ); } */ //刷新 menu.AppendMenu(MF_STRING , MENU_LOG_REFRESH, _T(" 刷 新 ") ); if ( !bNoStatus ) //如果无需要状态,没有刷新状态的菜单 { //刷新 menu.AppendMenu(MF_STRING , MENU_LOG_REFSTATUS, _T(" 刷新状态 ") ); } //显示菜单 POINT pt ; ::GetCursorPos( &pt ); //this->ClientToScreen( &pt); menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL); menu.DestroyMenu(); } long CFQXBox_Log::GetCurrentSelected() { POSITION pos = m_wndList.GetFirstSelectedItemPosition(); if ( pos ) { return m_wndList.GetNextSelectedItem(pos); } return -1; } void CFQXBox_Log::On_User_See2(long lItem,long lRtxGroupTaskID) { CString str; str.Format( _T("select * from QXlog where Rtx_GroupTaskID=%d ") , lRtxGroupTaskID ); if ( m_AdoRS.Open( str ) && !m_AdoRS.IsEOF() ) { long lQXLogID=0; long lMsgType=0; ANS_QXBox_Group_SeeData send={0}; send.lCorpID = this->m_pMainFrame->m_lCorpID; send.lUserID = this->m_pMainFrame->m_lUserID; m_AdoRS.GetCollect(_T("QXLogID") , lQXLogID); m_AdoRS.GetCollect(_T("Rtx_GroupID") , send.lRtx_GroupID); m_AdoRS.GetCollect(_T("GroupID") , send.szGroupID); m_AdoRS.GetCollect(_T("MsgType") , lMsgType); _tcscpy(send.szCreateUser,this->m_pMainFrame->m_pCurUser->szUser); if ( _ttol(send.szGroupID)<=0 ) m_AdoRS.GetCollect(_T("Mobile") , send.szMobile); if ( _ttol(send.szMobile)>0 ) m_AdoRS.GetCollect(_T("Sender") , send.szCreateUser); m_AdoRS.GetCollect(_T("GroupName") , send.szName); if ( lMsgType==4 ) { long lReader=1; m_AdoRS.GetCollect(_T("Reader") ,lReader ); //更改已读与未读 if ( lReader==0 ) //未读的,改为已读 { str.Format(_T("update QXLog set Reader=1 where QXLogID=%d") , lQXLogID ); m_AdoRS.Open( str ); } if ( lItem>=0 ) //接收的,置为已读 m_wndList.SetIconIndex( lItem , 5 ); //显示已读图标 } m_pMainFrame->m_pBaseView->m_dlgQXBoxGroup.On_DS_Chat_Add(send); } /* SMS_See sms = GetSms(lItem); sms.lType = SMS_SEE_TYPE_LOG; DLG_QXBOX_LOGSee dlg(this); dlg.SetParam(sms); dlg.DoModal(); */ } void CFQXBox_Log::On_User_See() { long lItem = GetCurrentSelected(); if ( lItem <0 ) return ; CString str; long lSendID = m_wndList.GetItemData( lItem ); On_User_See2(lItem , lSendID); //闪动图标 FlashIcon(true,false); } void CFQXBox_Log::On_User_Send() { long lItem = GetCurrentSelected(); if ( lItem <0 ) return ; /* if ( m_pMainFrame->m_pFuncView->On_User_List_Add() ) //新建列表 { //添加内容 m_pMainFrame->m_pFuncView->m_DLGSend.List_SetMsg( _T("\"%Memo%\"") ); //添加号码 long lCount = m_wndList.GetSelectedCount(); if ( lCount <= 0 ) return ; //分配数据 long lSize = sizeof(Send_User)*lCount; BYTE *pS = new BYTE[lSize]; memset( pS , 0 , lSize ); Send_User * pUser = (Send_User * )pS; TCHAR szSelect[128]={0}; POSITION pos = m_wndList.GetFirstSelectedItemPosition(); while ( pos ) { long lItem = m_wndList.GetNextSelectedItem( pos ); long lSendID = m_wndList.GetItemData( lItem ); if ( lSendID > 0 ) { _stprintf( szSelect , _T("select * from smslog where SendID=%d"), lSendID ); BOOL b = m_AdoRS.Open( szSelect ); if ( b && m_AdoRS.GetRecordCount() ) { m_AdoRS.MoveFirst(); m_AdoRS.GetCollect( _T("Recver") , pUser->szName); m_AdoRS.GetCollect( _T("RecvNum") , pUser->szMobile); m_AdoRS.GetCollect( _T("Msg") , pUser->szBZ); } } else { m_wndList.GetItemText(lItem,3,pUser->szMobile,sizeof(pUser->szMobile)); m_wndList.GetItemText(lItem,4,pUser->szBZ,sizeof(pUser->szBZ)); } pUser ++; } m_pMainFrame->m_pFuncView->On_User_List_AddUser(lCount,(Send_User*)pS); delete pS; } */ } void CFQXBox_Log::On_User_Del() { long lCount = m_wndList.GetSelectedCount(); long *lDel = new long[lCount+2]; POSITION pos = m_wndList.GetFirstSelectedItemPosition(); long i = 0; while(pos) { lDel[i]= m_wndList.GetNextSelectedItem(pos); i ++; } long lSendID = 0; TCHAR szSelect[128]; //倒转删除 m_wndList.ShowWindow( SW_HIDE ); //加快显示的速度 for ( i = lCount ; i>0 ; i-- ) { lSendID = m_wndList.GetItemData( lDel[i-1] ); _stprintf( szSelect , _T("delete from QXlog where Rtx_GroupTaskID=%d ") , lSendID ); BOOL b = m_AdoRS.Open( szSelect ); if ( b && m_AdoRS.GetRecordCount() ) { m_wndList.DeleteItem(lDel[i-1]); //从列表中删除 } } m_wndList.ShowWindow( SW_SHOW ); //加快显示的速度 delete lDel; } void CFQXBox_Log::On_User_Export() { /* //无需要状态的短信通所有都返回“发送成功”。 BOOL bNoStatus = m_pMainFrame->m_Setup.bSDK & SDK_NOSTATUS ? true:false; DLG_SMSLog_Export dlg(this); dlg.SetParam(&m_AdoRS,&m_wndList,bNoStatus); dlg.DoModal(); */ } void CFQXBox_Log::On_User_Refresh() { RefreshInfo(); } void CFQXBox_Log::On_User_QueryFail() { /* DLG_Find_Fail dlg(this); if ( dlg.DoModal() == IDOK ) { m_wndList.ShowWindow(SW_HIDE ); //加快显示速度 m_wndList.DeleteAllItems(); m_wndList.ShowWindow(SW_SHOW ); //加快显示速度 REQ_List * pList = new REQ_List; memset(pList , 0 , sizeof(REQ_List)); _tcscpy( pList->szMobile , _T("FAIL") ); dlg.m_tQBegin.GetAsSystemTime(pList->tBegin); dlg.m_tQEnd.GetAsSystemTime(pList->tEnd); pList->lCorpID = m_pMainFrame->m_lCorpID; pList->lMobileType = -1; pList->lMsgType = -1; pList->lMsgType = -1; pList->bJF = false; m_pMainFrame->SendFrame( SMSFUNC_LIST , (BYTE*)pList , sizeof(REQ_List) ); } */ } void CFQXBox_Log::On_User_Find() { /* CString strTemp; DLG_Find_QXBOX_LOG dlg(this); BOOL bNoStatus = m_pMainFrame->m_Setup.bSDK & SDK_NOSTATUS ? true:false; dlg.SetParam(!m_bShowToday , !bNoStatus ); if ( dlg.DoModal() == IDOK ) { m_strFindAdd = _T(""); if ( !m_bShowToday ) { strTemp.Format( _T(" AND SubTime>=#%04d-%02d-%02d# AND SubTime<=#%04d-%02d-%02d 23:59:59#"),dlg.m_TBegin.GetYear(),dlg.m_TBegin.GetMonth(),dlg.m_TBegin.GetDay(),dlg.m_TEnd.GetYear(),dlg.m_TEnd.GetMonth(),dlg.m_TEnd.GetDay()); m_strFindAdd = strTemp; } if ( dlg.m_lStatus>=0 ) { strTemp.Format( _T(" AND Status=%d"),dlg.m_lStatus ); m_strFindAdd += strTemp; } if ( dlg.m_strSendNum.GetLength()>0 ) { strTemp.Format( _T(" AND SendNum like '%%%s%%'"),dlg.m_strSendNum ); m_strFindAdd += strTemp; } if ( dlg.m_strRecvNum.GetLength()>0 ) { strTemp.Format( _T(" AND RecvNum like '%%%s%%'"),dlg.m_strRecvNum ); m_strFindAdd += strTemp; } if ( dlg.m_strMsg.GetLength()>0 ) { strTemp.Format( _T(" AND Msg like '%%%s%%'"),dlg.m_strMsg ); m_strFindAdd += strTemp; } On_User_Refresh(); m_strFindAdd = _T(""); //刷新后,查询结束 } */ } void CFQXBox_Log::On_User_Bak() { /* long lCount = m_wndList.GetSelectedCount(); DLG_BAK dlg(this); dlg.SetParam(lCount); if ( dlg.DoModal() == IDOK ) { //读入数据库 TCHAR szPath[512]={0}; TCHAR szBakPath[64]={0}; TCHAR szOldDB[512]={0}; TCHAR szNewDB[512]={0}; this->m_pMainFrame->GetCurrentPath( szPath ); _stprintf(szOldDB , _T("%s%s"),szPath,ACCESS_SOURCE); _stprintf(szBakPath,_T("Bak_%d_%s"),m_pMainFrame->m_lCorpID,m_pMainFrame->m_pCurUser->szUser); _tcscat(szPath,szBakPath); ::CreateDirectory(szPath,NULL); //不管有理没理,先创建再说 _stprintf(szNewDB , _T("%s\\QXBOX_LOG_%s.bak"),szPath,dlg.m_strTitle); if ( !CopyFile( szOldDB , szNewDB , false ) ) //copy文件失败 { MessageBox( _T("系统文件丢失1,请重新安装!") , _T("致命错误") , MB_ICONWARNING ); return ; } //打开新的备份数据库 CAdoConnection bakadoConnection; CAdoRecordSet bakAdoRS; //解密码 char szPasswd[64]={0};strcpy(szPasswd , ACCESS_PASSWD ); char szKey[64]={0};strcpy( szKey , ACCESS_KEY ); char szNew2[64]={0};long lOut=sizeof(szNew2); TCHAR szNew[64]={0}; CDes des; des.Decrypt( szPasswd , strlen(szPasswd),szNew2,lOut,szKey,8); #ifdef UNICODE _tcscpy(szNew , A2W(szNew2)); #else _tcscpy(szNew , szNew2); #endif if ( !bakadoConnection.ConnectAccess(szNewDB,szNew ) ) //连接数据库错误,需要重新创建 { MessageBox( _T("系统文件丢失2,请重新安装!") , _T("致命错误") , MB_ICONWARNING ); return; } bakAdoRS.SetAdoConnection( &bakadoConnection ); //设置连接 if ( !bakAdoRS.Open(_T("smslog"),adCmdTable) ) { MessageBox( _T("系统文件丢失3,请重新安装!") , _T("致命错误") , MB_ICONWARNING ); return; } long *lDel = new long[lCount+2]; int lDelCount=0; TCHAR szSelect[256]={0}; POSITION pos = m_wndList.GetFirstSelectedItemPosition(); while ( pos ) { long lItem = m_wndList.GetNextSelectedItem( pos ); long lSendID = m_wndList.GetItemData( lItem ); lDel[lDelCount]=lItem; if ( lSendID > 0 ) { _stprintf( szSelect , _T("select * from smslog where SendID=%d"), lSendID ); BOOL b = m_AdoRS.Open( szSelect ); if ( b && m_AdoRS.GetRecordCount() ) { CAdoUBoxLog adoSms; m_AdoRS.RecordBinding( adoSms ); m_AdoRS.MoveFirst(); //插入到另一个表 BOOL b = bakAdoRS.RecordBinding( adoSms ); b = bakAdoRS.AddNew(adoSms); b = bakAdoRS.Update(); } } lDelCount ++; } //倒转删除 m_wndList.ShowWindow( SW_HIDE ); //加快显示的速度 for ( int i=lDelCount-1 ; i>=0 ; i-- ) { long lSendID = m_wndList.GetItemData( lDel[i] ); _stprintf( szSelect , _T("delete from smslog where SendID=%d ") , lSendID ); BOOL b = m_AdoRS.Open( szSelect ); if ( b && m_AdoRS.GetRecordCount() ) { m_wndList.DeleteItem(lDel[i]); //从列表中删除 } } m_wndList.ShowWindow( SW_SHOW ); //加快显示的速度 delete lDel; //在树中添加 CString strName; strName.Format( _T("备份_%s") , dlg.m_strTitle ); m_pMainFrame->m_pFuncView->AddBak_QXBOX_LOG(strName); } */ } void CFQXBox_Log::On_User_Download_Success() { On_User_Download(0); } void CFQXBox_Log::On_User_Download_Fail() { On_User_Download(1); } void CFQXBox_Log::On_User_Download(long lQueryType) { long lItem = GetCurrentSelected(); if ( lItem <0 ) return ; CString strDefFileName=_T("Success.txt"); if ( lQueryType==1 ) strDefFileName=_T("Fail.txt"); #define FILE_FILTER_TEXT \ TEXT("txt文本文件 (*.txt)\0*.txt\0")\ TEXT("Excel csv 文件 (*.csv)\0*.csv\0")\ TEXT("所有文件 (*.*)\0*.*;\0\0") TCHAR szFile[ 256 ]; TCHAR szFileB[ 256 ]; *szFileB = NULL; _stprintf( szFile , strDefFileName ); OPENFILENAME sOpen; sOpen.lStructSize = sizeof( sOpen ); sOpen.hwndOwner = this->m_hWnd ; sOpen.Flags = OFN_EXPLORER|OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY; sOpen.lpstrFilter = FILE_FILTER_TEXT; sOpen.lpstrDefExt = _T("txt"); sOpen.lpstrCustomFilter = NULL; sOpen.nMaxCustFilter = 0; sOpen.lpstrFile = szFile; sOpen.nMaxFile = sizeof( szFile ); sOpen.lpstrFileTitle = szFileB; sOpen.nMaxFileTitle = sizeof( szFileB ); sOpen.lpstrInitialDir = NULL; sOpen.lpstrTitle = _T("选择保存的文件名"); if ( !::GetSaveFileName( &sOpen ) ) { return ; } m_strExportName = sOpen.lpstrFile; REQ_QXBox_Group_SendData sms = GetSendData(lItem); if ( sms.lRtx_GroupID>0 ) { REQ_QqtLogMobile * pMobile = new REQ_QqtLogMobile; memset(pMobile , 0 , sizeof(REQ_QqtLogMobile)); pMobile->lCorpID = m_pMainFrame->m_lCorpID; pMobile->lUserID = m_pMainFrame->m_lUserID; pMobile->lRtx_GroupID = sms.lRtx_GroupID; pMobile->lRtx_GroupTaskID = sms.lRtx_GroupTaskID; pMobile->lType = lQueryType; m_pMainFrame->SendFrame(SMSFUNC_QQTLOGMOBILE,(BYTE*)pMobile , sizeof(REQ_QqtLogMobile)); m_bShowProcess = true; m_DlgProcess.SetProcessTitle(_T("正在取号码...")); if ( m_DlgProcess.DoModal() != IDOK ) //显示进度栏 { //取资料不成功 return ; } m_bShowProcess = false; } } void CFQXBox_Log::On_User_RefStatus() { RefreshStatus(); } void CFQXBox_Log::On_User_Refresh_All() { m_bShowAllRecord = true; On_User_Refresh(); } void CFQXBox_Log::RefreshStatus(BOOL bBegin) { BOOL bNoStatus = m_pMainFrame->m_Setup.bSDK & SDK_NOSTATUS ? true:false; if ( bNoStatus ) //如果无需要状态,不用刷新状态 return ; //第一步,查找状态为未固定的短信 long lCount = m_wndList.GetItemCount(); long * pSendID= new long[STATUS_MAX_QUERY*3+100]; long lCount2=0; if ( bBegin ) m_lRefreshStatusIndex = 0; else m_lRefreshStatusIndex ++; for ( int i=m_lRefreshStatusIndex*STATUS_MAX_QUERY;i= STATUS_MAX_QUERY*3 ) //超过1000条了 break; } lCount = lCount2/3; //取得需要取状态的个数 if ( lCount > 0 ) { long lSize = sizeof(REQ_QqtStatus)+sizeof(ANS_QqtStatus_Data2)*lCount; BYTE * pData = new BYTE[lSize];memset(pData,0,lSize); REQ_QqtStatus * pStatus = (REQ_QqtStatus *)pData; ANS_QqtStatus_Data2 * pStatusData = (ANS_QqtStatus_Data2 *)(pData+sizeof(REQ_QqtStatus)); pStatus->lCorpID = m_pMainFrame->m_lCorpID; pStatus->lCount = lCount; for ( i=0;ilItemID = pSendID[i*3]; pStatusData->lRtx_GroupTaskID = pSendID[i*3+1]; pStatusData->lStatus = pSendID[i*3+2]; pStatusData++; } m_pMainFrame->SendFrame( SMSFUNC_QQTSTATUS , pData , lSize ); } delete pSendID; } long CFQXBox_Log::GetItemStatus(long iItem) { TCHAR szStatus[16]={0}; TCHAR szTime[32]={0}; m_wndList.GetItemText( iItem , 1 , szStatus , sizeof(szStatus) ); m_wndList.GetItemText( iItem , 4 , szTime ,sizeof(szTime)); szTime[4]=0; szTime[7]=0; szTime[10]=0; long lYear=_ttol(szTime); long lMon =_ttol(szTime+5); long lDay =_ttol(szTime+8); CTime t1(lYear,lMon,lDay,0,0,0); CTime t2 = CTime::GetCurrentTime(); CTime t3 = t1 + CTimeSpan( 10, 0, 0, 0 ); if ( t3 < t2 ) //2日前的信息,跳过 { return SEND_STATUS_UNKNOW; } if ( !_tcscmp( szStatus , _T("提交成功") ) ) return SEND_STATUS_SUB_OK; if ( !_tcscmp( szStatus , _T("审核中") ) ) return SEND_STATUS_SUB_FILT; if ( !_tcscmp( szStatus , _T("提交失败") ) ) return SEND_STATUS_SUB_ERROR; if ( !_tcscmp( szStatus , _T("目标有误") ) ) return SEND_STATUS_SUB_NUMNOSUP; if ( !_tcscmp( szStatus , _T("审核失败") ) ) return SEND_STATUS_FILT_ERROR; if ( !_tcscmp( szStatus , _T("发送成功") ) ) return SEND_STATUS_SEND_OK; if ( !_tcscmp( szStatus , _T("发送失败") ) ) return SEND_STATUS_SEND_ERROR; if ( !_tcscmp( szStatus , _T("接收成功") ) ) return SEND_STATUS_RECV_OK; if ( !_tcscmp( szStatus , _T("发送完成") ) ) return SEND_STATUS_RECV_OK; if ( !_tcscmp( szStatus , _T("接收失败") ) ) return SEND_STATUS_RECV_ERROR; if ( !_tcscmp( szStatus , _T("正在上传") ) ) return 20; // if ( !_tcscmp( szStatus , _T("未知状态") ) ) return SEND_STATUS_UNKNOW; } BOOL CFQXBox_Log::ProcessSocket(Socket_Head_Add *pHead, BYTE *pFrame) { CString str; //修改公用地址本 if (pHead->lFuncType == SMSFUNC_QQTSTATUS) { ANS_QqtStatus * pStatus = (ANS_QqtStatus *)pFrame; ANS_QqtStatus_Data * pData = (ANS_QqtStatus_Data *)(pFrame+sizeof(ANS_QqtStatus)); for ( int i = 0;ilCount;i++) { if ( pData->lStatus != -1 ) //如果其值为-1,证明状态没变,所以不必更改 { //COleDateTime tSend(pData->tSendTime ); //COleDateTime tRecv(pData->tRecvTime ); //将结果先入数据库 TCHAR szBuf[32]; TCHAR szSelect[128]={0}; CString str; str.Format(_T("update QXLog set Status=%d,MobileAll=%d,MobileSent=%d where Rtx_GroupTaskID=%d") , pData->lStatus,pData->lMobileAll,pData->lMobileSent,pData->lRtx_GroupTaskID); m_AdoRS.Open(str); //更新显示 if ( pData->lItemID>=0 && pData->lItemIDlItemID); if ( lSendID == pData->lRtx_GroupTaskID ) //更新显示内容 { long lIcon = GetStatusText( pData->lStatus , szBuf ); m_wndList.SetItemText(pData->lItemID,1,szBuf); m_wndList.SetIconIndex( pData->lItemID , lIcon ); CString str; str.Format(_T("%d") , pData->lMobileAll); m_wndList.SetItemText(pData->lItemID,7,str); str.Format(_T("%d") , pData->lMobileSent); m_wndList.SetItemText(pData->lItemID,8,str); } } } pData ++; //继续处理下一条 } RefreshStatus( false ); //查询下1000条的状态 return true; } if (pHead->lFuncType == SMSFUNC_QQTLOGMOBILE) { if ( !m_bShowProcess ) return true; ANS_QqtLogMobile * pMobile = (ANS_QqtLogMobile *)pFrame; ANS_QqtLogMobile_Data * pData = (ANS_QqtLogMobile_Data *)(pFrame+sizeof(ANS_QqtLogMobile)); if ( pMobile->lPageCount==1 ) //先删除旧文件 ::DeleteFile(m_strExportName); //打开文件 HANDLE hFile = INVALID_HANDLE_VALUE; for ( int i=0; i<20 ; i++ ) { hFile = CreateFile( this->m_strExportName , GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL ); if ( hFile != INVALID_HANDLE_VALUE ) break; Sleep(50); } if ( hFile == INVALID_HANDLE_VALUE ) { m_DlgProcess.SetProcess( 100 ,100 ); //结束进度条 str.Format(_T("打开文件%s失败,请检查!") , m_strExportName); MessageBox(str,_T("错误") , MB_ICONWARNING ); return true; } SetFilePointer( hFile, 0 , NULL , FILE_END ); str = m_strExportName; str.MakeLower(); BOOL bWriteName = str.Find(_T("csv"))>=0; CStringA strA; for ( int i = 0;ilCount;i++) { CString strb; if ( bWriteName ) { strb = pData->szName; strb = strb + CString(_T(",")); } strb = strb + CString(pData->szMobile); strb = strb + CString(_T("\r\n")); #ifdef _UNICODE strA += CW2A(strb); #else strA += strb; #endif pData ++; //继续处理下一条 } DWORD len=0; WriteFile( hFile ,strA.GetBuffer(),strA.GetLength(),&len,NULL ); CloseHandle(hFile); m_DlgProcess.SetProcess( pMobile->lPageAll , pMobile->lPageCount ); return true; } if ( pHead->lFuncType == SMSFUNC_QQTRECV ) //收到企Q通 { ANS_QQTRecv * pRecv = (ANS_QQTRecv *)pFrame; BYTE * pData = (BYTE *)(pFrame+sizeof(ANS_QQTRecv)); long lRecvCount=0; for ( int i = 0;ilCount;i++) { REQ_QXBox_Group_SendData * pSendData = (REQ_QXBox_Group_SendData *)pData; pData += sizeof(REQ_QXBox_Group_SendData); //TCHAR * pMsgData = (TCHAR*)pData; if ( pSendData->lRtx_GroupTaskID>0 ) { //这里需要这发送日志写入数据库 CString strTimer=_T("NULL"); CString strSubTime=_T("NULL"); if ( COleDateTime(pSendData->tTimer).GetStatus() == COleDateTime::valid) { strTimer.Format(_T("#%04d-%02d-%02d %02d:%02d:%02d#") , pSendData->tTimer.wYear,pSendData->tTimer.wMonth,pSendData->tTimer.wDay,pSendData->tTimer.wHour,pSendData->tTimer.wMinute,pSendData->tTimer.wSecond); } if ( COleDateTime(pSendData->tSubTime).GetStatus() == COleDateTime::valid) { strSubTime.Format(_T("#%04d-%02d-%02d %02d:%02d:%02d#") , pSendData->tSubTime.wYear,pSendData->tSubTime.wMonth,pSendData->tSubTime.wDay,pSendData->tSubTime.wHour,pSendData->tSubTime.wMinute,pSendData->tSubTime.wSecond); } CString strDataMsg = (TCHAR*)pData; BOOL bRead = m_pMainFrame->m_pBaseView->m_dlgQXBoxGroup.On_DS_Chat_Show(*pSendData,strDataMsg); CString str; str.Format(_T("insert into QXLog (Rtx_GroupTaskID,Sender,Mobile,Rtx_GroupID,GroupID,GroupName,Status,Timer,MsgType,MsgDataType,MobileAll,MobileSent,SubTime,MsgData,Reader) values (%d,'%s','%s',%d,'%s','%s',%d,%s,%d,%d,%d,%d,%s,'%s',%d)"), pSendData->lRtx_GroupTaskID, SqlStr(pSendData->szSender), SqlStr(pSendData->szMobile), pSendData->lRtx_GroupID, pSendData->szGroupID, SqlStr(pSendData->szGroupName), pSendData->lStatus, strTimer, 4, //接收 pSendData->lMsgDataType, pSendData->lMobileAll, pSendData->lMobileSent, strSubTime, SqlStr(strDataMsg), bRead); m_AdoRS.Open(str); if ( !bRead ) { FlashIcon(false,true); //闪动图标 } lRecvCount ++; } pData += pSendData->lImageLen; } if (lRecvCount>0 ) //再继续收下一条 { this->RefreshInfo(); } return true; } return false; } REQ_QXBox_Group_SendData CFQXBox_Log::GetSendData(long lItem) { REQ_QXBox_Group_SendData sms={0}; long lSendID = m_wndList.GetItemData(lItem); CString strSelect; COleDateTime t; strSelect.Format( _T("select * from QXLog where RTX_GroupTaskID=%d") , lSendID ); if ( m_AdoRS.Open( strSelect ) && !m_AdoRS.IsEOF() ) { m_AdoRS.GetCollect( _T("Rtx_GroupTaskID") , sms.lRtx_GroupTaskID ); m_AdoRS.GetCollect( _T("Status") , sms.lStatus ); m_AdoRS.GetCollect( _T("Rtx_GroupID") , sms.lRtx_GroupID ); } return sms; } void CFQXBox_Log::OnDblclkSmslogList(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; On_User_See(); } void CFQXBox_Log::OnKeydownSmslogList(NMHDR* pNMHDR, LRESULT* pResult) { LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR; *pResult = 0; if ( pLVKeyDow->wVKey == VK_DELETE ) { On_User_Del(); } if ( pLVKeyDow->wVKey == VK_SPACE) { On_User_See(); } if ( pLVKeyDow->wVKey == 'S' || pLVKeyDow->wVKey == 's') { On_User_Send(); } if ( pLVKeyDow->wVKey == 'R' || pLVKeyDow->wVKey == 'r') { On_User_Refresh(); } if ( pLVKeyDow->wVKey == 'T' || pLVKeyDow->wVKey == 't') { On_User_RefStatus(); } if ( pLVKeyDow->wVKey == 'F' || pLVKeyDow->wVKey == 'f') { On_User_Find(); } if ( pLVKeyDow->wVKey == 'B' || pLVKeyDow->wVKey == 'b') { On_User_Bak(); } if ( pLVKeyDow->wVKey == 'A' || pLVKeyDow->wVKey == 'a') { m_wndList.SelectAllItems(); } } long CFQXBox_Log::GetStatusText2(long lStatus, TCHAR *pStatus) { _tcscpy( pStatus , _T("未知状态") ); long lIcon = 0; switch(lStatus) { case SEND_STATUS_SUB_OK: _tcscpy( pStatus , _T("提交成功") ); break; case SEND_STATUS_SUB_FILT: //_tcscpy( pStatus , _T("审核中") ); _tcscpy( pStatus , _T("提交成功") ); break; case SEND_STATUS_SUB_ERROR: case SEND_STATUS_SUB_USERNOSMS: case SEND_STATUS_SUB_CORPNOSMS: case SEND_STATUS_SUB_CORPOVRDATE: _tcscpy( pStatus , _T("提交失败") ); lIcon = 3; break; case SEND_STATUS_SUB_NUMNOSUP: _tcscpy( pStatus , _T("目标有误") ); lIcon = 3; break; case SEND_STATUS_FILT_ERROR: _tcscpy( pStatus , _T("审核失败") ); lIcon = 3; break; case SEND_STATUS_SEND_OK: _tcscpy( pStatus , _T("发送成功") ); lIcon = 1; break; case SEND_STATUS_SEND_ERROR: _tcscpy( pStatus , _T("发送失败") ); lIcon = 3; break; case SEND_STATUS_RECV_OK: _tcscpy( pStatus , _T("发送完成") ); lIcon = 1; break; case SEND_STATUS_RECV_ERROR: _tcscpy( pStatus , _T("发送失败") ); lIcon = 3; break; } return lIcon; } void CFQXBox_Log::OnOK() { //CDialog::OnOK(); } void CFQXBox_Log::OnCancel() { //CDialog::OnCancel(); } void CFQXBox_Log::SetToday(BOOL bToday) { if ( m_bShowToday != bToday ) { m_bShowToday = bToday; m_bRefresh = false; } } void CFQXBox_Log::SetBakDBName(CString strDBName) { m_strBakDBName = strDBName; m_bNewDB = true; } void CFQXBox_Log::RecvQX() { REQ_QQTRecv * pRecv = new REQ_QQTRecv; pRecv->lCorpID = m_pMainFrame->m_lCorpID; pRecv->lUserID = m_pMainFrame->m_lUserID; m_pMainFrame->SendFrame( SMSFUNC_QQTRECV , (BYTE*)pRecv , sizeof(REQ_QQTRecv)); } BOOL CFQXBox_Log::FlashIcon(BOOL bCheck, BOOL bFlash) { if ( bCheck ) { CString str; str=_T("select top 1 * from QXLog where Reader=0 "); //查询未读的短信 if ( m_AdoRS.Open(str) && !m_AdoRS.IsEOF() ) { bFlash = true; } else { bFlash = false; } m_AdoRS.Close(); } if ( bFlash ) { m_lIconCount = 1; SetTimer(3 , 400 , NULL); } else { m_lIconCount = -1; } return bFlash; } BOOL CFQXBox_Log::ShowNoReaderMsg() { CString str; str=_T("select top 1 * from QXLog where Reader=0 order by SubTime"); //查询未读的短信 if ( m_AdoRS.Open(str) && !m_AdoRS.IsEOF() ) { long lRtx_GroupTaskID=0; m_AdoRS.GetCollect( _T("Rtx_GroupTaskID") , lRtx_GroupTaskID ); m_AdoRS.Close(); On_User_See2(-1,lRtx_GroupTaskID); return true; } FlashIcon(false,false); //不闪动图标了。 return false; } void CFQXBox_Log::OnTimer(UINT_PTR nIDEvent) { CDialog::OnTimer(nIDEvent); if ( nIDEvent == 3 ) { KillTimer(nIDEvent); //将图标加入到任务栏 CString strName=m_pMainFrame->GetSoftSName(); NOTIFYICONDATA niData; if ( m_lIconCount <= 0 ) { niData.hIcon = AfxGetApp()->LoadIcon( IDR_MAINFRAME ); _stprintf( niData.szTip,strName ); } else { m_lIconCount ++; if ( m_lIconCount>888888 ) m_lIconCount = 1; if ( m_lIconCount%2 == 0 ) niData.hIcon = AfxGetApp()->LoadIcon( IDR_MAINFRAME ); else niData.hIcon = AfxGetApp()->LoadIcon( IDI_NULL ); strName += _T("-收到新企Q通"); _stprintf( niData.szTip,strName ); } niData.cbSize = sizeof( NOTIFYICONDATA ); niData.hWnd = this->m_pMainFrame->m_hWnd; niData.uID = 125; niData.uFlags = NIF_ICON|NIF_TIP; niData.uCallbackMessage = SHELL_ICON_MESS; Shell_NotifyIcon( NIM_MODIFY,&niData ); if ( m_lIconCount>0 ) SetTimer(3 , 400 , NULL ); return ; } }