CorpSms/FMmsLog.cpp
lujiang e17c4ce7ed 重新对窗口布局进行优化,解决缺字的情况。
对图标显示进行了优化,使用gdi+按DPI进行缩放。
2025-04-14 17:24:47 +08:00

1099 lines
29 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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 *>((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() && iItem<lCount )
{
/*
m_AdoRS.GetCollect( "SendID" , lSendID );
m_AdoRS.GetCollect( "Status" , lStatus );
m_AdoRS.GetCollect( "SendNum" , szSendNum );
m_AdoRS.GetCollect( "Recver" , szRecver );
m_AdoRS.GetCollect( "RecvNum" , szRecvNum );
m_AdoRS.GetCollect( "Title" , szTitle );
m_AdoRS.GetCollect( "mmSize" , lmmSize );
m_AdoRS.GetCollect( "SubTime" , tSub );
m_AdoRS.GetCollect( "RecvTime", tRecv );
//
//m_wndList.SetHeadings(_T("ÐòºÅ,50; ״̬,80;·¢ÐźÅÂë,80;ÊÕÐźÅÂë,120; ¶ÌÐÅÄÚÈÝ,280;·¢ÐÅʱ¼ä,80;ÊÕÐÅʱ¼ä,80;"));
m_wndList.InsertItem( iItem , _itot( lCount-iItem,szSelect,10) , 0 );
m_wndList.SetItemData( iItem,lSendID );
#ifdef STATUS_ENABLE_MMS_RECV
long lIcon = GetStatusText( lStatus , szStatus );
#else
long lIcon = GetStatusText2( lStatus , szStatus );
#endif
m_wndList.SetIconIndex( iItem , lIcon );
m_wndList.SetItemText(iItem,1,szStatus);
m_wndList.SetItemText(iItem,2,szSendNum);
if ( _tcslen(szRecver)>0 )
{
_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<lCount;i++ ) //ÿ´Î×î¶à²éѯ1000Ìõ¼Ç¼
{
long lStatus = GetItemStatus(i);
#ifdef STATUS_ENABLE_MMS_RECV
if ( lStatus == SEND_STATUS_SUB_OK || //ÒÔÏÂÈýÖÖ£¬ÐèÒªÖØÐÂȡ״̬
lStatus == SEND_STATUS_SUB_FILT ||
lStatus == SEND_STATUS_SEND_OK ||
lStatus == SEND_STATUS_SEND_ERROR)
#else
if ( lStatus == SEND_STATUS_SUB_OK || //ÒÔÏÂÈýÖÖ£¬ÐèÒªÖØÐÂȡ״̬
lStatus == SEND_STATUS_SUB_FILT ||
lStatus == SEND_STATUS_SEND_OK ||
lStatus == SEND_STATUS_SEND_ERROR )
#endif
{
pSendID[lCount2] = i;
lCount2 ++;
pSendID[lCount2] = m_wndList.GetItemData( i ); //È¡µÃSendID
lCount2 ++;
pSendID[lCount2] =lStatus;
lCount2 ++;
}
if ( lCount2 >= 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;i<lCount;i++)
{
pStatusData->lItemID = 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;i<pStatus->lCount;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->lItemID<m_wndList.GetItemCount() )
{
long lSendID = m_wndList.GetItemData(pData->lItemID);
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;
}