// FMmsLog.cpp : implementation file // #include "stdafx.h" #include "corpsms.h" #include "FMmsLog.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CFMmsLog dialog #include "MainFrm.h" #include "ProcessSocket.h" #include "DLG_BAK.h" //#include "DLG_Find_Fail.h" //#include "DLG_Find_MmsLog.h" //#include "DLG_SMSLog_Export.h" CFMmsLog::CFMmsLog(CWnd* pParent /*=NULL*/) : CDialog(CFMmsLog::IDD, pParent) { //{{AFX_DATA_INIT(CFMmsLog) // 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; } void CFMmsLog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CFMmsLog) DDX_Control(pDX, IDC_MMSLOG_LIST, m_wndList); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CFMmsLog, CDialog) //{{AFX_MSG_MAP(CFMmsLog) ON_WM_SIZE() ON_NOTIFY(NM_RCLICK, IDC_MMSLOG_LIST, OnRclickSmslogList) ON_NOTIFY(NM_DBLCLK, IDC_MMSLOG_LIST, OnDblclkSmslogList) ON_NOTIFY(LVN_KEYDOWN, IDC_MMSLOG_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) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CFMmsLog message handlers BOOL CFMmsLog::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_wndList.SubClassWindow2(); #ifdef STATUS_ENABLE_MMS_RECV m_wndList.SetHeadings(_T("序号,50; 状态,70;发信号码,100;收信号码,150;发信时间,130;收信时间,130;彩信大小,100; 彩信标题,200;")); #else m_wndList.SetHeadings(_T("序号,50; 状态,70;发信号码,100;收信号码,150;发信时间,130;彩信大小,100; 彩信标题,200;")); #endif 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 CFMmsLog::ReHide() { ShowWindow( SW_HIDE ); return true; } BOOL CFMmsLog::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 CFMmsLog::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 mmslog 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 mmslog 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 mmslog where 1 %s order by SubTime desc"),m_strFindAdd ); //查询接收记录 else _stprintf( szSelect , _T("select * from mmslog order by SubTime desc") ); //查询日志,显示全部的,不用只显示头部分 } BOOL b = m_AdoRS.Open( szSelect ); long lSendID=0; long lStatus=0; TCHAR szStatus[24]={0}; TCHAR szSendNum[24]={0}; TCHAR szRecver[64]={0}; TCHAR szRecvNum[64]={0}; TCHAR szTitle[64]={0}; long lmmSize=0; COleDateTime tSub; COleDateTime tRecv; CString strSubTime; CString strRecvTime; CString strSize; 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; //显示完一次后,不用再全部显示 if ( b && lCount ) { CAdoMmsLog adoSms; m_AdoRS.RecordBinding( adoSms ); m_AdoRS.MoveFirst(); long iItem = 0; while( !m_AdoRS.IsEOF() && iItem0 ) { _tcscat( szRecvNum , "-" ); _tcscat( szRecvNum , szRecver ); } m_wndList.SetItemText(iItem,3,szRecvNum); m_wndList.SetItemText(iItem,4,szMsg); if ( tSub.GetStatus() == COleDateTime::valid ) { _stprintf( szMsg , "%04d.%02d.%02d %02d:%02d" , tSub.GetYear(),tSub.GetMonth(),tSub.GetDay(),tSub.GetHour(),tSub.GetMinute() ); m_wndList.SetItemText(iItem,5,szMsg); } #ifdef STATUS_ENABLE_MMS_RECV if ( tRecv.GetStatus() == COleDateTime::valid ) { _stprintf( szMsg , "%04d.%02d.%02d %02d:%02d" , tRecv.GetYear(),tRecv.GetMonth(),tRecv.GetDay(),tRecv.GetHour(),tRecv.GetMinute() ); m_wndList.SetItemText(iItem,6,szMsg); } #endif */ #ifdef STATUS_ENABLE_MMS_RECV long lIcon = GetStatusText( adoSms.m_Status , szStatus ); #else long lIcon = GetStatusText2( adoSms.m_Status , szStatus ); #endif //无需要状态的短信通所有都返回“发送成功”。 BOOL bNoStatus = m_pMainFrame->m_Setup.bSDK & SDK_NOSTATUS ? true:false; if ( bNoStatus ) { _tcscpy( szStatus , _T("发送成功") ); lIcon = 1; } _tcscpy(szRecvNum,adoSms.m_RecvNum); if ( m_pMainFrame->GetUserPurview_HideNum() ) { szRecvNum[4]='*'; szRecvNum[5]='*'; szRecvNum[6]='*'; szRecvNum[7]='*'; } if ( _tcslen(adoSms.m_Recver)>0 ) { _tcscat( szRecvNum , _T("-") ); _tcscat( szRecvNum , adoSms.m_Recver ); } if ( adoSms.m_SubTime.GetStatus() == COleDateTime::valid ) { strSubTime.Format(_T("%04d.%02d.%02d %02d:%02d") , adoSms.m_SubTime.GetYear(),adoSms.m_SubTime.GetMonth(),adoSms.m_SubTime.GetDay(),adoSms.m_SubTime.GetHour(),adoSms.m_SubTime.GetMinute() ); } if ( adoSms.m_RecvTime.GetStatus() == COleDateTime::valid ) { strRecvTime.Format(_T("%04d.%02d.%02d %02d:%02d") , adoSms.m_RecvTime.GetYear(),adoSms.m_RecvTime.GetMonth(),adoSms.m_RecvTime.GetDay(),adoSms.m_RecvTime.GetHour(),adoSms.m_RecvTime.GetMinute() ); } strSize.Format(_T("%6.1fk") , (double)adoSms.m_mmSize/1024.0f ); #ifdef STATUS_ENABLE_MMS_RECV m_wndList.InsertItemAndCol( iItem , _itot( lCount-iItem,szSelect,10) , szStatus,adoSms.m_SendNum,szRecvNum,strSubTime,strRecvTime,strSize,adoSms.m_Title); #else m_wndList.InsertItemAndCol( iItem , _itot( lCount-iItem,szSelect,10) , szStatus,adoSms.m_SendNum,szRecvNum,strSubTime,strSize,adoSms.m_Title); #endif m_wndList.SetItemData( iItem, adoSms.m_SendID ); 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(); } return true; } void CFMmsLog::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); if ( m_bInit ) { m_wndList.MoveWindow( 0 , 0 , cx,cy); } } long CFMmsLog::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; } return lIcon; } void CFMmsLog::OnRclickSmslogList(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; ShowRMenu(); } void CFMmsLog::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(" 删 除 ") ); } 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 CFMmsLog::GetCurrentSelected() { POSITION pos = m_wndList.GetFirstSelectedItemPosition(); if ( pos ) { return m_wndList.GetNextSelectedItem(pos); } return -1; } void CFMmsLog::On_User_See() { long lItem = GetCurrentSelected(); if ( lItem <0 ) return ; /* SMS_See sms = GetSms(lItem); sms.lType = SMS_SEE_TYPE_LOG; DLG_MmsLogSee dlg(this); dlg.SetParam(sms); dlg.DoModal(); */ } void CFMmsLog::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 CFMmsLog::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 mmslog where SendID=%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 CFMmsLog::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 CFMmsLog::On_User_Refresh() { RefreshInfo(); } void CFMmsLog::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 CFMmsLog::On_User_Find() { /* CString strTemp; DLG_Find_MmsLog 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 CFMmsLog::On_User_Bak() { USES_CONVERSION; /* 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\\MmsLog_%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_MmsLog(strName); } */ } void CFMmsLog::On_User_RefStatus() { RefreshStatus(); } void CFMmsLog::On_User_Refresh_All() { m_bShowAllRecord = true; On_User_Refresh(); } void CFMmsLog::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_MmsStatus)+sizeof(ANS_MmsStatus_Data2)*lCount; BYTE * pData = new BYTE[lSize];memset(pData,0,lSize); REQ_MmsStatus * pStatus = (REQ_MmsStatus *)pData; ANS_MmsStatus_Data2 * pStatusData = (ANS_MmsStatus_Data2 *)(pData+sizeof(REQ_MmsStatus)); pStatus->lCorpID = m_pMainFrame->m_lCorpID; pStatus->lCount = lCount; for ( i=0;ilItemID = pSendID[i*3]; pStatusData->lSendID = pSendID[i*3+1]; pStatusData->lStatus = pSendID[i*3+2]; pStatusData++; } m_pMainFrame->SendFrame( SMSFUNC_MMSSTATUS , pData , lSize ); } delete pSendID; } long CFMmsLog::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_ERROR; // if ( !_tcscmp( szStatus , _T("未知状态") ) ) return SEND_STATUS_UNKNOW; } BOOL CFMmsLog::ProcessSocket(Socket_Head_Add *pHead, BYTE *pFrame) { //修改公用地址本 if (pHead->lFuncType == SMSFUNC_MMSSTATUS) { ANS_MmsStatus * pStatus = (ANS_MmsStatus *)pFrame; ANS_MmsStatus_Data * pData = (ANS_MmsStatus_Data *)(pFrame+sizeof(ANS_MmsStatus)); 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; _stprintf( szSelect , _T("select * from Mmslog where SendID=%d") , pData->lSendID ); if ( m_AdoRS.Open(szSelect) && !m_AdoRS.IsEOF() ) { m_AdoRS.PutCollect( _T("Status") , pData->lStatus ); m_AdoRS.PutCollect( _T("StatusMsg") , pData->szStatusMsg ); m_AdoRS.PutCollect( _T("SendTime") , tSend ); m_AdoRS.PutCollect( _T("RecvTime") , tRecv ); m_AdoRS.Update(); m_AdoRS.Close(); } //更新显示 if ( pData->lItemID>=0 && pData->lItemIDlItemID); if ( lSendID == pData->lSendID ) //更新显示内容 { long lIcon = GetStatusText( pData->lStatus , szBuf ); m_wndList.SetItemText(pData->lItemID,1,szBuf); m_wndList.SetIconIndex( pData->lItemID , lIcon ); #ifdef STATUS_ENABLE_MMS_RECV if ( tRecv.GetStatus() == COleDateTime::valid ) { _stprintf( szBuf , _T("%04d.%02d.%02d %02d:%02d") , tRecv.GetYear(),tRecv.GetMonth(),tRecv.GetDay(),tRecv.GetHour(),tRecv.GetMinute() ); m_wndList.SetItemText(pData->lItemID,5,szBuf); } #endif } } } pData ++; //继续处理下一条 } RefreshStatus( false ); //查询下1000条的状态 return true; } return false; } SMS_See CFMmsLog::GetSms(long lItem) { SMS_See sms={0}; long lSendID = m_wndList.GetItemData(lItem); CString strSelect; long lStatus; TCHAR szSender[16]={0}; TCHAR szRecver[16]={0}; COleDateTime t; strSelect.Format( _T("select * from smslog where SendID=%d") , lSendID ); if ( m_AdoRS.Open( strSelect ) && m_AdoRS.GetRecordCount() ) { m_AdoRS.MoveFirst(); m_AdoRS.GetCollect( _T("Status") , lStatus ); m_AdoRS.GetCollect( _T("SendNum") , sms.szSender ); m_AdoRS.GetCollect( _T("Recver") , szRecver ); m_AdoRS.GetCollect( _T("RecvNum") , sms.szRecver ); m_AdoRS.GetCollect( _T("Msg") , sms.szMsg ); m_AdoRS.GetCollect( _T("SubTime") , t );t.GetAsSystemTime(sms.tSend); m_AdoRS.GetCollect( _T("RecvTime"), t );t.GetAsSystemTime(sms.tRecv); //#ifdef STATUS_ENABLE_MMS_RECV GetStatusText( lStatus , sms.szStatus ); //#else // GetStatusText2( lStatus , sms.szStatus ); //#endif //无需要状态的短信通所有都返回“发送成功”。 BOOL bNoStatus = m_pMainFrame->m_Setup.bSDK & SDK_NOSTATUS ? true:false; if ( bNoStatus ) { _tcscpy( sms.szStatus , _T("发送成功") ); } if ( _tcslen(szSender)>0 ) { _tcscat( sms.szSender , _T("-") ); _tcscat( sms.szSender , szSender ); } if ( _tcslen(szRecver)>0 ) { _tcscat( sms.szRecver , _T("-") ); _tcscat( sms.szRecver , szRecver ); } } return sms; } void CFMmsLog::OnDblclkSmslogList(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; On_User_See(); } void CFMmsLog::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 CFMmsLog::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("审核中") ); 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 CFMmsLog::OnOK() { //CDialog::OnOK(); } void CFMmsLog::OnCancel() { //CDialog::OnCancel(); } void CFMmsLog::SetToday(BOOL bToday) { if ( m_bShowToday != bToday ) { m_bShowToday = bToday; m_bRefresh = false; } } void CFMmsLog::SetBakDBName(CString strDBName) { m_strBakDBName = strDBName; m_bNewDB = true; }