// DLG_User_InportC.cpp : implementation file // #include "stdafx.h" #include "corpsms.h" #include "DLG_User_InportC.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // DLG_User_InportC dialog #include "MainFrm.h" #include "FCAddress.h" #include "DLG_User_ModifyK.h" #include "DLG_AddWarning.h" DLG_User_InportC::DLG_User_InportC(CWnd* pParent /*=NULL*/) : CDialog(DLG_User_InportC::IDD, pParent) { //{{AFX_DATA_INIT(DLG_User_InportC) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_pParent = pParent; m_bInport = true; m_pList = NULL; m_bReMobile = false; m_lExportType = 0; m_pFCAddress = NULL; m_pFSAddress = NULL; } void DLG_User_InportC::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(DLG_User_InportC) DDX_Control(pDX, IDC_USER_INPORTC_S1, m_B_Tips); DDX_Control(pDX, IDC_USER_INPORTC_LIST, m_L_List); DDX_Control(pDX, IDC_USER_INPORTC_FILENAME, m_E_FileName); DDX_Control(pDX, IDC_USER_INPORTC_REMOBILE, m_B_ReMobile); DDX_Control(pDX, IDC_USER_INPORTC_RECORD_SPLIT, m_C_RecordSplit); DDX_Control(pDX, IDC_USER_INPORTC_FIELD_SPLIT, m_C_FieldSplit); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(DLG_User_InportC, CDialog) //{{AFX_MSG_MAP(DLG_User_InportC) ON_BN_CLICKED(IDC_USER_INPORTC_GETFILE, OnUserInportkGetfile) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // DLG_User_InportC message handlers BOOL DLG_User_InportC::OnInitDialog() { CDialog::OnInitDialog(); if ( !m_bInport ) { this->SetWindowText(_T("导出客户资料(*.txt , *.csv)")); CWnd * pWnd = (CWnd*)GetDlgItem(IDOK); pWnd->SetWindowText(_T("导 出")); pWnd = (CWnd*)GetDlgItem(IDC_USER_INPORTC_S2); pWnd->SetWindowText(_T("导出字段与顺序(拖动选择,打勾为导出字段)")); pWnd = (CWnd*)GetDlgItem(IDC_USER_INPORTC_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_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_InportC::OnOK() { m_bReMobile = m_B_ReMobile.GetCheck(); BOOL b= false; if ( m_bInport ) { b=User_Inport(); } else { b=User_Export(); } if (b) CDialog::OnOK(); } void DLG_User_InportC::SetInport(CListCtrl *pList, BOOL bInport , long lType) { m_pList = pList; m_bInport = bInport; m_lExportType = lType; switch ( lType ) { case 1: m_pFSAddress = (CFSAddress *)m_pParent; m_AdoRS.SetAdoConnection( &m_pFSAddress->m_pMainFrame->m_adoConnection ); break; case 0: default: m_pFCAddress = (CFCAddress *)m_pParent; m_AdoRS.SetAdoConnection( &m_pFCAddress->m_pMainFrame->m_adoConnection ); break; } } void DLG_User_InportC::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) ); switch ( m_lExportType ) { case 1: { TCHAR * pItem[] = { _T("客户编号"), _T("姓 名"), _T("昵 称"), _T("性 别"), _T("生 日"), _T("入会日期"), _T("截止日期"), _T("联系电话"), _T("手机号码"), _T("Email"), _T("地址"), _T("业务员"), _T("金额"), _T("备注"), }; TCHAR Buf[256]; for ( int i = 0 ; i<14 ; 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 ); //设置这个是为了顺序不至于打乱 } } break; case 0: default: { TCHAR * pItem[] = { _T("车 主"), _T("车 牌"), _T("车 型"), _T("发动机号"), _T("底盘号"), _T("购车日期"), _T("保险日期"), _T("联系人1"), _T("手机1"), _T("电话1"), _T("地址1"), _T("邮编1"), _T("单位1"), _T("生日1"), _T("联系人2"), _T("手机2"), _T("电话2"), _T("地址2"), _T("邮编2"), _T("单位2"), _T("生日2"), _T("备 注"), }; TCHAR Buf[256]; for ( int i = 0 ; i<22 ; 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 ); //设置这个是为了顺序不至于打乱 } } break; } m_L_List.CheckAll(); m_L_List.NoverCheck(); m_L_List.ReShowSort(); } BOOL DLG_User_InportC::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 ; iGetItemCount(); TCHAR Buf[1024]; TCHAR Buf2[256]; long lRecnCount= 0; //总记录数 long lFileSize = 0; //文件总字节数 long lBufLen = 0; #ifdef UNICODE char szTempA[4096]; #endif CString strSelect; switch ( m_lExportType ) { case 1: if ( _tcslen(m_pFSAddress->m_szGroupID)<=0 ) //如果是根,用户组为NULL strSelect.Format( _T("select * from saddress where GroupID is null or len(GroupID)=0 and UserType='1' ") ); //查找此组下的用户 else strSelect.Format( _T("Select * from saddress where GroupID='%s' AND UserType='1' ") , m_pFSAddress->m_szGroupID ); //查找此组下的用户 break; case 0: default: if ( _tcslen(m_pFCAddress->m_szGroupID)<=0 ) //如果是根,用户组为NULL strSelect.Format( _T("select * from caddress where GroupID is null or len(GroupID)=0 and UserType='1' ") ); //查找此组下的用户 else strSelect.Format( _T("Select * from caddress where GroupID='%s' AND UserType='1' ") , m_pFCAddress->m_szGroupID ); //查找此组下的用户 break; } BOOL b = m_AdoRS.Open( strSelect ); long lCount = m_AdoRS.GetRecordCount(); if ( b && lCount ) { COleDateTime t; m_AdoRS.MoveFirst(); while(!m_AdoRS.IsEOF() ) { memset(Buf , 0 , sizeof(Buf) ); for( int j = 0 ; j< lCheckCount ; j++ ) //按按所选中的字段,取通讯录内容进行保存。 { memset(Buf2 , 0 , sizeof(Buf2) ); switch( lExPortItem[j] ) { case 0: switch ( m_lExportType ) { case 1://客户编号 m_AdoRS.GetCollect( _T("BH") , Buf2 ); break; case 0://车主 default: m_AdoRS.GetCollect( _T("Name") , Buf2 ); break; } break; case 1: switch ( m_lExportType ) { case 1://姓 名 m_AdoRS.GetCollect( _T("Name") , Buf2 ); break; case 0://车牌 default: m_AdoRS.GetCollect( _T("CarNum") , Buf2 ); break; } break; case 2: switch ( m_lExportType ) { case 1://昵 称 m_AdoRS.GetCollect( _T("NickName") , Buf2 ); break; case 0://车 型 default: m_AdoRS.GetCollect( _T("CarType") , Buf2 ); break; } break; case 3: switch ( m_lExportType ) { case 1://性 别 m_AdoRS.GetCollect( _T("Sex") , Buf2 ); break; case 0://发动机号 default: m_AdoRS.GetCollect( _T("FDJNum") , Buf2 ); break; } break; case 4: switch ( m_lExportType ) { case 1://生 日 m_AdoRS.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 0://底盘号 default: m_AdoRS.GetCollect( _T("DPNum") , Buf2 ); break; } break; case 5: switch ( m_lExportType ) { case 1://入会日期 m_AdoRS.GetCollect( _T("InDate") , 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 0://购车日期 default: m_AdoRS.GetCollect( _T("BuyDate") , 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; } break; case 6: switch ( m_lExportType ) { case 1://截止日期 m_AdoRS.GetCollect( _T("OutDate") , 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 0://保险日期 default: m_AdoRS.GetCollect( _T("BXDate") , 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; } break; case 7: switch ( m_lExportType ) { case 1://联系电话 m_AdoRS.GetCollect( _T("Tel") , Buf2 ); break; case 0://联系人1 default: m_AdoRS.GetCollect( _T("LXR") , Buf2 ); break; } break; case 8: switch ( m_lExportType ) { case 1://手机号码 m_AdoRS.GetCollect( _T("Mobile") , Buf2 ); break; case 0://手机1 default: m_AdoRS.GetCollect( _T("Mobile") , Buf2 ); break; } break; case 9: switch ( m_lExportType ) { case 1://Email m_AdoRS.GetCollect( _T("Email") , Buf2 ); break; case 0://电话1 default: m_AdoRS.GetCollect( _T("Tel") , Buf2 ); break; } break; case 10: switch ( m_lExportType ) { case 1://地址 m_AdoRS.GetCollect( _T("Addr") , Buf2 ); break; case 0://地址1 default: m_AdoRS.GetCollect( _T("Addr") , Buf2 ); break; } break; case 11: switch ( m_lExportType ) { case 1://业务员 m_AdoRS.GetCollect( _T("YWY") , Buf2 ); break; case 0://邮编1 default: m_AdoRS.GetCollect( _T("Postcode") , Buf2 ); break; } break; case 12: switch ( m_lExportType ) { case 1://金额 m_AdoRS.GetCollect( _T("Price") , Buf2 ); break; case 0://单位1 default: m_AdoRS.GetCollect( _T("Corp") , Buf2 ); break; } break; case 13: switch ( m_lExportType ) { case 1://备注 m_AdoRS.GetCollect( _T("BZ") , Buf2 ); break; case 0://生日1 default: m_AdoRS.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; } break; case 14: //联系人2 m_AdoRS.GetCollect( _T("LXR2") , Buf2 ); break; case 15: //手机2 m_AdoRS.GetCollect( _T("Mobile2") , Buf2 ); break; case 16: //电话2 m_AdoRS.GetCollect( _T("Tel2") , Buf2 ); break; case 17: //地址2 m_AdoRS.GetCollect( _T("Addr2") , Buf2 ); break; case 18: //邮编2 m_AdoRS.GetCollect( _T("Postcode2") , Buf2 ); break; case 19: //单位2 m_AdoRS.GetCollect( _T("Corp2") , Buf2 ); break; case 20: //生日2 m_AdoRS.GetCollect( _T("Birthday2") , 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 21: //备注 m_AdoRS.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_AdoRS.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; } BOOL DLG_User_InportC::User_Inport() { 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 ; im_szGroupID); //用户组 for ( i=0 ; i0 || _tcslen(user.szTel) >0 || _tcslen(user.szMobile) >0) { if ( _tcslen(user.szName) <= 0 ) _stprintf( user.szName , _T("IP%d") , lNameCount ); //添加用户 _stprintf( szName , _T("现正处理->%d") , lLineCount ); m_B_Tips.SetWindowText( szName ); //先检测号码是否存在此组时,如果存在,提示 BOOL bAdd = true; if ( m_bReMobile && _tcslen( user.szMobile ) > 0 ) { if ( _tcslen(m_pFCAddress->m_szGroupID)<=0) str.Format( _T("select * from caddress where Mobile='%s' and (GroupID is null or len(GroupID)=0)") , user.szMobile ); else str.Format( _T("select * from caddress where Mobile='%s' and GroupID='%s'") , user.szMobile,m_pFCAddress->m_szGroupID ); if ( m_AdoRS.Open(str) && m_AdoRS.GetRecordCount()>0 ) { //找到记录,证明有重复的号码 m_AdoRS.Close(); if ( bShowReMobile ) { str.Format( _T("%s,%s") , user.szName , user.szMobile ); DLG_AddWarning dlg(str,this); //提示重复号码 dlg.DoModal(); bShowReMobile = dlg.m_bShowReMobile; lReMobileType = dlg.m_lReMobileType; } if ( lReMobileType == 0 ) //跳过 { bAdd = false; } } } if ( bAdd ) { lNameCount ++; m_pFCAddress->AddUser(user,false); } } lLineCount ++; } else { break; } } fTalk.Close(); _stprintf(szName , _T("导入发送列表成功,具体如下:\n导入文件类型:TXT\n导入记录数:%d\n文件总行数:%d\n导入文件名:%s") , lNameCount , lLineCount, szFileName); MessageBox( szName , _T("导入成功"),MB_OK|MB_ICONINFORMATION ); m_pFCAddress->On_User_Refresh(); return true; } long DLG_User_InportC::ReadLine(CFile *file, char *pSplit, char *szBuf, long lLen) { int i,j; int lLineCount = 0; int lSplitLen = strlen(pSplit); char c; i = 0; while ( true ) { j = file->Read( &c , 1 ); if ( j < 1 ) { szBuf[i]=0; return i; } if ( i >= lLen-1 ) { szBuf[i] = 0; return i; } szBuf[i] = c; i++; if ( !memcmp( szBuf+i-lSplitLen , pSplit , lSplitLen ) ) //换行标志 { szBuf[i] = 0; return i; } } return 0; } void DLG_User_InportC::OnUserInportkGetfile() { #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("*.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") ); 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); } } }