438 lines
11 KiB
C++
438 lines
11 KiB
C++
// DLG_SMSJS_Export.cpp : implementation file
|
||
//
|
||
|
||
#include "stdafx.h"
|
||
#include "corpsms.h"
|
||
#include "DLG_SMSJS_Export.h"
|
||
|
||
#ifdef _DEBUG
|
||
#define new DEBUG_NEW
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[] = __FILE__;
|
||
#endif
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// DLG_SMSJS_Export dialog
|
||
|
||
|
||
DLG_SMSJS_Export::DLG_SMSJS_Export(CWnd* pParent /*=NULL*/)
|
||
: CDialog(DLG_SMSJS_Export::IDD, pParent)
|
||
{
|
||
//{{AFX_DATA_INIT(DLG_SMSJS_Export)
|
||
// NOTE: the ClassWizard will add member initialization here
|
||
//}}AFX_DATA_INIT
|
||
m_pAdo = NULL;
|
||
m_pList = NULL;
|
||
|
||
}
|
||
|
||
|
||
void DLG_SMSJS_Export::DoDataExchange(CDataExchange* pDX)
|
||
{
|
||
CDialog::DoDataExchange(pDX);
|
||
//{{AFX_DATA_MAP(DLG_SMSJS_Export)
|
||
DDX_Control(pDX, IDD_SMSJS_EXPORT_SEL, m_B_OnlySel);
|
||
DDX_Control(pDX, IDD_SMSJS_EXPORT_HEAD, m_B_AddHead);
|
||
DDX_Control(pDX, IDD_SMSJS_EXPORT_LIST, m_L_List);
|
||
DDX_Control(pDX, IDD_SMSJS_EXPORT_FILENAME, m_E_FileName);
|
||
//}}AFX_DATA_MAP
|
||
}
|
||
|
||
|
||
BEGIN_MESSAGE_MAP(DLG_SMSJS_Export, CDialog)
|
||
//{{AFX_MSG_MAP(DLG_SMSJS_Export)
|
||
ON_BN_CLICKED(IDD_SMSJS_EXPORT_CLEAR, OnSmsjsExportClear)
|
||
ON_BN_CLICKED(IDD_SMSJS_EXPORT_SELALL, OnSmsjsExportSelall)
|
||
ON_BN_CLICKED(IDD_SMSJS_EXPORT_GETFILE, OnSmsjsExportGetfile)
|
||
//}}AFX_MSG_MAP
|
||
END_MESSAGE_MAP()
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// DLG_SMSJS_Export message handlers
|
||
|
||
BOOL DLG_SMSJS_Export::OnInitDialog()
|
||
{
|
||
CDialog::OnInitDialog();
|
||
|
||
InitList();
|
||
|
||
return TRUE; // return TRUE unless you set the focus to a control
|
||
// EXCEPTION: OCX Property Pages should return FALSE
|
||
}
|
||
|
||
void DLG_SMSJS_Export::InitList()
|
||
{
|
||
m_L_List.Init(true,-1,-1,-1);
|
||
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("内容"),
|
||
_T("手机归属地")
|
||
#ifdef MOBSET_OEM_SNLD
|
||
_T("昵称"),
|
||
_T("性别"),
|
||
_T("生日"),
|
||
_T("公司"),
|
||
_T("职务"),
|
||
_T("电话"),
|
||
_T("传真"),
|
||
_T("Email"),
|
||
_T("QQ"),
|
||
_T("备注"),
|
||
#endif
|
||
#ifdef YQ_VER
|
||
_T("短信类别"),
|
||
_T("手机归属地")
|
||
#endif
|
||
};
|
||
TCHAR Buf[256];
|
||
int lCount=6;
|
||
#ifdef MOBSET_OEM_SNLD
|
||
lCount += 10;
|
||
#endif
|
||
for ( int i = 0 ; i<lCount ; 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 ); //设置这个是为了顺序不至于打乱
|
||
}
|
||
#ifdef YQ_VER
|
||
lCount += 2;
|
||
int j=0;
|
||
for ( ; i<lCount ; i++ )
|
||
{
|
||
m_L_List.InsertItem( i , _itot(i+1,Buf,10) );
|
||
m_L_List.SetItemText(i , 1 , pItem[i] );
|
||
m_L_List.SetItemData(i , 20+j ); //设置这个是为了顺序不至于打乱
|
||
j++;
|
||
}
|
||
|
||
#endif
|
||
|
||
m_L_List.CheckAll();
|
||
m_L_List.NoverCheck();
|
||
m_L_List.ReShowSort();
|
||
}
|
||
|
||
void DLG_SMSJS_Export::OnSmsjsExportClear()
|
||
{
|
||
m_L_List.ClearAll();
|
||
}
|
||
|
||
void DLG_SMSJS_Export::OnSmsjsExportSelall()
|
||
{
|
||
m_L_List.CheckAll();
|
||
}
|
||
|
||
void DLG_SMSJS_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;
|
||
}
|
||
|
||
CString str;
|
||
CString strTemp,strTemp2;
|
||
long lAdrCount = m_pList->GetItemCount();
|
||
TCHAR Buf[1024];
|
||
TCHAR Buf2[1024];
|
||
TCHAR Buf3[1024];
|
||
#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;
|
||
case 5: //归属地
|
||
_tcscat(Buf , _T("归属地"));
|
||
break;
|
||
case 6: //昵称
|
||
_tcscat(Buf , _T("昵称"));
|
||
break;
|
||
case 7: //性别
|
||
_tcscat(Buf , _T("性别"));
|
||
break;
|
||
case 8: //生日
|
||
_tcscat(Buf , _T("生日"));
|
||
break;
|
||
case 9: //公司
|
||
_tcscat(Buf , _T("公司"));
|
||
break;
|
||
case 10: //职务
|
||
_tcscat(Buf , _T("职务"));
|
||
break;
|
||
case 11: //电话
|
||
_tcscat(Buf , _T("电话"));
|
||
break;
|
||
case 12: //传真
|
||
_tcscat(Buf , _T("传真"));
|
||
break;
|
||
case 13: //Email
|
||
_tcscat(Buf , _T("Email"));
|
||
break;
|
||
case 14: //QQ
|
||
_tcscat(Buf , _T("QQ"));
|
||
break;
|
||
case 15: //备注
|
||
_tcscat(Buf , _T("备注"));
|
||
break;
|
||
|
||
case 20: //类型
|
||
_tcscat(Buf , _T("类型"));
|
||
break;
|
||
case 21: //归属地
|
||
_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) );
|
||
BOOL bExport=true;
|
||
if ( m_B_OnlySel.GetCheck() )
|
||
{
|
||
UINT uStatus= m_pList->GetItemState(i,LVIS_SELECTED);
|
||
if ( uStatus&LVIS_SELECTED )
|
||
bExport = true;
|
||
else
|
||
bExport = false;
|
||
}
|
||
long lSmsID = m_pList->GetItemData(i);
|
||
CString str;
|
||
str.Format( _T("select * from smsrecv where RecvID=%d") , lSmsID );
|
||
if ( bExport && m_pAdo->Open(str) && m_pAdo->GetRecordCount()>0 )
|
||
{
|
||
m_pAdo->MoveFirst();
|
||
for( int j = 0 ; j< lCheckCount ; j++ ) //按按所选中的字段,取通讯录内容进行保存。
|
||
{
|
||
memset(Buf2 , 0 , sizeof(Buf2) );
|
||
memset(Buf3 , 0 , sizeof(Buf3) );
|
||
switch( lExPortItem[j] )
|
||
{
|
||
case 0: //发送号码
|
||
m_pAdo->GetCollect( _T("SendNum") , Buf2 );
|
||
break;
|
||
case 1: //发送人
|
||
m_pAdo->GetCollect( _T("Sender") , Buf2 );
|
||
break;
|
||
case 2: //接收号码
|
||
m_pAdo->GetCollect( _T("Recvnum") , Buf2 );
|
||
break;
|
||
case 3: //接收时间
|
||
m_pAdo->GetCollect( _T("RecvTime") , t );
|
||
if (t.GetStatus()==COleDateTime::valid)
|
||
_stprintf(Buf2,_T("%04d.%02d.%02d %02d:%02d") , t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute());
|
||
else
|
||
memset(Buf2,0,sizeof(Buf2));
|
||
break;
|
||
case 4: //内容
|
||
m_pAdo->GetCollect( _T("Msg") , Buf2 );
|
||
ExChar(Buf2 , _T("\r") );
|
||
ExChar(Buf2 , _T("\n") );
|
||
str=Buf2;
|
||
str.Replace( _T(",") , _T(",") );
|
||
_tcscpy(Buf2 , str );
|
||
break;
|
||
case 5: //归属地
|
||
m_pAdo->GetCollect( _T("Province") , strTemp );
|
||
m_pAdo->GetCollect( _T("City") , strTemp2 );
|
||
if ( strTemp2.GetLength()>0 )
|
||
_stprintf(Buf2 , _T("%s-%s") ,strTemp,strTemp2 );
|
||
else
|
||
_tcscpy(Buf2 , strTemp );
|
||
break;
|
||
case 6: //昵称
|
||
m_pAdo->GetCollect( _T("NickName") , Buf2 );
|
||
break;
|
||
case 7: //性别
|
||
m_pAdo->GetCollect( _T("Sex") , Buf2 );
|
||
break;
|
||
case 8: //生日
|
||
m_pAdo->GetCollect( _T("Birthday") , t );
|
||
if (t.GetStatus()==COleDateTime::valid)
|
||
_stprintf(Buf2,_T("%04d.%02d.%02d") , t.GetYear(),t.GetMonth(),t.GetDay());
|
||
else
|
||
memset(Buf2,0,sizeof(Buf2));
|
||
break;
|
||
case 9: //公司
|
||
m_pAdo->GetCollect( _T("Ltd") , Buf2 );
|
||
break;
|
||
case 10: //职务
|
||
m_pAdo->GetCollect( _T("Job") , Buf2 );
|
||
break;
|
||
case 11: //电话
|
||
m_pAdo->GetCollect( _T("Tel") , Buf2 );
|
||
break;
|
||
case 12: //传真
|
||
m_pAdo->GetCollect( _T("Fax") , Buf2 );
|
||
break;
|
||
case 13: //Email
|
||
m_pAdo->GetCollect( _T("Email") , Buf2 );
|
||
break;
|
||
case 14: //QQ
|
||
m_pAdo->GetCollect( _T("QQ") , Buf2 );
|
||
break;
|
||
case 15: //备注
|
||
m_pAdo->GetCollect( _T("BZ") , Buf2 );
|
||
ExChar(Buf2 , _T("\r") );
|
||
ExChar(Buf2 , _T("\n") );
|
||
break;
|
||
|
||
case 20: //类型
|
||
m_pAdo->GetCollect( _T("Type1") , Buf2 );
|
||
m_pAdo->GetCollect( _T("Type2") , Buf3 );
|
||
if ( _tcslen(Buf3)>0 )
|
||
{
|
||
_tcscat( Buf2 , _T("-") );
|
||
_tcscat( Buf2 , Buf3 );
|
||
}
|
||
break;
|
||
case 21: //归属地
|
||
m_pAdo->GetCollect( _T("Province") , Buf2 );
|
||
m_pAdo->GetCollect( _T("City") , Buf3 );
|
||
if ( _tcslen(Buf3)>0 )
|
||
{
|
||
_tcscat( Buf2 , _T("-") );
|
||
_tcscat( Buf2 , Buf3 );
|
||
}
|
||
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();
|
||
}
|
||
|
||
void DLG_SMSJS_Export::OnSmsjsExportGetfile()
|
||
{
|
||
#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("SmsRecv") );
|
||
|
||
|
||
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_SMSJS_Export::SetParam(CAdoRecordSet *pAdo, CReportCtrl *pList)
|
||
{
|
||
m_pAdo = pAdo;
|
||
m_pList = pList;
|
||
}
|