CorpSms/DLG_SMSLog_Export.cpp
2025-02-27 16:58:16 +08:00

301 lines
7.6 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.

// DLG_SMSLog_Export.cpp : implementation file
//
#include "stdafx.h"
#include "corpsms.h"
#include "DLG_SMSLog_Export.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// DLG_SMSLog_Export dialog
#include "FSmsLog.h"
DLG_SMSLog_Export::DLG_SMSLog_Export(CWnd* pParent /*=NULL*/)
: CDialog(DLG_SMSLog_Export::IDD, pParent)
{
//{{AFX_DATA_INIT(DLG_SMSLog_Export)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_pAdo = NULL;
m_pList = NULL;
m_bNoStatus = false;
}
void DLG_SMSLog_Export::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(DLG_SMSLog_Export)
DDX_Control(pDX, IDD_SMSLOG_EXPORT_HEAD, m_B_AddHead);
DDX_Control(pDX, IDD_SMSLOG_EXPORT_FILENAME, m_E_FileName);
DDX_Control(pDX, IDD_SMSLOG_EXPORT_LIST, m_L_List);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(DLG_SMSLog_Export, CDialog)
//{{AFX_MSG_MAP(DLG_SMSLog_Export)
ON_BN_CLICKED(IDD_SMSLOG_EXPORT_GETFILE, OnSmslogExportGetfile)
ON_BN_CLICKED(IDD_SMSLOG_EXPORT_SELALL, OnSmslogExportSelall)
ON_BN_CLICKED(IDD_SMSLOG_EXPORT_CLEAR, OnSmslogExportClear)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// DLG_SMSLog_Export message handlers
BOOL DLG_SMSLog_Export::OnInitDialog()
{
CDialog::OnInitDialog();
InitItem();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void DLG_SMSLog_Export::InitItem()
{
m_L_List.Init(true,-1,0,0);
m_L_List.InsertColumn( 0 , _T("顺序") , LVCFMT_LEFT , 40 , 0);
m_L_List.InsertColumn( 1 , _T(" 字段名") , LVCFMT_LEFT , 120 , 1);
m_L_List.SetTextColor( RGB(0,0,255) );
TCHAR * pItem[] =
{
_T("接收号码"),
_T("接收人"),
_T("发送时间"),
_T("状态"),
_T("内容"),
};
TCHAR Buf[256];
for ( int i = 0 ; i<5 ; i++ )
{
m_L_List.InsertItem( i , _itot(i+1,Buf,10) );
m_L_List.SetItemText(i , 1 , pItem[i] );
m_L_List.SetItemData(i , i ); //设置这个是为了顺序不至于打乱
}
m_L_List.CheckAll();
m_L_List.NoverCheck();
m_L_List.ReShowSort();
}
void DLG_SMSLog_Export::OnSmslogExportGetfile()
{
#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 , _T("SmsLog") );
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 ) )
{
m_E_FileName.SetWindowText(sOpen.lpstrFile);
}
}
void DLG_SMSLog_Export::OnSmslogExportSelall()
{
m_L_List.CheckAll();
}
void DLG_SMSLog_Export::OnSmslogExportClear()
{
m_L_List.ClearAll();
}
void DLG_SMSLog_Export::SetParam(CAdoRecordSet *pAdo, CReportCtrl *pList,BOOL bNoStatus)
{
m_pAdo = pAdo;
m_pList = pList;
m_bNoStatus = bNoStatus;
}
void DLG_SMSLog_Export::OnOK()
{
long lItemCount = m_L_List.GetItemCount();
long lExPortItem[50];memset(&lExPortItem,0,sizeof(lExPortItem));
for ( int j=0 ; j < 50 ; j++ ) lExPortItem[j] = -1;
long lCheckCount = 0;
for ( int i=0 ; i<lItemCount ; i++ )
{
if ( m_L_List.GetCheck(i) )
{
lExPortItem[lCheckCount] = m_L_List.GetItemData(i) ;
lCheckCount ++;
}
}
if ( lCheckCount <=0 )
{
MessageBox( _T("你必须从左边的字段列表中选择一个或多个导出字段。") , _T("选择错误") , MB_OK|MB_ICONWARNING );
return;
}
TCHAR szFileName[512];
m_E_FileName.GetWindowText( szFileName , sizeof(szFileName) );
if ( _tcslen(AllTrim(szFileName)) <=0 )
{
MessageBox( _T("你必须输入导出的文件名。") , _T("错误") , MB_OK|MB_ICONWARNING );
m_E_FileName.SetFocus();
return;
}
CFile fTalk;
if ( !fTalk.Open( szFileName , CFile::modeReadWrite|CFile::modeCreate ) )
{
TCHAR Buf[512];
_stprintf( Buf , _T("创建文件:%s\n产生错误!") , szFileName );
MessageBox( Buf , _T("错误") , MB_ICONWARNING|MB_OK );
return;
}
long lAdrCount = m_pList->GetItemCount();
long lTemp;
TCHAR Buf[4096];
TCHAR Buf2[2048];
#ifdef UNICODE
char szTempA[4096];
#endif
long lRecnCount= 0; //总记录数
long lFileSize = 0; //文件总字节数
long lBufLen = 0;
COleDateTime t;
if ( m_B_AddHead.GetCheck() )//增加字段头
{
_tcscpy(Buf,_T(";"));
for ( int j = 0; j<lCheckCount ; j++ )
{
switch( lExPortItem[j] )
{
case 0: //收信号码
_tcscat(Buf , _T("收信号码"));
break;
case 1: //收信人
_tcscat(Buf , _T("收信人"));
break;
case 2: //发送时间
_tcscat(Buf , _T("发送时间"));
break;
case 3: //状态
_tcscat(Buf , _T("状态"));
break;
case 4: //内容
_tcscat(Buf , _T("短信内容"));
break;
}
if ( j < lCheckCount-1 ) //最后一条不用加","号
_tcscat(Buf , _T(",") );
}
_tcscat(Buf , _T("\r\n") ); //换行
#ifdef UNICODE
CAdoRecordSet::Ado_W2A(Buf,szTempA);
lBufLen = strlen(szTempA);
fTalk.Write( szTempA , lBufLen );
#else
lBufLen = _tcslen(Buf);
fTalk.Write( Buf , lBufLen );
#endif
lFileSize = lFileSize + lBufLen ; //取得总字节数
}
for ( i = 0; i<lAdrCount ; i++ )
{
memset(Buf , 0 , sizeof(Buf) );
long lSmsID = m_pList->GetItemData(i);
CString str;
str.Format( _T("select * from smslog where SendID=%d") , lSmsID );
if ( m_pAdo->Open(str) && m_pAdo->GetRecordCount()>0 )
{
m_pAdo->MoveFirst();
for( int j = 0 ; j< lCheckCount ; j++ ) //按按所选中的字段,取通讯录内容进行保存。
{
memset(Buf2 , 0 , sizeof(Buf2) );
switch( lExPortItem[j] )
{
case 0: //收信号码
m_pAdo->GetCollect( _T("RecvNum") , Buf2 );
break;
case 1: //收信人
m_pAdo->GetCollect( _T("Recver") , Buf2 );
break;
case 2: //发送时间
m_pAdo->GetCollect( _T("SubTime") , t );
_stprintf(Buf2,_T("%04d.%02d.%02d %02d:%02d") , t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute());
break;
case 3: //状态
m_pAdo->GetCollect( _T("Status") , lTemp );
#ifdef STATUS_ENABLE_RECV
CFSmsLog::GetStatusText( lTemp , Buf2 );
#else
CFSmsLog::GetStatusText2( lTemp , Buf2 );
#endif
if ( m_bNoStatus )
{
_tcscpy( Buf2 , _T("发送成功") );
}
break;
case 4: //内容
m_pAdo->GetCollect(_T("Msg") , Buf2 );
str=Buf2;
str.Replace( _T(",") , _T("") );
str.Replace( _T("\t") , _T(" ") );
str.Replace( _T("\r\n") , _T(" ") );
str.Replace( _T("\r") , _T(" ") );
str.Replace( _T("\n") , _T(" ") );
_tcscpy(Buf2 , str );
break;
}
_tcscat(Buf , Buf2 );
if ( j < lCheckCount-1 ) //最后一条不用加","号
_tcscat(Buf , _T(",") );
}
}
_tcscat(Buf , _T("\r\n") ); //换行
#ifdef UNICODE
CAdoRecordSet::Ado_W2A(Buf,szTempA);
lBufLen = strlen(szTempA);
fTalk.Write( szTempA , lBufLen );
#else
lBufLen = _tcslen(Buf);
fTalk.Write( Buf , lBufLen );
#endif
lRecnCount++; //取得总记录数
lFileSize = lFileSize + lBufLen ; //取得总字节数
}
fTalk.Close();
this->EndWaitCursor();
_stprintf(Buf , _T("导出发送日志成功,具体如下:\n导出文件类型:TXT\n导出记录数:%d\n导出字节数:%d\n导出文件名:%s") , lRecnCount , lFileSize , szFileName);
MessageBox( Buf , _T("导出成功"),MB_OK|MB_ICONINFORMATION );
CDialog::OnOK();
}