// DLG_SendFax.cpp : implementation file // #include "stdafx.h" #include "corpsms.h" #include "DLG_SendFax.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // DLG_SendFax dialog #include "MainFrm.h" #include "ProcessSocket.h" #include "FFaxDF.h" #include "DLG_Send_User.h" #include "DLG_Send_Inport.h" #include "DLG_FiltWarning.h" #include "DLG_AddWarning.h" #include "DLG_User_InportP2.h" #include "DLG_AddBack.h" #ifdef UNICODE class CAdoFaxItem:public CADORecordBinding { BEGIN_ADO_BINDING(CAdoFaxItem) ADO_VARIABLE_LENGTH_ENTRY2(1,adInteger, m_ItemID ,sizeof(m_ItemID), l_ItemIDStatus,false) ADO_VARIABLE_LENGTH_ENTRY2(2,adInteger, m_BoxID ,sizeof(m_BoxID), l_BoxIDStatus,false) ADO_VARIABLE_LENGTH_ENTRY2(3,adVarWChar,m_GroupID ,sizeof(m_GroupID) , l_GroupIDStatus,false) ADO_VARIABLE_LENGTH_ENTRY2(4,adVarWChar,m_Name ,sizeof(m_Name) , l_NameStatus,false) ADO_VARIABLE_LENGTH_ENTRY2(5,adVarWChar, m_FaxNum ,sizeof(m_FaxNum) , l_FaxNumStatus,false) ADO_VARIABLE_LENGTH_ENTRY2(6,adVarWChar, m_Status ,sizeof(m_Status) , l_StatusStatus,false) ADO_VARIABLE_LENGTH_ENTRY2(7,adInteger, m_SendID ,sizeof(m_SendID), l_SendIDStatus,false) END_ADO_BINDING() public: long m_ItemID; ULONG l_ItemIDStatus; long m_BoxID; ULONG l_BoxIDStatus; TCHAR m_GroupID[24]; ULONG l_GroupIDStatus; TCHAR m_Name[24]; ULONG l_NameStatus; TCHAR m_FaxNum[24]; ULONG l_FaxNumStatus; TCHAR m_Status[4]; ULONG l_StatusStatus; long m_SendID; ULONG l_SendIDStatus; CAdoFaxItem() { m_ItemID = 0; m_BoxID = 0; memset(m_GroupID,0,sizeof(m_GroupID)); memset(m_Name,0,sizeof(m_Name)); memset(m_FaxNum,0,sizeof(m_FaxNum)); memset(m_Status,0,sizeof(m_Status)); m_SendID = 0; } }; #else class CAdoFaxItem:public CADORecordBinding { BEGIN_ADO_BINDING(CAdoFaxItem) ADO_VARIABLE_LENGTH_ENTRY2(1,adInteger, m_ItemID ,sizeof(m_ItemID), l_ItemIDStatus,false) ADO_VARIABLE_LENGTH_ENTRY2(2,adInteger, m_BoxID ,sizeof(m_BoxID), l_BoxIDStatus,false) ADO_VARIABLE_LENGTH_ENTRY2(3,adVarChar,m_GroupID ,sizeof(m_GroupID) , l_GroupIDStatus,false) ADO_VARIABLE_LENGTH_ENTRY2(4,adVarChar,m_Name ,sizeof(m_Name) , l_NameStatus,false) ADO_VARIABLE_LENGTH_ENTRY2(5,adVarChar, m_FaxNum ,sizeof(m_FaxNum) , l_FaxNumStatus,false) ADO_VARIABLE_LENGTH_ENTRY2(6,adVarChar, m_Status ,sizeof(m_Status) , l_StatusStatus,false) ADO_VARIABLE_LENGTH_ENTRY2(7,adInteger, m_SendID ,sizeof(m_SendID), l_SendIDStatus,false) END_ADO_BINDING() public: long m_ItemID; ULONG l_ItemIDStatus; long m_BoxID; ULONG l_BoxIDStatus; char m_GroupID[24]; ULONG l_GroupIDStatus; char m_Name[24]; ULONG l_NameStatus; char m_FaxNum[24]; ULONG l_FaxNumStatus; char m_Status[4]; ULONG l_StatusStatus; long m_SendID; ULONG l_SendIDStatus; CAdoFaxItem() { m_ItemID = 0; m_BoxID = 0; memset(m_GroupID,0,sizeof(m_GroupID)); memset(m_Name,0,sizeof(m_Name)); memset(m_FaxNum,0,sizeof(m_FaxNum)); memset(m_Status,0,sizeof(m_Status)); m_SendID = 0; } }; #endif DLG_SendFax::DLG_SendFax(CWnd* pParent /*=NULL*/) : CDialog(DLG_SendFax::IDD, pParent) { //{{AFX_DATA_INIT(DLG_SendFax) //}}AFX_DATA_INIT m_pMainFrame = NULL; memset( &m_OldRect , 0 , sizeof(m_OldRect) ); m_bInit = false; m_bModify = false; m_bAttachModify = false; m_lBoxID = 0; m_lBoxType = 0; m_lFaxUpID = 0; m_bSend = false; m_lSendIndex = 0; m_bShowReMobile = true; m_lReMobileType = 0; m_bBackReMobile = true; m_lBackReMobileType = 0; m_bSendSR = false; m_dwSendStartTime = 0; m_dwBackCount=0; //黑名单数量 m_dwNoSupCount=0; //不支持号码数量 m_dwNoMsgCount=0; //没内容数量 m_bSaveList = false; m_lPage = 0; m_lCurSendType = 0; m_lSendAttachIndex = 1; m_lSendAttachCount = 0; m_lAttachUpLen = 0; m_bAttachOpen = false; } void DLG_SendFax::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(DLG_SendFax) DDX_Control(pDX, IDC_SEND_FAX_TITLE, m_E_Title); DDX_Control(pDX, IDC_SENDFAX_SAVESENDLOG, m_B_SaveSendLog); DDX_Control(pDX, IDC_SENDFAX_STATE, m_B_Status); DDX_Control(pDX, IDC_SENDFAX_START, m_B_Start); DDX_Control(pDX, IDC_SENDFAX_SAVE, m_B_Save); DDX_Control(pDX, IDC_SENDFAX_S1, m_S_S1); DDX_Control(pDX, IDC_SENDFAX_REMOBILE, m_B_ReMobile); DDX_Control(pDX, IDC_SENDFAX_NUMADD, m_B_Add); DDX_Control(pDX, IDC_SENDFAX_NUM, m_E_Num); DDX_Control(pDX, IDC_SENDFAX_NULL, m_B_Null); DDX_Control(pDX, IDC_SENDFAX_NEW2, m_B_New2); DDX_Control(pDX, IDC_SENDFAX_NEW, m_B_New); DDX_Control(pDX, IDC_SENDFAX_MSG_LIST, m_S_MsgList); DDX_Control(pDX, IDC_SENDFAX_LIST_COUNT, m_S_ListCount); DDX_Control(pDX, IDC_SENDFAX_LIST, m_wndList); DDX_Control(pDX, IDC_SENDFAX_DY, m_B_DY); DDX_Control(pDX, IDC_SENDFAX_DS_T, m_D_Time); DDX_Control(pDX, IDC_SENDFAX_DS_D, m_D_Date); DDX_Control(pDX, IDC_SENDFAX_DS, m_B_DS); DDX_Control(pDX, IDC_SEND_FAX_ATTACH5, m_E_Attach5); DDX_Control(pDX, IDC_SEND_FAX_ATTACH4, m_E_Attach4); DDX_Control(pDX, IDC_SEND_FAX_ATTACH3, m_E_Attach3); DDX_Control(pDX, IDC_SEND_FAX_ATTACH2, m_E_Attach2); DDX_Control(pDX, IDC_SEND_FAX_ATTACH1, m_E_Attach1); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(DLG_SendFax, CDialog) //{{AFX_MSG_MAP(DLG_SendFax) ON_WM_CREATE() ON_WM_SIZE() ON_WM_TIMER() ON_WM_CLOSE() ON_WM_DESTROY() ON_BN_CLICKED(IDC_SEND_FAX_SEL_ATTACH1, OnSendFaxSelAttach1) ON_BN_CLICKED(IDC_SEND_FAX_SEL_ATTACH2, OnSendFaxSelAttach2) ON_BN_CLICKED(IDC_SEND_FAX_SEL_ATTACH3, OnSendFaxSelAttach3) ON_BN_CLICKED(IDC_SEND_FAX_SEL_ATTACH4, OnSendFaxSelAttach4) ON_BN_CLICKED(IDC_SEND_FAX_SEL_ATTACH5, OnSendFaxSelAttach5) ON_BN_CLICKED(IDC_SENDFAX_NUMADD, OnSendfaxNumadd) ON_BN_CLICKED(IDC_SENDFAX_DS, OnSendfaxDs) ON_BN_CLICKED(IDC_SENDFAX_NEW2, OnSendfaxNew2) ON_BN_CLICKED(IDC_SENDFAX_NEW, OnSendfaxNew) ON_BN_CLICKED(IDC_SENDFAX_SAVE, OnSendfaxSave) ON_NOTIFY(NM_DBLCLK, IDC_SENDFAX_LIST, OnDblclkSendfaxList) ON_NOTIFY(NM_RCLICK, IDC_SENDFAX_LIST, OnRclickSendfaxList) ON_NOTIFY(LVN_KEYDOWN, IDC_SENDFAX_LIST, OnKeydownSendfaxList) ON_NOTIFY(DTN_DATETIMECHANGE, IDC_SENDFAX_DS_D, OnDatetimechangeSendfaxDsD) ON_NOTIFY(DTN_DATETIMECHANGE, IDC_SENDFAX_DS_T, OnDatetimechangeSendfaxDsT) ON_EN_CHANGE(IDC_SEND_FAX_TITLE, OnChangeSendFaxTitle) ON_BN_CLICKED(IDC_SENDFAX_START, OnSendfaxStart) ON_BN_DOUBLECLICKED(IDC_SEND_FAX_SEL_ATTACH1, OnDoubleclickedSendFaxSelAttach1) ON_BN_DOUBLECLICKED(IDC_SEND_FAX_SEL_ATTACH2, OnDoubleclickedSendFaxSelAttach2) ON_BN_DOUBLECLICKED(IDC_SEND_FAX_SEL_ATTACH3, OnDoubleclickedSendFaxSelAttach3) ON_BN_DOUBLECLICKED(IDC_SEND_FAX_SEL_ATTACH4, OnDoubleclickedSendFaxSelAttach4) ON_BN_DOUBLECLICKED(IDC_SEND_FAX_SEL_ATTACH5, OnDoubleclickedSendFaxSelAttach5) //}}AFX_MSG_MAP ON_MESSAGE(DROPM_DROP,OnDrop) ON_COMMAND( SEND_FAX_USER_ADD , On_User_Add ) ON_COMMAND( SEND_FAX_USER_MODIFY , On_User_Modify ) ON_COMMAND( SEND_FAX_USER_DEL , On_User_Del ) ON_COMMAND( SEND_FAX_USER_CLEAR , On_User_Clear ) ON_COMMAND( SEND_FAX_USER_INPORT , On_User_Inport ) ON_COMMAND( SEND_FAX_USER_EXPORT , On_User_Export ) ON_COMMAND( SEND_FAX_USER_STATUS , On_User_Status ) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // DLG_SendFax message handlers int DLG_SendFax::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; m_UserDrop.Register(this); return 0; } BOOL DLG_SendFax::OnInitDialog() { CDialog::OnInitDialog(); this->SetIcon( AfxGetApp()->LoadIcon(IDI_L_SMSDF),false); m_D_Date.EnableWindow(false); m_D_Time.EnableWindow(false); m_B_ReMobile.SetCheck(true); //默认检测重复 m_B_SaveSendLog.SetCheck(true); //默认写到日志 InitItem(); m_E_Title.SetFocus(); if ( !m_pMainFrame->GetUserPurview( PURVIEW_SENDP , false ) ) { m_E_Num.EnableWindow( false ); //没有发送私人电话本的权限 m_B_Add.EnableWindow( false ); } m_bModify = false; return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void DLG_SendFax::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); CDialog::OnSize(nType, cx, cy); if ( !m_bInit ) return; CRect rect; this->GetWindowRect(&rect); if ( rect.Width()<200 || rect.Height() < 150 ) //当SIZE已很小时则不用再移动窗口 return; CRect rect3; CRect rUser; //重置用户列表 m_wndList.GetWindowRect( &rUser ); rect3.left = rUser.left; rect3.top = rUser.top; rect3.right = rect.right - 17; rect3.bottom = rect.bottom -17; this->ScreenToClient(&rect3); m_wndList.MoveWindow(&rect3); //重置计数表 m_S_ListCount.GetWindowRect( &rUser ); rect3.left = rUser.left; rect3.top = rUser.top; rect3.right = rect.right - 17+7; rect3.bottom = rect.bottom -17+7; this->ScreenToClient(&rect3); m_S_ListCount.MoveWindow(&rect3); //重置信息静态控件 m_S_MsgList.GetWindowRect( &rUser ); rect3.left = rUser.left; rect3.top = rUser.top; rect3.right = rUser.right; rect3.bottom = rect.bottom -17+7; this->ScreenToClient(&rect3); m_S_MsgList.MoveWindow(&rect3); } void DLG_SendFax::OnTimer(UINT nIDEvent) { CDialog::OnTimer(nIDEvent); if ( nIDEvent == 1 ) { KillTimer( 1 ); if ( m_bSend ) { OnSendfaxStart(); if ( m_pMainFrame->m_Setup.bAutoReSend ) //如果设置了自动重发,则重新发送多一次 { TCHAR szBuf[128]={0}; _stprintf( szBuf , _T("传真发送列表 提交超时,准备重发!")); this->SetWindowText( szBuf ); Sleep(2000); OnSendfaxStart(); } else { MessageBox( _T("提交传真超时,请检查网络连接!") , _T("错误") , MB_ICONWARNING ); } return ; } } if ( nIDEvent == 10 ) { KillTimer(nIDEvent); SendNextFax(); return ; } } void DLG_SendFax::OnClose() { if ( CloseList() ) { CDialog::OnClose(); } } void DLG_SendFax::OnDestroy() { m_bInit = false; CDialog::OnDestroy(); } void DLG_SendFax::SetMainFrame(CMainFrame *pFrame) { m_pMainFrame = pFrame; m_pSocket = &m_pMainFrame->m_Socket; m_AdoRS.SetAdoConnection( &m_pMainFrame->m_adoConnection ); m_AdoRS2.SetAdoConnection( &m_pMainFrame->m_adoConnection ); m_AdoRS3.SetAdoConnection( &m_pMainFrame->m_adoConnection ); m_AdoRS4.SetAdoConnection( &m_pMainFrame->m_adoConnection ); m_AdoRS4.SetCursorLocation(adUseClient); m_AdoRS5.SetAdoConnection( &m_pMainFrame->m_adoConnection ); m_AdoRS5.SetCursorLocation(adUseClient); m_AdoRS6.SetAdoConnection( &m_pMainFrame->m_adoConnection ); } void DLG_SendFax::InitItem() { if ( m_bInit ) return ; m_bInit = true; //限制最大可发送的数据长度 m_E_Title.LimitText( 60 ); //创建图像列表 m_Image.Create( 20 , 20 , ILC_COLOR32|ILC_MASK , 5 , 1); CBitmap bmp; bmp.LoadBitmap( IDB_L_USER_NOR ); m_Image.Add( &bmp , RGB(193,193,193) ); //设置 bmp.DeleteObject(); bmp.LoadBitmap( IDB_L_USER_EXP ); m_Image.Add( &bmp , RGB(193,193,193) ); //设置 //加入图像列表 m_wndList.SetImageList(&m_Image,LVSIL_SMALL); m_wndList.SetBkColor( RGB(237,238,188) ); m_wndList.SetTextBkColor( RGB(237,238,188) ); //m_wndList.SubClassWindow2(); //m_wndList.SetHeadings(_T(" 姓 名,80; 昵 称,80;手机号码,100; 状 态,70; 用户组,80; 备 注,150;")); //m_wndList.SetGridLines(true); //设置成热激活形式 //m_wndList.SetExtendedStyle(LVS_EX_TRACKSELECT|LVS_EX_ONECLICKACTIVATE|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); m_wndList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); m_wndList.InsertColumn( 0 , _T(" 姓 名") , LVCFMT_LEFT , 80 , 0); m_wndList.InsertColumn( 1 , _T("传真号码") , LVCFMT_LEFT , 100 , 2); m_wndList.InsertColumn( 2 , _T(" 状 态") , LVCFMT_LEFT , 70, 3); m_wndList.InsertColumn( 3 , _T(" 用户组") , LVCFMT_LEFT , 80 , 4); //初始化图标按扭 CRect rect; m_B_Start.GetWindowRect(&rect); this->ScreenToClient(&rect); m_B_Start.MoveWindow( rect.left , rect.top , 44 , 44 , true ); m_B_Start.SetUnSelToolTip( _T("立即发送") ); m_B_Start.ActiveToolTip( true ); m_B_Start.SetUnSelBmp( IDB_B_START ); m_B_Start.SetFlat(); m_B_New2.MoveWindow( rect.left+44 , rect.top , 44 , 44 , true ); m_B_New2.SetUnSelToolTip( _T("重新发送本列表的手机号码") ); m_B_New2.ActiveToolTip( true ); m_B_New2.SetUnSelBmp( IDB_B_NEW2 ); m_B_New2.SetFlat(); m_B_New.MoveWindow( rect.left+44+44 , rect.top , 44 , 44 , true ); m_B_New.SetUnSelToolTip( _T("新建发送列表") ); m_B_New.ActiveToolTip( true ); m_B_New.SetUnSelBmp( IDB_B_NEW ); m_B_New.SetFlat(); m_B_Save.MoveWindow( rect.left+44+44+44 , rect.top , 44 , 44 , true ); m_B_Save.SetUnSelToolTip( _T("保存当前发送列表") ); m_B_Save.ActiveToolTip( true ); m_B_Save.SetUnSelBmp( IDB_B_SAVE ); m_B_Save.SetFlat(); //m_B_Status.MoveWindow( rect.left+44+44+44 , rect.top , 44 , 44 , true ); //m_B_Status.SetUnSelToolTip( _T("刷新发送状态") ); //m_B_Status.ActiveToolTip( true ); //m_B_Status.SetUnSelBmp( IDB_B_STATE ); //m_B_Status.SetFlat(); m_B_DY.ShowWindow(SW_HIDE); /* m_B_DY.MoveWindow( rect.left+44+44+44+44 , rect.top , 44 , 44 , true ); m_B_DY.SetUnSelToolTip( _T("选择常用短语") ); m_B_DY.ActiveToolTip( true ); m_B_DY.SetUnSelBmp( IDB_B_DY ); m_B_DY.SetFlat(); */ CRect rect2; CWnd * pWnd = (CWnd *)GetDlgItem(IDC_SENDFAX_S1); pWnd->GetWindowRect( &rect2 ); long width = rect2.right - rect2.left - (44+44+44+44)-4; m_B_Null.MoveWindow( rect.left+44+44+44+44 , rect.top , width , 44 , true ); //m_B_Null.SetUnSelToolTip( _T("其它功能,必须在连接后并没有发送时才可使用!") ); m_B_Null.SetUnSelToolTip( _T("") ); m_B_Null.ActiveToolTip( true ); m_B_Null.SetUnSelBmp( IDB_B_NULL ); m_B_Null.SetFlat(); m_bInit = true; //启用保存ID的线程 //线程中退出时会出错,暂时停止启动此线程 //::AfxBeginThread((AFX_THREADPROC)AutoSaveLog,(LPVOID)this,/*THREAD_PRIORITY_LOWEST*/THREAD_PRIORITY_BELOW_NORMAL); } void DLG_SendFax::OnSendFaxSelAttach1() { 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 = TEXT("所有支持文件 (*.doc,*.xls,*.xlsx,*.txt)\0*.doc;*.xls;*.xlsx;*.txt\0\0"); sOpen.lpstrDefExt = NULL; 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 ) ) { WIN32_FILE_ATTRIBUTE_DATA filedata={0}; if ( !GetFileAttributesEx(sOpen.lpstrFile,GetFileExInfoStandard,&filedata) ) { MessageBox(_T("打开文件错误,无法做为传真附件!") , _T("错误") , MB_ICONWARNING ); return ; } if ( filedata.nFileSizeHigh>0 || filedata.nFileSizeLow>4096*1024 ) { MessageBox(_T("传真附件过大,请重新选择!") , _T("错误") , MB_ICONWARNING ); return ; } m_strAttach1 = sOpen.lpstrFile; m_E_Attach1.SetWindowText(CFFaxDF::ExPath(m_strAttach1)); m_bAttachModify = true; m_bModify=true; return ; } } void DLG_SendFax::OnSendFaxSelAttach2() { 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 = TEXT("所有支持文件 (*.doc,*.xls,*.xlsx,*.txt)\0*.doc;*.xls;*.xlsx;*.txt\0\0"); sOpen.lpstrDefExt = NULL; 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 ) ) { WIN32_FILE_ATTRIBUTE_DATA filedata={0}; if ( !GetFileAttributesEx(sOpen.lpstrFile,GetFileExInfoStandard,&filedata) ) { MessageBox(_T("打开文件错误,无法做为传真附件!") , _T("错误") , MB_ICONWARNING ); return ; } if ( filedata.nFileSizeHigh>0 || filedata.nFileSizeLow>4096*1024 ) { MessageBox(_T("传真附件过大,请重新选择!") , _T("错误") , MB_ICONWARNING ); return ; } m_strAttach2 = sOpen.lpstrFile; m_E_Attach2.SetWindowText(CFFaxDF::ExPath(m_strAttach2)); m_bAttachModify = true; m_bModify=true; return ; } } void DLG_SendFax::OnSendFaxSelAttach3() { 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 = TEXT("所有支持文件 (*.doc,*.xls,*.xlsx,*.txt)\0*.doc;*.xls;*.xlsx;*.txt\0\0"); sOpen.lpstrDefExt = NULL; 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 ) ) { WIN32_FILE_ATTRIBUTE_DATA filedata={0}; if ( !GetFileAttributesEx(sOpen.lpstrFile,GetFileExInfoStandard,&filedata) ) { MessageBox(_T("打开文件错误,无法做为传真附件!") , _T("错误") , MB_ICONWARNING ); return ; } if ( filedata.nFileSizeHigh>0 || filedata.nFileSizeLow>4096*1024 ) { MessageBox(_T("传真附件过大,请重新选择!") , _T("错误") , MB_ICONWARNING ); return ; } m_strAttach3 = sOpen.lpstrFile; m_E_Attach3.SetWindowText(CFFaxDF::ExPath(m_strAttach3)); m_bAttachModify = true; m_bModify=true; return ; } } void DLG_SendFax::OnSendFaxSelAttach4() { 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 = TEXT("所有支持文件 (*.doc,*.xls,*.xlsx,*.txt)\0*.doc;*.xls;*.xlsx;*.txt\0\0"); sOpen.lpstrDefExt = NULL; 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 ) ) { WIN32_FILE_ATTRIBUTE_DATA filedata={0}; if ( !GetFileAttributesEx(sOpen.lpstrFile,GetFileExInfoStandard,&filedata) ) { MessageBox(_T("打开文件错误,无法做为传真附件!") , _T("错误") , MB_ICONWARNING ); return ; } if ( filedata.nFileSizeHigh>0 || filedata.nFileSizeLow>4096*1024 ) { MessageBox(_T("传真附件过大,请重新选择!") , _T("错误") , MB_ICONWARNING ); return ; } m_strAttach4 = sOpen.lpstrFile; m_E_Attach4.SetWindowText(CFFaxDF::ExPath(m_strAttach4)); m_bAttachModify = true; m_bModify=true; return ; } } void DLG_SendFax::OnSendFaxSelAttach5() { 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 = TEXT("所有支持文件 (*.doc,*.xls,*.xlsx,*.txt)\0*.doc;*.xls;*.xlsx;*.txt\0\0"); sOpen.lpstrDefExt = NULL; 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 ) ) { WIN32_FILE_ATTRIBUTE_DATA filedata={0}; if ( !GetFileAttributesEx(sOpen.lpstrFile,GetFileExInfoStandard,&filedata) ) { MessageBox(_T("打开文件错误,无法做为传真附件!") , _T("错误") , MB_ICONWARNING ); return ; } if ( filedata.nFileSizeHigh>0 || filedata.nFileSizeLow>4096*1024 ) { MessageBox(_T("传真附件过大,请重新选择!") , _T("错误") , MB_ICONWARNING ); return ; } m_strAttach5 = sOpen.lpstrFile; m_E_Attach5.SetWindowText(CFFaxDF::ExPath(m_strAttach5)); m_bAttachModify = true; m_bModify=true; return ; } } void DLG_SendFax::OnSendfaxNumadd() { long lLen=m_E_Num.GetWindowTextLength(); TCHAR * szBuf = new TCHAR[lLen+10]; m_E_Num.GetWindowText( szBuf , lLen+10 ); if ( _tcslen( szBuf ) <=0 ) { MessageBox( _T("请先输入要添加的传真号码!") , _T("错误") , MB_ICONWARNING ); m_E_Num.SetFocus(); delete szBuf; return ; } _tcscat( szBuf , _T(";;") ); TCHAR szMobile[64]={0}; long i=0; long lCount = 0; while( GetReqMess( szBuf , szMobile , i , ';' , _tcslen(szBuf)) ) { ExMobileGZM(szMobile); //去除国际码 if ( isFaxNum( szMobile ) ) //找到新号码 { lCount ++; Send_User user={0}; _tcscpy( user.szMobile , szMobile ); AddUser(user); } memset(szMobile , 0 , sizeof(szMobile) ); i++; } m_E_Num.SetWindowText(_T("")); m_E_Num.SetFocus(); if ( lCount <= 0 ) { MessageBox( _T("手机号码输入有误!\r\n多个号码请以\";\"号隔开!") , _T("错误") , MB_ICONWARNING ); } else { RefreshListCount(); //刷新显示列表上的记录计数 } delete szBuf; } BOOL DLG_SendFax::PreTranslateMessage(MSG* pMsg) { //此举是为了用户在输入号码时按了回车然后转到输入内容 if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) { if ( pMsg->hwnd == m_E_Num ) { OnSendfaxNumadd(); return true; } } return CDialog::PreTranslateMessage(pMsg); } void DLG_SendFax::AddUser(Send_User user, long lItem) { ExChar(user.szMobile,_T(" ")); ExChar(user.szMobile,_T("\r")); ExChar(user.szMobile,_T("\n")); ExChar(user.szMobile,_T("\t")); ExMobileGZM(user.szMobile); //去除国际码 if ( !isFaxNum( user.szMobile ) ) //不是手机号码,不用添加或修改 return ; //判断是否黑名单 if ( lItem < 0 ) { if ( this->IsLocakBack(user.szMobile ) && (m_bBackReMobile || m_lBackReMobileType==0) ) //需要显示警告,或者自动过滤 { if ( m_bBackReMobile ) { CString str; str.Format( _T("%s,%s"),user.szName , user.szMobile); DLG_AddBack dlg(str,this); //提示重复号码 dlg.DoModal(); m_bBackReMobile = dlg.m_bShowReMobile; m_lBackReMobileType = dlg.m_lReMobileType; } if ( m_lBackReMobileType==0 ) //自动过滤 return; } } if ( lItem < 0 ) { if ( m_B_ReMobile.GetCheck() && (m_bShowReMobile || m_lReMobileType==0) ) //需要显示警告,或者自动过滤 { if ( isMobileInList(user.szMobile) ) { if ( m_bShowReMobile ) { CString str; str.Format( _T("%s,%s"),user.szName , user.szMobile); DLG_AddWarning dlg(str,this); //提示重复号码 dlg.DoModal(); m_bShowReMobile = dlg.m_bShowReMobile; m_lReMobileType = dlg.m_lReMobileType; } if ( m_lReMobileType==0 ) //自动过滤 return; } } m_wndList.InsertItem( 0 , user.szName ); lItem = 0; //插入到临时数据库 CString str; str.Format( _T("insert into faxsendtemp (Mobile) values ('%s') " ), SqlStr(user.szMobile) ); m_AdoRS4.Open(str,adCmdText); } else { m_wndList.SetItemText( lItem,0,user.szName ); //修改数据库 CString str,strMobile; strMobile = m_wndList.GetItemText(lItem,1); str.Format( _T("select top 1 * from faxsendtemp where mobile='%s' order by mobile") ,strMobile) ; if ( m_AdoRS4.Open(str) && !m_AdoRS4.IsEOF()) { long lID=0; m_AdoRS4.GetCollect( _T("ItemID") , lID ); m_AdoRS4.Close(); str.Format( _T("update faxsendtemp set Mobile='%s' where ItemID=%d") , SqlStr(user.szMobile), lID); m_AdoRS4.Open(str); } } m_wndList.SetItemText( lItem,1,user.szMobile ); if ( user.szStatus[0] == '1' ) m_wndList.SetItemText( lItem,2,_T("提交成功")); else if ( user.szStatus[0] == '2' ) m_wndList.SetItemText( lItem,2,_T("提交失败")); else m_wndList.SetItemText( lItem,2,_T("未发")); m_wndList.SetItemText( lItem,3,user.szGroup ); m_wndList.SetItemData( lItem,user.lItemID); m_bModify = true; } void DLG_SendFax::RefreshListCount() { long lCount = m_wndList.GetItemCount(); CString strMsg; strMsg.Format( _T("发送列表 共有%d条记录") , lCount ); m_S_ListCount.SetWindowText( strMsg ); } BOOL DLG_SendFax::IsLocakBack(CString strMobile) { CString str; str.Format( _T("select * from back where Mobile='%s' and Status=1") , strMobile ); if ( m_AdoRS6.Open(str) && !m_AdoRS6.IsEOF() ) return true; else return false; } BOOL DLG_SendFax::isMobileInList(const TCHAR *pMobile) { CString str; str.Format( _T("select top 1 * from faxsendtemp where Mobile='%s' order by Mobile") , pMobile ); if ( m_AdoRS4.Open(str,adCmdText,adOpenForwardOnly,adLockReadOnly) && !m_AdoRS4.IsEOF() ) return true; else return false; } BOOL DLG_SendFax::CloseList() { if (m_bModify) { long lRet = MessageBox(_T("发送列表已更改,是否保存?") , _T("保存") , MB_ICONQUESTION|MB_YESNOCANCEL); if ( lRet == IDYES ) { return List_Save(); } if ( lRet == IDNO ) { //新建一个列表 EnableModifyWindow( true ); //可以修改 m_B_DS.SetCheck(false); //没有定时 SYSTEMTIME t;::GetLocalTime(&t); DateTime_SetSystemtime( m_D_Date.m_hWnd , GDT_VALID , &t ); DateTime_SetSystemtime( m_D_Time.m_hWnd , GDT_VALID , &t ); m_wndList.ShowWindow(SW_HIDE); m_wndList.DeleteAllItems(); //没有列表 //删除临时数据库 CString str; m_AdoRS4.Open(_T("delete from faxsendtemp where 1=1") ); m_wndList.ShowWindow(SW_SHOW); RefreshListCount(); //刷新显示列表上的记录计数 m_E_Title.SetWindowText( _T("") ); //没有内容 OnSendfaxDs(); //设置定时 m_bModify = false; m_lBoxID = 0; m_lBoxType = 0; //待发短信 m_lFaxUpID = 0; m_E_Title.SetFocus(); return true; } else return false; //选择了取消 } return true; } BOOL DLG_SendFax::List_Save(BOOL bTJ) { if ( !bTJ && !m_bModify ) //没有需要修改的内容,直接返回即可 return true; TCHAR szSelect[128]={0}; COleDateTime tTimer; //定时时间 TCHAR szBoxType[8]={0}; m_E_Title.GetWindowText( m_strTitle ); if ( m_strTitle.GetLength() <=0 ) //内容不能为空 { MessageBox(_T("输入的传真说明不能为空!"),_T("错误"),MB_ICONWARNING); m_E_Title.SetFocus(); return false; } if ( m_wndList.GetItemCount() <= 0 ) { MessageBox(_T("列表里没输入要发送的目标号码!"),_T("错误"),MB_ICONWARNING); return false; } //附件 CString strAttach1,strAttach2,strAttach3,strAttach4,strAttach5; m_E_Attach1.GetWindowText(strAttach1); m_E_Attach2.GetWindowText(strAttach2); m_E_Attach3.GetWindowText(strAttach3); m_E_Attach4.GetWindowText(strAttach4); m_E_Attach5.GetWindowText(strAttach5); if ( strAttach1.GetLength()<=0 && strAttach2.GetLength()<=0 && strAttach3.GetLength()<=0 && strAttach4.GetLength()<=0 && strAttach5.GetLength()<=0 ) { MessageBox(_T("至少需要一份传真附件!"),_T("错误"),MB_ICONWARNING); m_E_Attach1.SetFocus(); return false; } if ( m_lBoxType == 0 ) _tcscpy( szBoxType, _T("0") ); //待发 else _tcscpy( szBoxType, _T("1") ); //已发 memset(&m_tTimer,0,sizeof(m_tTimer)); if ( m_B_DS.GetCheck() ) //定时短信 { SYSTEMTIME t={0}; SYSTEMTIME t1={0}; DateTime_GetSystemtime( m_D_Date.m_hWnd , &t ); DateTime_GetSystemtime( m_D_Time.m_hWnd , &t1 ); t.wHour = t1.wHour; t.wMinute = t1.wMinute; t.wSecond = 0; tTimer = COleDateTime(t); if ( !m_bSendSR && tTimer < COleDateTime::GetCurrentTime() ) //如果不是生日祝福,需要判断时间是否过期 { MessageBox( _T("定时时间不能小于当前时间,请调整!") , _T("错误") , MB_ICONWARNING ); m_D_Date.SetFocus(); return false; } tTimer.GetAsSystemTime( m_tTimer ); //取定时时间 } else { tTimer.SetStatus( COleDateTime::null ); } if ( m_lBoxID ) //有ID,相当于修改 { _stprintf( szSelect , _T("select * from faxbox where BoxID=%d") , m_lBoxID ); BOOL b = m_AdoRS.Open( szSelect ); if ( b && m_AdoRS.GetRecordCount() ) { m_AdoRS.MoveFirst(); m_AdoRS.PutCollect( _T("BoxType") , szBoxType ); m_AdoRS.PutCollect( _T("FaxUpID") , m_lFaxUpID ); m_AdoRS.PutCollect( _T("Title") , m_strTitle ); m_AdoRS.PutCollect( _T("Timer") , tTimer ); m_AdoRS.PutCollect( _T("FileName1") , m_strAttach1 ); m_AdoRS.PutCollect( _T("FileName2") , m_strAttach2 ); m_AdoRS.PutCollect( _T("FileName3") , m_strAttach3 ); m_AdoRS.PutCollect( _T("FileName4") , m_strAttach4 ); m_AdoRS.PutCollect( _T("FileName5") , m_strAttach5 ); m_AdoRS.Update(); } m_AdoRS.Close(); //删除所有原已有记录 if ( m_bModify ) //没做过修改,不用修改smsitem { _stprintf( szSelect , _T("delete from faxitem where BoxID=%d") , m_lBoxID ); b = m_AdoRS.Open( szSelect ); } } else { //新增 BOOL b = m_AdoRS.Open( _T("faxbox") , adCmdTable ); if ( b ) { m_AdoRS.AddNew(); m_AdoRS.PutCollect( _T("BoxType") , szBoxType ); m_AdoRS.PutCollect( _T("FaxUpID") , m_lFaxUpID ); m_AdoRS.PutCollect( _T("Title") , m_strTitle ); m_AdoRS.PutCollect( _T("FileName1") , m_strAttach1 ); m_AdoRS.PutCollect( _T("FileName2") , m_strAttach2 ); m_AdoRS.PutCollect( _T("FileName3") , m_strAttach3 ); m_AdoRS.PutCollect( _T("FileName4") , m_strAttach4 ); m_AdoRS.PutCollect( _T("FileName5") , m_strAttach5 ); m_AdoRS.PutCollect( _T("Timer") , tTimer ); SYSTEMTIME t;::GetLocalTime(&t); COleDateTime ot(t); m_AdoRS.PutCollect( _T("CreateTime") ,ot ); m_AdoRS.Update(); m_AdoRS.GetCollect( _T("BoxID") , m_lBoxID ); //取得新增的BoxID } m_AdoRS.Close(); } if ( !m_bModify ) //没做过修改,不用修改smsitem { return true; } //启用保存Item的线程 m_bSaveList = true; //::AfxBeginThread((AFX_THREADPROC)AutoSaveItem,(LPVOID)this,THREAD_PRIORITY_NORMAL/*THREAD_PRIORITY_BELOW_NORMAL*/); ::AfxBeginThread((AFX_THREADPROC)AutoSaveItem,(LPVOID)this,THREAD_PRIORITY_BELOW_NORMAL); Sleep(500); //秒为延时一会 m_bModify = false; //保存完毕,没有要修改的内容 return true; } UINT DLG_SendFax::AutoSaveItem(void *pParam) { DLG_SendFax * pDlg = (DLG_SendFax *)pParam; CString str; try { //将Item添中取BoxItem BOOL b = pDlg->m_AdoRS3.Open( _T("faxitem") , adCmdTable ); if ( b ) { long lCount = pDlg->m_wndList.GetItemCount(); Send_User user; for ( int i = 0 ; i< lCount && pDlg->m_bInit ; i++ ) { user = pDlg->GetUser(i); pDlg->m_AdoRS3.AddNew(); pDlg->m_AdoRS3.PutCollect( _T("BoxID") , pDlg->m_lBoxID ); pDlg->m_AdoRS3.PutCollect( _T("GroupID") , user.szGroup ); pDlg->m_AdoRS3.PutCollect( _T("Name") , user.szName ); pDlg->m_AdoRS3.PutCollect( _T("FaxNum") , user.szMobile ); pDlg->m_AdoRS3.PutCollect( _T("Status") , user.szStatus ); pDlg->m_AdoRS3.Update(); pDlg->m_AdoRS3.GetCollect( _T("ItemID") , user.lItemID ); //取新的ItemId pDlg->m_wndList.SetItemData( i , user.lItemID ); //设置新的ItemID; } pDlg->m_AdoRS3.Close(); } if ( pDlg->m_bInit ) { /* //因为保存了新内容,所以要刷新显示列表 if ( pDlg->m_lBoxType == 0 ) pDlg->m_pMainFrame->m_pBaseView->m_dlgSmsDF.RefreshInfo();//待发 else pDlg->m_pMainFrame->m_pBaseView->m_dlgSmsYF.RefreshInfo();//已发 */ } pDlg->m_bSaveList = false; } catch(...) { return 0; } return 1; } void DLG_SendFax::CloseAutoSave(void) { m_bInit = false; } UINT DLG_SendFax::AutoSaveLog(void *pParam) { DLG_SendFax * pDlg = (DLG_SendFax *)pParam; CString str; try { while( pDlg->m_bInit ) { //取队列中的内容并且开发处理 while (pDlg->m_bInit && !pDlg->m_SaveItemStatus.IsEmpty() ) { SaveFaxStatus * pData = pDlg->m_SaveItemStatus.GetHead(); str.Format(_T("update faxitem set SendID=%d , Status='%s' where ItemID=%d ") , pData->lSendID , pData->szStatus , pData->lItemID ); pDlg->m_AdoRS2.Open( str ); if ( pDlg->m_B_SaveSendLog.GetCheck() ) { CString strName = pData->szName; CString strMsg = pData->szTitle; strName.Replace( _T("'"),_T("''")); strMsg.Replace( _T("'"),_T("''")); str.Format(_T("insert into faxlog (SendID,FaxFileID,SendNum,Recver,RecvNum,Title,Status,SubTime) values (%d,%d,'%s','%s','%s','%s',%d,now())"), pData->lSendID,pData->lFaxFileID,pData->szSendNum,strName,pData->szFaxNum,strMsg,pData->lStatus); pDlg->m_AdoRS2.Open( str ); } pDlg->m_SaveItemStatus.RemoveHead(); delete pData; Sleep(5); } Sleep(50); } //清除队列中的内容 while (pDlg->m_bInit && !pDlg->m_SaveItemStatus.IsEmpty()) { SaveFaxStatus * pData = pDlg->m_SaveItemStatus.GetHead(); pDlg->m_SaveItemStatus.RemoveHead(); delete pData; } } catch(...) { return 0; } return 1; } void DLG_SendFax::EnableModifyWindow(BOOL bModify) { m_B_DS.EnableWindow( bModify ); m_D_Date.EnableWindow( bModify ); m_D_Time.EnableWindow( bModify ); m_E_Title.EnableWindow( bModify ); m_E_Num.EnableWindow( bModify ); m_B_Add.EnableWindow( bModify ); m_B_Start.EnableWindow( bModify ); m_B_Save.EnableWindow( bModify ); m_B_DY.EnableWindow( bModify ); m_B_New.EnableWindow(bModify); m_B_New2.EnableWindow(bModify); GetDlgItem(IDC_SEND_FAX_SEL_ATTACH1)->EnableWindow(bModify); GetDlgItem(IDC_SEND_FAX_SEL_ATTACH2)->EnableWindow(bModify); GetDlgItem(IDC_SEND_FAX_SEL_ATTACH3)->EnableWindow(bModify); GetDlgItem(IDC_SEND_FAX_SEL_ATTACH4)->EnableWindow(bModify); GetDlgItem(IDC_SEND_FAX_SEL_ATTACH5)->EnableWindow(bModify); if ( !m_pMainFrame->GetUserPurview( PURVIEW_SENDP , false ) ) { m_E_Num.EnableWindow( false ); //没有发送私人电话本的权限 m_B_Add.EnableWindow( false ); } } void DLG_SendFax::OnSendfaxDs() { m_bModify = true;//已修改过 BOOL b = m_B_DS.GetCheck(); if ( b ) { m_D_Date.EnableWindow( true ); m_D_Time.EnableWindow( true ); } else { m_D_Date.EnableWindow( false ); m_D_Time.EnableWindow( false ); } } Send_User DLG_SendFax::GetUser(long lItem, BOOL bDelay) { Send_User user={0}; TCHAR szStatus[16]={0}; m_wndList.GetItemText( lItem , 0 , user.szName , sizeof(user.szName)-1); m_wndList.GetItemText( lItem , 1 , user.szMobile , sizeof(user.szMobile)-1 ); m_wndList.GetItemText( lItem , 2 , szStatus , sizeof(szStatus)-1 ); m_wndList.GetItemText( lItem , 3 , user.szGroup , sizeof(user.szGroup)-1 ); user.lItemID = m_wndList.GetItemData( lItem ); if ( !_tcscmp(szStatus,_T("提交成功")) || !_tcscmp(szStatus,_T("发送成功")) ) _tcscpy(user.szStatus , _T("1") ); else if ( !_tcscmp(szStatus,_T("提交失败")) ) _tcscpy(user.szStatus , _T("2") ); else _tcscpy(user.szStatus , _T("0") ); //未发 return user; } long DLG_SendFax::GetBoxID() { return m_lBoxID; } BOOL DLG_SendFax::List_AddUser(long lCount, Send_User *pUser) { if ( m_B_ReMobile.GetCheck() && lCount>MAX_SENDLIST_NOTIP ) { int iRet = MessageBox( _T("准备添加的记录数过大,是否需要判断重复号码?\r\n注:如果需要判断,则添加速度较慢,但可以排除重复号码。") , _T("信息") , MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2); if ( iRet != IDYES ) m_B_ReMobile.SetCheck(false); } if ( m_lBoxType == 1 ) //如果是查看已发短信,直接新建新的短信列表 List_New(); m_wndList.ShowWindow( SW_HIDE ); //加快显示速度 for ( int i = 0 ; i< lCount ; i++ ) AddUser( pUser[i] ); m_wndList.ShowWindow( SW_SHOW ); //加快显示速度 RefreshListCount(); //刷新显示列表上的记录计数 return true; } BOOL DLG_SendFax::List_New() { if ( IsSend() ) //判断是否在正在发送短信 return false; if (!CloseList()) return false; /* long lCount=0; while( m_bSaveList && lCount<50 ) //等待保存列表返回 { Sleep(100); } */ EnableModifyWindow( true ); //可以修改 m_B_DS.SetCheck(false); //没有定时 SYSTEMTIME t;::GetLocalTime(&t); DateTime_SetSystemtime( m_D_Date.m_hWnd , GDT_VALID , &t ); DateTime_SetSystemtime( m_D_Time.m_hWnd , GDT_VALID , &t ); m_wndList.ShowWindow(SW_HIDE); m_wndList.DeleteAllItems(); //没有列表 //删除临时数据库 CString str; m_AdoRS4.Open(_T("delete from faxsendtemp where 1=1") ); m_wndList.ShowWindow(SW_SHOW); RefreshListCount(); //刷新显示列表上的记录计数 m_E_Title.SetWindowText( _T("") ); //没有内容 OnSendfaxDs(); //设置定时 m_bModify = false; m_lBoxID = 0; m_lBoxType = 0; //待发短信 m_lFaxUpID = 0; //上传ID m_E_Title.SetFocus(); this->SetFocus(); return true; } BOOL DLG_SendFax::List_Read(long lBoxID) { if ( IsSend() ) //判断是否在正在发送短信 return false; if ( lBoxID == m_lBoxID ) //要打开的ID与已读入的ID相同,不必重做 return true; if (!CloseList()) return false; //读入基本信息 TCHAR szSelect[128]={0}; TCHAR szBuf[1024]={0}; COleDateTime ot; _stprintf( szSelect , _T("select * from faxbox where BoxID=%d") , lBoxID ); BOOL b = m_AdoRS.Open( szSelect ); long lCount=m_AdoRS.GetRecordCount(); CString str; if ( b && lCount>0 ) { m_AdoRS.MoveFirst(); m_AdoRS.GetCollect( _T("BoxType") , szBuf ); m_lBoxType = _ttol(szBuf); m_AdoRS.GetCollect( _T("FaxUpID") , m_lFaxUpID ); m_AdoRS.GetCollect( _T("Title") , str ); m_E_Title.SetWindowText( str ); m_AdoRS.GetCollect( _T("FileName1") , m_strAttach1 ); m_E_Attach1.SetWindowText(CFFaxDF::ExPath(m_strAttach1)); m_AdoRS.GetCollect( _T("FileName2") , m_strAttach2 ); m_E_Attach2.SetWindowText(CFFaxDF::ExPath(m_strAttach2)); m_AdoRS.GetCollect( _T("FileName3") , m_strAttach3 ); m_E_Attach3.SetWindowText(CFFaxDF::ExPath(m_strAttach3)); m_AdoRS.GetCollect( _T("FileName4") , m_strAttach4 ); m_E_Attach4.SetWindowText(CFFaxDF::ExPath(m_strAttach4)); m_AdoRS.GetCollect( _T("FileName5") , m_strAttach5 ); m_E_Attach5.SetWindowText(CFFaxDF::ExPath(m_strAttach5)); m_AdoRS.GetCollect( _T("Timer") , ot ); if ( ot.GetStatus() == COleDateTime::valid ) //有效时间 { m_B_DS.SetCheck( true ); SYSTEMTIME t; ot.GetAsSystemTime( t ); DateTime_SetSystemtime( m_D_Date.m_hWnd , GDT_VALID , &t ); DateTime_SetSystemtime( m_D_Time.m_hWnd , GDT_VALID , &t ); } else { m_B_DS.SetCheck( false ); SYSTEMTIME t;::GetLocalTime(&t); DateTime_SetSystemtime( m_D_Date.m_hWnd , GDT_VALID , &t ); DateTime_SetSystemtime( m_D_Time.m_hWnd , GDT_VALID , &t ); } OnSendfaxDs(); if ( m_lBoxType == 1 ) //已发,不让操作,只能查询 { EnableModifyWindow( false ); //不可以修改 m_B_New.EnableWindow(true); //新建与重发是可以的。 m_B_New2.EnableWindow(true); //新建与重发是可以的。 } else { EnableModifyWindow( true ); //可以修改 } _stprintf( szSelect , _T("select * from faxitem where BoxID=%d") , lBoxID ); m_wndList.ShowWindow(SW_HIDE); m_wndList.DeleteAllItems(); //没有列表 //删除临时数据库 CString str; m_AdoRS4.Open(_T("delete from faxsendtemp where 1=1") ); m_wndList.ShowWindow(SW_SHOW); b = m_AdoRS.Open( szSelect ); lCount=m_AdoRS.GetRecordCount(); if ( b && lCount>0 ) { if ( m_B_ReMobile.GetCheck() && lCount>MAX_SENDLIST_NOTIP ) { int iRet = MessageBox( _T("准备读取的记录数过大,是否需要判断重复号码?\r\n注:如果需要判断,则读取速度较慢,但可以排除重复号码。") , _T("信息") , MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2); if ( iRet != IDYES ) m_B_ReMobile.SetCheck(false); } m_wndList.ShowWindow( SW_HIDE ); //加快显示速度 CAdoFaxItem adoFax; m_AdoRS.RecordBinding( adoFax ); m_AdoRS.MoveFirst(); while( !m_AdoRS.IsEOF() ) { Send_User user={0}; _tcscpy(user.szGroup , adoFax.m_GroupID ); _tcscpy(user.szName , adoFax.m_Name ); _tcscpy(user.szMobile , adoFax.m_FaxNum ); _tcscpy(user.szStatus , adoFax.m_Status ); user.lSendID = adoFax.m_SendID; user.lItemID = adoFax.m_ItemID; memset(&adoFax,0,sizeof(adoFax)); m_AdoRS.MoveNext(); AddUser(user); } m_wndList.ShowWindow( SW_SHOW ); //加快显示速度 } RefreshListCount(); //刷新显示列表上的记录计数 m_lBoxID = lBoxID; m_bModify = false; //刚刚读入,不需要修改 m_bAttachModify = false; this->SetFocus(); return true; } else { return false; } return false; } BOOL DLG_SendFax::List_ReSend(long lBoxID) { if ( IsSend() ) //判断是否在正在发送短信 return false; if (!List_Read(lBoxID)) return false; EnableModifyWindow( true ); //可以修改 OnSendfaxDs(); //设置定时 m_wndList.ShowWindow( SW_HIDE ); //加快显示速度 long lCount = m_wndList.GetItemCount(); //将全部内容置为未发 for ( int i = 0 ; i< lCount ; i++ ) { m_wndList.SetItemText( i,2,_T("未发")); } m_wndList.ShowWindow( SW_SHOW ); //加快显示速度 m_lBoxID = 0; //未保存 m_lBoxType = 0; //待发 m_bModify = true; //已修改 m_bAttachModify = false; //未修改 this->SetFocus(); return true; } BOOL DLG_SendFax::IsSend() { if ( m_bSend ) { MessageBox( _T("正在发送短信中,此操作无效!") , _T("错误") , MB_ICONWARNING ); } return m_bSend; } void DLG_SendFax::OnSendfaxNew2() { if ( m_lBoxID<=0 ) return ; CString strTemp = _T("你选择的是\"重新发送\",本任务中所有传真将会被再次重新发送!\r\n") \ _T("是否继续?"); int iRet = MessageBox( strTemp,_T("提问") , MB_ICONQUESTION|MB_YESNO ); if ( iRet != IDYES ) return ; List_ReSend( m_lBoxID ); } void DLG_SendFax::OnSendfaxNew() { List_New(); } void DLG_SendFax::OnSendfaxSave() { if ( List_Save(true) ) this->ShowWindow( SW_HIDE ); } void DLG_SendFax::OnDblclkSendfaxList(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; On_User_Modify(); } void DLG_SendFax::OnKeydownSendfaxList(NMHDR* pNMHDR, LRESULT* pResult) { LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR; *pResult = 0; if ( pLVKeyDow->wVKey == VK_DELETE ) { On_User_Del(); } if ( pLVKeyDow->wVKey == VK_INSERT) { On_User_Add(); } if ( pLVKeyDow->wVKey == VK_SPACE) { On_User_Modify(); } if ( pLVKeyDow->wVKey == 'S' || pLVKeyDow->wVKey == 's') { On_User_Status(); } if ( pLVKeyDow->wVKey == 'R' || pLVKeyDow->wVKey == 'r') { On_User_Status(); } if ( pLVKeyDow->wVKey == 'C' || pLVKeyDow->wVKey == 'c') { On_User_Clear(); } if ( pLVKeyDow->wVKey == 'I' || pLVKeyDow->wVKey == 'i') { On_User_Inport(); } if ( pLVKeyDow->wVKey == 'E' || pLVKeyDow->wVKey == 'e') { On_User_Export(); } if ( pLVKeyDow->wVKey == 'A' || pLVKeyDow->wVKey == 'a') { m_wndList.SetItemState(-1, LVIS_SELECTED, LVIS_SELECTED); //全选 //m_wndList.SelectAllItems(); } } void DLG_SendFax::OnDatetimechangeSendfaxDsD(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; m_bModify = true;//已修改过 } void DLG_SendFax::OnDatetimechangeSendfaxDsT(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; m_bModify = true;//已修改过 } void DLG_SendFax::OnRclickSendfaxList(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; ShowRMenu(); } void DLG_SendFax::ShowRMenu() { if ( m_lBoxType == 1 ) //列表为已发的不能编辑 return ; if ( m_bSend ) //正在发送,不能编辑 return ; CMenu menu; menu.CreatePopupMenu(); BOOL bLock = false; long lItem = this->GetCurrentSelected(); //添加 if ( m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false) ) { menu.AppendMenu(MF_STRING , SEND_FAX_USER_ADD, _T(" 添加用户 ") ); } else { menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_FAX_USER_ADD , _T(" 添加用户 ") ); } menu.AppendMenu(MF_SEPARATOR ); //修改 if (m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false) && lItem >=0) { menu.AppendMenu(MF_STRING , SEND_FAX_USER_MODIFY, _T(" 修 改 ") ); } else { menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_FAX_USER_MODIFY , _T(" 修 改 ") ); } //删除 if ( lItem >=0 ) { menu.AppendMenu(MF_STRING , SEND_FAX_USER_DEL, _T(" 删 除 ") ); } else { menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_FAX_USER_DEL , _T(" 删 除 ") ); } //清空 menu.AppendMenu(MF_SEPARATOR ); menu.AppendMenu(MF_STRING , SEND_FAX_USER_CLEAR, _T(" 清 空 ") ); menu.AppendMenu(MF_SEPARATOR ); if (m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false)) { menu.AppendMenu(MF_STRING , SEND_FAX_USER_INPORT, _T(" 导入列表 ") ); } else { menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_FAX_USER_INPORT, _T(" 导入列表 ") ); } menu.AppendMenu(MF_STRING , SEND_FAX_USER_EXPORT, _T(" 导出列表 ") ); menu.AppendMenu(MF_SEPARATOR ); menu.AppendMenu(MF_STRING , SEND_FAX_USER_STATUS, _T(" 刷新状态 ") ); //显示菜单 POINT pt ; ::GetCursorPos( &pt ); //this->ClientToScreen( &pt); menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL); menu.DestroyMenu(); } void DLG_SendFax::On_User_Add() { if ( !m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false) ) return ; Send_User user={0}; DLG_Send_User dlg(this); dlg.SetParam( user ); dlg.SetEditType(2); //传真 if ( dlg.DoModal() == IDOK ) { m_bModify = true; //已修改 user = dlg.GetParam(); AddUser( user ); RefreshListCount(); //刷新显示列表上的记录计数 } } void DLG_SendFax::On_User_Modify() { if ( !m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false) ) return ; long lItem = GetCurrentSelected(); if ( lItem < 0 ) return ; Send_User user = GetUser(lItem); if ( user.szStatus[0] == '1' ) //发送成功 { MessageBox( _T("因为此号码已成功发送传真,所以不能修改!") , _T("错误") , MB_ICONWARNING ); return ; } DLG_Send_User dlg(this); dlg.SetParam( user ); dlg.SetEditType(2); //传真 if ( dlg.DoModal() == IDOK ) { m_bModify = true; //已修改 user = dlg.GetParam(); AddUser( user , lItem ); //重新显示内容 } } void DLG_SendFax::On_User_Del() { CString str; long lCount = m_wndList.GetSelectedCount(); long * pDel = new long[lCount+1]; memset( pDel , 0 , sizeof(long)*lCount); POSITION pos = m_wndList.GetFirstSelectedItemPosition(); long i=0; while ( pos ) { pDel[i] = m_wndList.GetNextSelectedItem(pos); i++; } m_wndList.ShowWindow( SW_HIDE ); //为了加快显示速度 for ( i = 0 ; i< lCount ; i++ ) { Send_User user = GetUser(pDel[lCount-i-1]); if ( user.szStatus[0] == '1' ) //发送成功的不能删除 { continue; } m_wndList.DeleteItem( pDel[lCount-i-1] ); //在临时数据库中删除 str.Format( _T("select top 1 * from faxsendtemp where mobile='%s' order by mobile") ,SqlStr(user.szMobile)) ; if ( m_AdoRS4.Open(str) && !m_AdoRS4.IsEOF()) { long lID=0; m_AdoRS4.GetCollect( _T("ItemID") , lID ); m_AdoRS4.Close(); str.Format( _T("delete from faxsendtemp where ItemID=%d") , lID ); m_AdoRS4.Open(str); } } m_wndList.ShowWindow( SW_SHOW ); //为了加快显示速度 delete pDel; m_bModify = true;//已修改过 RefreshListCount(); //刷新显示列表上的记录计数 } void DLG_SendFax::On_User_Clear() { m_wndList.ShowWindow( SW_HIDE ); //为了加快显示速度 CString str; //需要倒转删除 long lCount=m_wndList.GetItemCount(); for ( int i = 0 ; iGetUserPurview(PURVIEW_SENDG) ) // return false; COleDataObject * pData = (COleDataObject *)wParam; UINT iCF = ::RegisterClipboardFormat( _T("CORPSMS_USER") ); if( pData->IsDataAvailable( iCF ) ) { HGLOBAL hMem = pData->GetGlobalData( iCF ); BYTE * lp = (BYTE *)GlobalLock((HGLOBAL) hMem);//lock source if (lp != NULL) { long * plCount = (long *)lp; Send_User * pUser = (Send_User *)(lp+sizeof(long)); m_wndList.ShowWindow( SW_HIDE ); //加快显示速度 for ( int i = 0 ; i<*plCount;i++ ) { AddUser( *pUser ); pUser ++; } m_wndList.ShowWindow( SW_SHOW ); //加快显示速度 RefreshListCount(); //刷新显示列表上的记录计数 } GlobalUnlock( hMem );//unlock source return TRUE; } return true; } void DLG_SendFax::OnSendfaxStart() { CString str ; long lMaxMsgLen = m_pMainFrame->GetMaxSendMsgLen(); //取允许的最大字符数 if ( m_bSend ) //在发,现停止 { this->SetWindowText( _T("传真发送列表") ); //恢复默认提示信息 m_B_Start.SetUnSelToolTip( _T("立即发送") ); m_B_Start.ActiveToolTip( true ); m_B_Start.SetUnSelBmp( IDB_B_START ); m_B_Start.Invalidate(); m_bSend=false; //不在发送 if ( m_lBoxType == 1 ) //发送完成 { EnableModifyWindow( false ); //不可修改 m_B_New.EnableWindow(true); //新建与重发是可以的。 m_B_New2.EnableWindow(true); //新建与重发是可以的。 } else { //未发送完成,用户手动停止 EnableModifyWindow( true ); //还可修改 m_B_New.EnableWindow(true); //新建与重发是可以的。 m_B_New2.EnableWindow(true); //新建与重发是可以的。 } if ( m_bAttachOpen ) { m_fAttach.Close(); m_bAttachOpen = false; } m_lAttachUpLen = 0; } else { CString strTitle; m_E_Title.GetWindowText( strTitle ); if ( strTitle.GetLength() <=0 ) //内容不能为空 { MessageBox(_T("传真标题不能为空,请输入!"),_T("错误"),MB_ICONWARNING); m_E_Title.SetFocus(); return ; } if ( !List_Save(true) ) //保存失败,返回 return; m_bSend = true; //开始发送 EnableModifyWindow( false ); //因为发送可以修改 m_B_Start.SetUnSelToolTip( _T("停止发送") ); m_B_Start.ActiveToolTip( true ); m_B_Start.SetUnSelBmp( IDB_B_STOP ); m_B_Start.Invalidate(); m_B_Start.EnableWindow( true ); //允许用户手动停止发送 m_lSendIndex = 0; m_lSendOK = 0; m_dwBackCount=0; //黑名单数量 m_dwNoSupCount=0; //不支持号码数量 long lCount = m_wndList.GetItemCount(); if ( m_B_SaveSendLog.GetCheck() && lCount>MAX_SENDLIST_NOTIP ) { int iRet = MessageBox( _T("准备发送的记录数过大,是否记录发送日志?\r\n注:记录发送日志的速度稍慢,但可以根据日志查询状态。") , _T("信息") , MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2); if ( iRet != IDYES ) m_B_SaveSendLog.SetCheck(false); } m_dwSendStartTime = GetTickCount(); m_lCurSendType = FAX_CURSENDTYPE_ID; m_lSendAttachIndex = 1; //从第一个附件开始发送 m_lSendAttachCount = 0; //附件总数为0 if ( m_bAttachOpen ) { m_fAttach.Close(); m_bAttachOpen = false; } m_lAttachUpLen = 0; SetTimer( 10 , 200 , NULL ); //启动发送 // SendNextSms(); } } BOOL DLG_SendFax::SendNextFax() { BOOL bOK=false; switch( m_lCurSendType ) { case FAX_CURSENDTYPE_ID: bOK=SendNextFax_ID(); break; case FAX_CURSENDTYPE_FILE: bOK=SendNextFax_File(); break; case FAX_CURSENDTYPE_FAXNUM: bOK=SendNextFax_FaxNum(); break; case FAX_CURSENDTYPE_COMPLETE: bOK=SendNextFax_Complete(); break; case FAX_CURSENDTYPE_ERROR: bOK=false; break; default: MessageBox(_T("发送传真产生未知异常!") , _T("错误") , MB_ICONWARNING ); bOK=false; break; } if ( bOK ) { } else { if ( m_lBoxType == 1 ) //发送完成 { if ( m_bSend ) { OnSendfaxStart(); //停止 } CString strMsg; strMsg.Format( _T("传真发送完成,成功提交%d份传真!用时%d秒。%s") , m_lSendOK,(::GetTickCount()-m_dwSendStartTime)/1000,GetOtherSendRetMsg() ); MessageBox( strMsg , _T("信息") , MB_ICONASTERISK ); RefreshStatusAndLog(); } else { //发送未完成,停止发送 OnSendfaxStart(); //停止发送 RefreshStatusAndLog(); } } return bOK; } BOOL DLG_SendFax::SendNextFax_ID() { REQ_FaxSend_ID * pFax = new REQ_FaxSend_ID; memset(pFax , 0 , sizeof(pFax)); pFax->lCorpID = m_pMainFrame->m_lCorpID; pFax->lUserID = m_pMainFrame->m_lUserID; CString strTitle; m_E_Title.GetWindowText(strTitle); _tcscpy(pFax->szFaxTitle , strTitle); pFax->lFaxFileID = 0; if ( !m_bAttachModify && this->m_lFaxUpID) { int iRet = MessageBox(_T("是否继续使用上次已上传的传真附件!\r\n如果附件已修改过请选择\"否\"。") , _T("提示") , MB_ICONQUESTION|MB_YESNO ); if ( iRet==IDYES) pFax->lFaxFileID = this->m_lFaxUpID; } m_pMainFrame->SendFrame( SMSFUNC_FAXSEND_ID , (BYTE*)pFax , sizeof(REQ_FaxSend_ID) ); SetTimer( 1 , 60000 , NULL ); //超时检测,35秒发不出算超时 SetListTextTip(_T("正在取传真附件ID...")); return true; } BOOL DLG_SendFax::SendNextFax_File() { CString str; if ( !m_bAttachOpen ) //如果没有打开的文件,先找文件打开 { for ( int i=m_lSendAttachIndex; i<=FAXSEND_ATTACH_MAX;i++ ) { //取附件 CString strAttach=m_strAttach1; switch(m_lSendAttachIndex) { case 1: strAttach=m_strAttach1; break; case 2: strAttach=m_strAttach2; break; case 3: strAttach=m_strAttach3; break; case 4: strAttach=m_strAttach4; break; case 5: strAttach=m_strAttach5; break; } m_lSendAttachIndex ++; //发下一次传真 if ( strAttach.GetLength()>0) { //打开文件 if ( !m_fAttach.Open( strAttach , CFile::modeRead ) || m_fAttach.GetLength()<=0 ) { str.Format(_T("打开以下传真附件失败,是否继续发送传真?\r\n%s"),strAttach); int iRet = MessageBox(str, _T("提问") , MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 ); if ( iRet!=IDYES ) { return false; } else { continue; //继续发送 } } else { m_bAttachOpen=true; m_lAttachUpLen=0; break; //打开文件成功,开始发送了 } } } if ( i>FAXSEND_ATTACH_MAX ) //没有其它附件可以送了 { if ( m_lSendAttachCount<=0 ) { MessageBox(_T("没有上传任何传真附件,不能继续发送!") , _T("错误") , MB_ICONWARNING ); return false; } else { m_bAttachModify = false; //上传完成,状态更改 m_lCurSendType = FAX_CURSENDTYPE_FAXNUM; SendNextFax(); return true; } } } if ( m_bAttachOpen ) //已成功打开文件 { long lGetLen = FAXSEND_ATTACH_UPLEN; if ( m_fAttach.GetLength()-m_lAttachUpLen < lGetLen ) { lGetLen = m_fAttach.GetLength()-m_lAttachUpLen; } m_lAttachUpLen += lGetLen; //准备读取数据上传 long lSize = sizeof(REQ_FaxSend_Up)+lGetLen; BYTE * pData = new BYTE[lSize]; memset(pData , 0 , lSize ); REQ_FaxSend_Up * pUp = (REQ_FaxSend_Up *)pData; BYTE * pFileData = pData+sizeof(REQ_FaxSend_Up); pUp->lCorpID = m_pMainFrame->m_lCorpID; pUp->lUserID = m_pMainFrame->m_lUserID; pUp->lFileIndex = m_lSendAttachIndex-1; pUp->lFaxFileID = this->m_lFaxUpID; //附件ID pUp->lAllLen = m_fAttach.GetLength(); //总长度 pUp->lUpLen = m_lAttachUpLen; //已上传长度 pUp->lDataLen= lGetLen; //当次数据长度 CString strAttach; m_E_Attach1.GetWindowText(strAttach); switch(pUp->lFileIndex) { case 1: m_E_Attach1.GetWindowText(strAttach); break; case 2: m_E_Attach2.GetWindowText(strAttach); break; case 3: m_E_Attach3.GetWindowText(strAttach); break; case 4: m_E_Attach4.GetWindowText(strAttach); break; case 5: m_E_Attach5.GetWindowText(strAttach); break; } _tcscpy(pUp->szFileName , strAttach); lGetLen = m_fAttach.Read(pFileData,pUp->lDataLen); if ( lGetLen!=pUp->lDataLen) { m_bAttachOpen = false; MessageBox(_T("上传传真附件产生无法预知的错误2!") , _T("错误") , MB_ICONWARNING ); return false; //发送失败 } str.Format(_T("上传附件%d,%.2f%%...") , pUp->lFileIndex,((float)pUp->lUpLen/(float)(pUp->lAllLen+2))*100.0f ); m_pMainFrame->SendFrame( SMSFUNC_FAXSEND_UP , (BYTE*)pData , lSize ); SetTimer( 1 , 60000 , NULL ); //超时检测,35秒发不出算超时 SetListTextTip(str); } else { MessageBox(_T("上传传真附件产生无法预知的错误!") , _T("错误") , MB_ICONWARNING ); return false; //发送失败 } return true; } BOOL DLG_SendFax::SendNextFax_FaxNum() { long lMaxSendCount = 10; long lSpeed = m_pMainFrame->m_Setup.lSendSpeed; if ( lSpeed <= 0 ) lMaxSendCount = 1; if ( lSpeed == 1 ) lMaxSendCount = 5; if ( lSpeed > 1 ) lMaxSendCount = 10 +(lSpeed-2)*10; lMaxSendCount=lMaxSendCount*2; long lCount = m_wndList.GetItemCount(); //先生成临时存贮空间 ANS_FaxSend_Num * pTemp = new ANS_FaxSend_Num[lMaxSendCount+2]; memset( pTemp , 0 , sizeof(ANS_FaxSend_Num)*(lMaxSendCount+2) ); long lSendCount = 0; for ( ; m_lSendIndexlCorpID = m_pMainFrame->m_lCorpID; pSendSend->lUserID = m_pMainFrame->m_lUserID; pSendSend->lFaxFileID=this->m_lFaxUpID; _tcscpy(pSendSend->szTitle , m_strTitle ); pSendSend->tTimer = m_tTimer; pSendSend->lCount = lSendCount; //内容 memcpy( pDataSend , pTemp , sizeof(ANS_FaxSend_Num)*lSendCount ); delete pTemp; //删除临时变量 CString str; str.Format( _T("传真发送列表 正在发送... %d/%d") , m_lSendIndex , lCount); this->SetListTextTip(str); m_pMainFrame->SendFrame( SMSFUNC_FAXSEND , pData , lSize ); SetTimer( 1 , 60000 , NULL ); //超时检测,35秒发不出算超时 return true; } BOOL DLG_SendFax::SendNextFax_Complete() { return false; } BOOL DLG_SendFax::ProcessSocket(Socket_Head_Add *pHead, BYTE *pFrame) { KillTimer(1); //收到返回,不会超时。 CString str; if (pHead->lFuncType == SMSFUNC_FAXSEND_ID) { ANS_FaxSend_ID * pFax = (ANS_FaxSend_ID *)pFrame; if ( pFax->lFaxFileID <=0 ) { MessageBox(_T("取传真文件ID失败,无法发送传真!"),_T("错误") , MB_ICONWARNING ); m_lCurSendType = FAX_CURSENDTYPE_ERROR; SendNextFax(); return true; } this->m_lFaxUpID = pFax->lFaxFileID; //记录当前传真附件ID if ( pFax->bReUp ) { m_lCurSendType = FAX_CURSENDTYPE_FILE; } else { m_lCurSendType = FAX_CURSENDTYPE_FAXNUM; } SendNextFax(); return true; } if (pHead->lFuncType == SMSFUNC_FAXSEND_UP) { ANS_FaxSend_Up * pUp = (ANS_FaxSend_Up *)pFrame; if ( !pUp->bOK ) { if ( m_bAttachOpen ) { m_fAttach.Close(); m_bAttachOpen = false; } MessageBox(_T("上传附件失败,无法发送传真!"),_T("错误") , MB_ICONWARNING ); m_lCurSendType = FAX_CURSENDTYPE_ERROR; SendNextFax(); return true; } if ( pUp->lAllLen <= pUp->lUpLen ) //本文件已上传完 { m_lSendAttachCount++; if ( m_bAttachOpen ) { m_fAttach.Close(); m_bAttachOpen = false; } } SendNextFax(); return true; } if ( pHead->lFuncType == SMSFUNC_FAXSEND) //发送短信返回 { ANS_FaxSend * pSend = (ANS_FaxSend *)pFrame; ANS_FaxSend_Num * pSendData = (ANS_FaxSend_Num *)(pFrame+sizeof(ANS_FaxSend)); if ( pSend->lErrCode !=0 ) { str.Format(_T("传真提交出错,错误代码%d。"),pSend->lErrCode); MessageBox( str , _T("错误") , MB_ICONWARNING ); m_lCurSendType = FAX_CURSENDTYPE_ERROR; SendNextFax(); return true; } if ( pSend->lCount <= 0 ) { MessageBox( _T("传真提交出错,未知原因!") , _T("错误") , MB_ICONWARNING ); m_lCurSendType = FAX_CURSENDTYPE_ERROR; SendNextFax(); return true; } for ( int i = 0 ; i< pSend->lCount ; i ++ ) { //将结果写到列表 TCHAR szStatus[2]={0}; if ( pSendData->lStatus == SEND_STATUS_SUB_OK || pSendData->lStatus == SEND_STATUS_SUB_FILT ) { m_wndList.SetItemText( pSendData->lItem , 2 , _T("提交成功") ); szStatus[0] = '1' ; //提交成功 m_lSendOK ++; //提交成功计数 } else { m_wndList.SetItemText( pSendData->lItem , 2 , _T("提交失败") ); szStatus[0] = '2' ; //提交失败 if ( pSendData->lStatus != SEND_STATUS_SUB_NUMNOSUP ) //如果返回不是联通的号码,则不继续发送 { CString strMsg; switch (pSendData->lStatus) { case SEND_STATUS_SUB_USERNOSMS: strMsg.Format(_T("提交短信失败,共已发送%d条短信!\r\n错误原因:你的传真余额不足,请与系统管理员联系!%s"),m_lSendOK,GetOtherSendRetMsg() ); break; case SEND_STATUS_SUB_CORPNOSMS: strMsg.Format(_T("提交短信失败,共已发送%d条短信!\r\n错误原因:企业的传真余额不足,请与系统管理员联系!%s"),m_lSendOK,GetOtherSendRetMsg() ) ; break; case SEND_STATUS_SUB_CORPOVRDATE: strMsg.Format(_T("提交短信失败,共已发送%d条短信!\r\n错误原因:企业已过期,请与系统管理员联系!%s"),m_lSendOK,GetOtherSendRetMsg() ) ; break; case SEND_STATUS_OVERCOUNT: strMsg.Format(_T("提交短信失败,共已发送%d条短信!\r\n错误原因:已超当天最大发送量,请与系统管理员联系!%s"),m_lSendOK,GetOtherSendRetMsg() ) ; break; case SEND_STATUS_NOSY: strMsg.Format(_T("提交短信失败,共已发送%d条短信!\r\n错误原因:此帐号不支持深夜发送传真,请与系统管理员联系!%s"),m_lSendOK,GetOtherSendRetMsg() ) ; break; default: strMsg.Format( _T("提交短信失败,共已发送%d条短信!\r\n错误原因:原因未明,请与系统管理员联系!%s"),m_lSendOK,GetOtherSendRetMsg() ) ; break; } MessageBox( strMsg , _T("错误") , MB_ICONWARNING ); m_lCurSendType = FAX_CURSENDTYPE_ERROR; SendNextFax(); return true; } else { m_dwNoSupCount++; //不支持号码数量 } } //将结果插入队列,由线程写入数据库 SaveFaxStatus * pStatus = new SaveFaxStatus; memset(pStatus , 0 , sizeof(SaveFaxStatus)); _tcscpy(pStatus->szStatus , szStatus ); pStatus->lSendID = pSendData->lSendID; pStatus->lFaxFileID = pSend->lFaxFileID; pStatus->lItemID = pSendData->lItemID; pStatus->lStatus = pSendData->lStatus; _tcscpy(pStatus->szSendNum,pSendData->szSendNum); _tcscpy(pStatus->szName,pSendData->szName); _tcscpy(pStatus->szTitle,pSend->szTitle); _tcscpy(pStatus->szFaxNum,pSendData->szFaxNum); m_SaveItemStatus.AddTail(pStatus); pSendData ++; //处理下一条 } if ( m_bSend ) //还在发送,可以发送下一条 SendNextFax(); } return false; } void DLG_SendFax::RefreshStatusAndLog() { //再次点击此类项目后刷新 m_pMainFrame->m_pBaseView->m_dlgFaxDF.m_bRefresh = false; m_pMainFrame->m_pBaseView->m_dlgFaxYF.m_bRefresh = false; m_pMainFrame->m_pBaseView->m_dlgFaxLog.m_bRefresh = false; /* //发送完成,需要刷新列表 m_pMainFrame->m_pBaseView->m_dlgSmsDF.RefreshInfo();//待发 m_pMainFrame->m_pBaseView->m_dlgSmsYF.RefreshInfo();//已发 //发送完成,刷新状态 m_pMainFrame->m_pBaseView->m_dlgSmsLog.RefreshInfo(); //发送日志 */ } void DLG_SendFax::SetListTextTip(CString str) { SetWindowText(str); } BOOL DLG_SendFax::isBack(const TCHAR *pMobile) { BOOL bBack = false; for ( int i=0;im_lBackCount;i++ ) { if ( !_tcscmp(m_pMainFrame->m_pBack[i].szMobile , pMobile ) ) { bBack = true; break; } } return bBack; } CString DLG_SendFax::GetOtherSendRetMsg() { CString str=_T("\r\n\r\n其中:"); CString strTemp; BOOL bFirst=true; if (m_dwBackCount>0 ) { if ( !bFirst ) { str += _T("   "); } else { bFirst = false; } strTemp.Format( _T("黑名单数量:%d\r\n") , m_dwBackCount ); str += strTemp; } if (m_dwNoSupCount>0 ) { if ( !bFirst ) { str += _T("   "); } else { bFirst = false; } strTemp.Format( _T("不支持数量:%d\r\n") , m_dwNoSupCount ); str += strTemp; } if (m_dwNoMsgCount>0 ) { if ( !bFirst ) { str += _T("   "); } else { bFirst = false; } strTemp.Format( _T("内容空数量:%d\r\n") , m_dwNoMsgCount ); str += strTemp; } if ( bFirst ) //没有任何数据 str = _T(""); return str; } void DLG_SendFax::OnDoubleclickedSendFaxSelAttach1() { m_strAttach1 = _T(""); m_E_Attach1.SetWindowText(_T("")); m_bAttachModify = true; m_bModify=true; } void DLG_SendFax::OnDoubleclickedSendFaxSelAttach2() { m_strAttach2 = _T(""); m_E_Attach2.SetWindowText(_T("")); m_bAttachModify = true; m_bModify=true; } void DLG_SendFax::OnDoubleclickedSendFaxSelAttach3() { m_strAttach3 = _T(""); m_E_Attach3.SetWindowText(_T("")); m_bAttachModify = true; m_bModify=true; } void DLG_SendFax::OnDoubleclickedSendFaxSelAttach4() { m_strAttach4 = _T(""); m_E_Attach4.SetWindowText(_T("")); m_bAttachModify = true; m_bModify=true; } void DLG_SendFax::OnDoubleclickedSendFaxSelAttach5() { m_strAttach5 = _T(""); m_E_Attach5.SetWindowText(_T("")); m_bAttachModify = true; m_bModify=true; }