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

472 lines
12 KiB
C++

// DLG_User_Inport2.cpp : implementation file
//
#include "stdafx.h"
#include "corpsms.h"
#include "DLG_User_Inport2.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// DLG_User_Inport2 dialog
#include "FGAddress.h"
#include "FPAddress.h"
#include "MainFrm.h"
#include "DLG_AddWarning.h"
DLG_User_Inport2::DLG_User_Inport2(CWnd* pParent /*=NULL*/)
: CDialog(DLG_User_Inport2::IDD, pParent)
{
//{{AFX_DATA_INIT(DLG_User_Inport2)
//}}AFX_DATA_INIT
m_bInport = false;
m_lAddressType = 0;
m_bReMobile = false;
m_bExportAll = false;
memset(&m_szGroupID,0,sizeof(m_szGroupID));
}
void DLG_User_Inport2::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(DLG_User_Inport2)
DDX_Control(pDX, IDC_USER_INPORT_REMOBILE, m_B_ReMobile);
DDX_Control(pDX, IDC_USER_INPORT_RECORD_SPLIT, m_C_RecordSplit);
DDX_Control(pDX, IDC_USER_INPORT_FIELD_SPLIT, m_C_FieldSplit);
DDX_Control(pDX, IDC_USER_INPORT_S1, m_B_Tips);
DDX_Control(pDX, IDC_USER_INPORT_FILENAME, m_E_FileName);
DDX_Control(pDX, IDC_USER_INPORT_LIST, m_L_List);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(DLG_User_Inport2, CDialog)
//{{AFX_MSG_MAP(DLG_User_Inport2)
ON_BN_CLICKED(IDC_USER_INPORT_SELALL, OnUserInportSelall)
ON_BN_CLICKED(IDC_USER_INPORT_CLEAR, OnUserInportClear)
ON_BN_CLICKED(IDC_USER_INPORT_GETFILE, OnUserInportGetfile)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// DLG_User_Inport2 message handlers
BOOL DLG_User_Inport2::OnInitDialog()
{
CDialog::OnInitDialog();
if ( !m_bInport )
{
this->SetWindowText(_T("导出地址本(*.txt , *.csv)"));
CWnd * pWnd = (CWnd*)GetDlgItem(IDOK);
pWnd->SetWindowText(_T("导 出"));
pWnd = (CWnd*)GetDlgItem(IDC_USER_INPORT_S2);
pWnd->SetWindowText(_T("导出字段与顺序(拖动选择,打勾为导出字段)"));
pWnd = (CWnd*)GetDlgItem(IDC_USER_INPORT_S1);
pWnd->SetWindowText(_T("导出txt/csv文件名"));
m_C_FieldSplit.EnableWindow(false);
m_C_RecordSplit.EnableWindow(false);
}
m_C_FieldSplit.SetCurSel(0);
m_C_RecordSplit.SetCurSel(0);
InitList();
/*
if ( !m_bPAddress || !m_bInport)
{
m_B_ReMobile.ShowWindow(SW_HIDE);
}
*/
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void DLG_User_Inport2::OnOK()
{
BOOL b=User_Export();
if (b)
CDialog::OnOK();
}
void DLG_User_Inport2::SetInport(CAdoRecordSet * pAdoRS,const TCHAR * szGroupID,long lAddressType,BOOL bExportAll)
{
m_lAddressType= lAddressType; //通讯录类型,0-users,1-paddress,2-gaddress
m_bExportAll=bExportAll;
m_pAdoRS = pAdoRS;
_tcscpy(m_szGroupID,szGroupID);
}
void DLG_User_Inport2::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) );
if ( m_lAddressType>0 )
{
TCHAR * pItem[] =
{
_T("姓 名"),
_T("昵 称"),
_T("性 别"),
_T("生 日"),
_T("公 司"),
_T("职 务"),
_T("地 址"),
_T("手 机"),
_T("电 话"),
_T("传 真"),
_T("Email"),
_T("QQ"),
_T("备 注"),
};
TCHAR Buf[256];
for ( int i = 0 ; i<13 ; 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 ); //设置这个是为了顺序不至于打乱
}
}
else
{
TCHAR * pItem[] =
{
_T("姓 名"),
_T("昵 称"),
_T("性 别"),
_T("生 日"),
_T("职 务"),
_T("手 机"),
_T("电 话"),
_T("传 真"),
_T("Email"),
_T("QQ"),
_T("备 注"),
};
TCHAR Buf[256];
for ( int i = 0 ; i<11 ; 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_User_Inport2::OnUserInportSelall()
{
m_L_List.CheckAll();
}
void DLG_User_Inport2::OnUserInportClear()
{
m_L_List.ClearAll();
}
BOOL DLG_User_Inport2::User_Export()
{
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 )
{
if ( m_bInport )
MessageBox( _T("你必须从左边的字段列表中选择一个或多个导入字段。") , _T("选择错误") , MB_OK|MB_ICONWARNING );
else
MessageBox( _T("你必须从左边的字段列表中选择一个或多个导出字段。") , _T("选择错误") , MB_OK|MB_ICONWARNING );
return false;
}
TCHAR szFileName[512];
m_E_FileName.GetWindowText( szFileName , sizeof(szFileName) );
if ( _tcslen(AllTrim(szFileName)) <=0 )
{
if ( m_bInport )
MessageBox( _T("你必须输入导入的文件名。") , _T("错误") , MB_OK|MB_ICONWARNING );
else
MessageBox( _T("你必须输入导出的文件名。") , _T("错误") , MB_OK|MB_ICONWARNING );
m_E_FileName.SetFocus();
return false;
}
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 false;
}
TCHAR Buf[1024]={0};
TCHAR Buf2[256]={0};
long lRecnCount= 0; //总记录数
long lFileSize = 0; //文件总字节数
long lBufLen = 0;
#ifdef UNICODE
char szTempA[4096];
#endif
if ( m_B_ReMobile.GetCheck() ) //导出字段
{
for( int j = 0 ; j< lCheckCount ; j++ ) //按按所选中的字段,取通讯录内容进行保存。
{
memset(Buf2 , 0 , sizeof(Buf2) );
long lItemJ = lExPortItem[j];
if ( m_lAddressType==0 && lItemJ>=4 )
lItemJ++;
if ( m_lAddressType==0 && lItemJ>=6 )
lItemJ++;
switch( lItemJ )
{
case 0: //姓名
_tcscpy(Buf2,_T("姓 名"));
break;
case 1: //昵 称
_tcscpy(Buf2,_T("昵 称"));
break;
case 2: //Sex
_tcscpy(Buf2,_T("性 别"));
break;
case 3: //生 日
_tcscpy(Buf2,_T("生 日"));
break;
case 4: //公 司
_tcscpy(Buf2,_T("公 司"));
break;
case 5: //职 务
_tcscpy(Buf2,_T("职 务"));
break;
case 6: //地 址
_tcscpy(Buf2,_T("地 址"));
break;
case 7: //手 机
_tcscpy(Buf2,_T("手 机"));
break;
case 8: //电 话
_tcscpy(Buf2,_T("电 话"));
break;
case 9: //传 真
_tcscpy(Buf2,_T("传 真"));
break;
case 10: //Email
_tcscpy(Buf2,_T("Email"));
break;
case 11: //QQ
_tcscpy(Buf2,_T("QQ"));
break;
case 12: //备 注
_tcscpy(Buf2,_T("备 注"));
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
}
CString strSelect;
CString strTable = _T("paddress");
if ( m_lAddressType==0 )
strTable = _T("users");
if ( m_lAddressType==2 )
strTable = _T("gaddress");
if ( m_bExportAll )
{
strSelect.Format( _T("select * from %s where UserType='1' order by GroupID"),strTable ); //查找此组下的用户
}
else
{
if ( _tcslen(m_szGroupID)<=0 ) //如果是根,导出所有
strSelect.Format( _T("select * from %s where GroupID is null or len(GroupID)=0 and UserType='1' ") ,strTable); //查找此组下的用户
else
strSelect.Format( _T("Select * from %s where GroupID='%s' AND UserType='1' ") ,strTable, m_szGroupID ); //查找此组下的用户
}
BOOL b = m_pAdoRS->Open( strSelect );
long lCount = m_pAdoRS->GetRecordCount();
if ( b && lCount )
{
COleDateTime t;
m_pAdoRS->MoveFirst();
while(!m_pAdoRS->IsEOF() )
{
memset(Buf , 0 , sizeof(Buf) );
for( int j = 0 ; j< lCheckCount ; j++ ) //按按所选中的字段,取通讯录内容进行保存。
{
memset(Buf2 , 0 , sizeof(Buf2) );
long lItemJ = lExPortItem[j];
if ( m_lAddressType==0 && lItemJ>=4 )
lItemJ++;
if ( m_lAddressType==0 && lItemJ>=6 )
lItemJ++;
switch( lItemJ )
{
case 0: //姓名
m_pAdoRS->GetCollect( _T("Name") , Buf2 );
break;
case 1: //昵 称
m_pAdoRS->GetCollect( _T("NickName") , Buf2 );
break;
case 2: //Sex
m_pAdoRS->GetCollect( _T("Sex") , Buf2 );
break;
case 3: //生 日
m_pAdoRS->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 4: //公 司
m_pAdoRS->GetCollect( _T("Ltd") , Buf2 );
break;
case 5: //职 务
m_pAdoRS->GetCollect( _T("Job") , Buf2 );
break;
case 6: //地 址
m_pAdoRS->GetCollect( _T("Addr") , Buf2 );
break;
case 7: //手 机
m_pAdoRS->GetCollect( _T("Mobile") , Buf2 );
break;
case 8: //电 话
m_pAdoRS->GetCollect( _T("Tel") , Buf2 );
break;
case 9: //传 真
m_pAdoRS->GetCollect( _T("Fax") , Buf2 );
break;
case 10: //Email
m_pAdoRS->GetCollect( _T("Email") , Buf2 );
break;
case 11: //QQ
m_pAdoRS->GetCollect( _T("QQ") , Buf2 );
break;
case 12: //备 注
m_pAdoRS->GetCollect( _T("BZ") , Buf2 );
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 ; //取得总字节数
m_pAdoRS->MoveNext();
}
}
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 );
return true;
}
void DLG_User_Inport2::OnUserInportGetfile()
{
#define FILE_FILTER_TEXT \
TEXT("txt文本文件 (*.txt)\0*.txt\0")\
TEXT("Excel csv 文件 (*.csv)\0*.csv\0")\
TEXT("所有文件 (*.*)\0*.*;\0\0")
if ( m_bInport )
{
TCHAR szFile[ 256 ];
TCHAR szFileB[ 256 ];
*szFileB = NULL;
_stprintf( szFile , _T("Address.txt") );
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 ( ::GetOpenFileName( &sOpen ) )
{
m_E_FileName.SetWindowText(sOpen.lpstrFile);
return ;
}
}
else
{
TCHAR szFile[ 256 ];
TCHAR szFileB[ 256 ];
*szFileB = NULL;
_stprintf( szFile , _T("Address") );
if ( m_strName.GetLength()>0 )
_stprintf( szFile ,m_strName );
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("csv");
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_User_Inport2::SetOutportName(CString strName)
{
m_strName = strName;
}