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

438 lines
11 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_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;
}