// DLG_PLFile_Add.cpp : implementation file // #include "stdafx.h" #include "corpsms.h" #include "DLG_PLFile_Add.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #include "DLG_User_InportP2.h" #include "FPLFile.h" #include "MainFrm.h" #include "ProcessSocket.h" ///////////////////////////////////////////////////////////////////////////// // DLG_PLFile_Add dialog DLG_PLFile_Add::DLG_PLFile_Add(CWnd* pParent /*=NULL*/) : CDialog(DLG_PLFile_Add::IDD, pParent) { //{{AFX_DATA_INIT(DLG_PLFile_Add) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_pPLFile = (CFPLFile * )pParent; m_lMobileCount = 0; m_bInit = false; m_dwFileSize = 0; m_bUpload = false; m_dwUpSize = 0; m_lPLFileID = 0; } void DLG_PLFile_Add::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(DLG_PLFile_Add) DDX_Control(pDX, IDC_PLFILE_ADD_GDT, m_P_GDT); DDX_Control(pDX, IDC_PLFILE_ADD_NAME, m_E_Name); DDX_Control(pDX, IDC_PLFILE_ADD_UPLOAD, m_B_Upload); DDX_Control(pDX, IDC_PLFILE_ADD_ADD, m_B_Add); DDX_Control(pDX, IDC_PLFILE_ADD_COUNT, m_E_Count); //}}AFX_DATA_MAP // DDX_Check(pDX, IDC_CHECKREMOBILE, m_bCheckReMobile); DDX_Control(pDX, IDC_CHECKLOCALBACK, m_B_CheckLocalBack); DDX_Control(pDX, IDC_CHECKREMOBILE, m_B_CheckReMobile); DDX_Control(pDX, IDC_CHECKDDT, m_B_CheckDDT); } BEGIN_MESSAGE_MAP(DLG_PLFile_Add, CDialog) //{{AFX_MSG_MAP(DLG_PLFile_Add) ON_BN_CLICKED(IDC_PLFILE_ADD_ADD, OnPlfileAddAdd) ON_BN_CLICKED(IDC_PLFILE_ADD_UPLOAD, OnPlfileAddUpload) ON_WM_TIMER() //}}AFX_MSG_MAP ON_WM_CLOSE() END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // DLG_PLFile_Add message handlers void DLG_PLFile_Add::OnOK() { CDialog::OnOK(); } void DLG_PLFile_Add::OnPlfileAddAdd() { m_bCheckReMobile = m_B_CheckReMobile.GetCheck(); m_bCheckLocalBack = m_B_CheckLocalBack.GetCheck(); m_bCheckDDT = m_B_CheckDDT.GetCheck(); Inport_Field Field[] = { //{_T("姓名"),0,0,-1}, //{_T("昵称"),0,1,-1}, //{_T("性别"),0,2,-1}, //{_T("生日"),0,3,-1}, //{_T("公司"),0,4,-1}, //{_T("职务"),0,5,-1}, //{_T("地址"),0,6,-1}, {_T("手机号码"),0,7,-1}, //{_T("电话"),0,8,-1}, //{_T("传真"),0,9,-1}, //{_T("Email"),0,10,-1}, //{_T("QQ号码"),0,11,-1}, //{_T("备注"),0,12,-1}, }; Inport_Field Field2[] = { //{_T("姓名"),0,0,-1}, //{_T("昵称"),0,1,-1}, //{_T("性别"),0,2,-1}, //{_T("生日"),0,3,-1}, //{_T("公司"),0,4,-1}, //{_T("职务"),0,5,-1}, //{_T("地址"),0,6,-1}, {_T("手机号码"),0,7,-1}, //{_T("电话"),0,8,-1}, //{_T("传真"),0,9,-1}, //{_T("Email"),0,10,-1}, //{_T("QQ号码"),0,11,-1}, {_T("短信内容"),0,12,-1}, }; DLG_User_InportP2 dlg(this); if ( m_bCheckDDT ) dlg.SetParam(&Field2[0],sizeof(Field2)/sizeof(Inport_Field),10); else dlg.SetParam(&Field[0],sizeof(Field)/sizeof(Inport_Field),10); //DLG_Send_Inport dlg(this); //dlg.SetInport(true); if ( dlg.DoModal() == IDOK ) { m_B_CheckDDT.EnableWindow(false); //导入后,不允许更改点点通类型了 } CString str; str.Format(_T("%d") , m_lMobileCount ); m_E_Count.SetWindowText(str); } BOOL DLG_PLFile_Add::OnInitDialog() { CDialog::OnInitDialog(); //m_E_Count.SetWindowText(_T("0")); m_E_Name.LimitText(30); m_B_CheckReMobile.SetCheck(false); m_B_CheckLocalBack.SetCheck(false); m_B_CheckDDT.SetCheck(false); SetTimer(1,200,NULL); if ( this->m_pPLFile ) { m_AdoRSL2.SetAdoConnection(&m_pPLFile->m_pMainFrame->m_adoConnection); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void DLG_PLFile_Add::AddUser(PLUser user,long lItem) { if ( !m_bInit ) { return; } ExChar(user.szMobile,_T(" ")); ExChar(user.szMobile,_T("\r")); ExChar(user.szMobile,_T("\n")); ExChar(user.szMobile,_T("\t")); ExChar(user.szMobile,_T("'")); ExChar(user.szMobile,_T("\"")); ExMobileGZM(user.szMobile); //去除国际码 if ( !isMobileNum( user.szMobile ) ) //不是手机号码,不用添加或修改 return ; CString str; //判断是否已存在记录 if ( m_bCheckReMobile ) { str.Format( _T("select * from Mobile where Mobile='%s'") , user.szMobile ); if (m_AdoRS.Open(str) && !m_AdoRS.IsEOF() ) { return ; } } //判断是否是本地黑名单 if (m_bCheckLocalBack) { str.Format( _T("select * from back where Mobile='%s' and Status=1") , user.szMobile ); if ( m_AdoRSL2.Open(str) && !m_AdoRSL2.IsEOF() ) { return ; } } //插入数据库 str=_T(""); if ( m_bCheckDDT ) { CString strMsg; strMsg = user.szBZ; strMsg.Trim(); if ( strMsg.GetLength()>0 ) { //插入号码与短信内容 str.Format( _T("insert into Mobile (Mobile,Msg) values('%s','%s')") , user.szMobile,SqlStr(strMsg) ); } } else { //插入号码 str.Format( _T("insert into Mobile (Mobile) values('%s')") , user.szMobile ); } if (str.GetLength() >0 ) { if ( m_AdoRS.Open(str) ) m_lMobileCount++; } } BOOL DLG_PLFile_Add::CreateNullFile() { //取当前文件夹 TCHAR szPath[512]={0}; m_pPLFile->m_pMainFrame->GetCurrentPath(szPath); _tcscat(szPath , _T("Temp\\") ); ::CreateDirectory(szPath,NULL); //创建文件夹 _tcscat(szPath , _T("MobileFile.dat") ); if ( _taccess(szPath, 0) != -1 ) { #ifndef _DEBUG2 if ( !::DeleteFile(szPath) ) { MessageBox( _T("文件冲突,建议重启后再试!") , _T("错误") , MB_ICONWARNING ); return false; } #endif } CString strDBName = szPath; //创建access文件 #ifndef _DEBUG2 try { adox::_CatalogPtr pCP=NULL; pCP.CreateInstance(_T("ADOX.Catalog")); if (pCP != NULL) { CString strcnn( _T("Provider=Microsoft.JET.OLEDB.4.0;Data source ="+strDBName)); pCP->Create(_bstr_t(strcnn)); pCP.Release(); } else { MessageBox( _T("生成批量文件错误,建议重启后再试!") , _T("错误") , MB_ICONWARNING ); return false; } } catch(_com_error &e) { // Notify the user of errors if any. AfxMessageBox(e.ErrorMessage()); return false; } #endif if ( !m_adoConnection.ConnectAccess(strDBName) ) { MessageBox( _T("连接批量文件错误,建议重启后再试!") , _T("错误") , MB_ICONWARNING ); return false; } m_adoConnection.SetCursorLocation(adUseClient); m_AdoRS.SetAdoConnection(&m_adoConnection); m_AdoRS.SetCursorLocation(adUseClient); #ifndef _DEBUG2 //创建表 CString str = _T("CREATE TABLE Mobile ( ") \ _T("Mobile VARCHAR(16) NULL,Msg memo )"); BOOL b=true; b = b && m_AdoRS.Open(str); //创建索引 str = _T("Create Index iMobile ON Mobile(Mobile);"); b = b && m_AdoRS.Open(str); if ( !b ) { MessageBox( _T("生成新批量文件数据表错误,建议重启后再试!") , _T("错误") , MB_ICONWARNING ); return false; } #endif CString str2 = _T("select count(*) as abc from mobile"); if ( m_AdoRS.Open(str2) && !m_AdoRS.IsEOF() ) { m_AdoRS.GetCollect(_T("abc") , m_lMobileCount); str2.Format(_T("%d") , m_lMobileCount ); m_E_Count.SetWindowText(str2); } m_AdoRS.SetCursorLocation(adUseClient); m_bInit=true; return true; } void DLG_PLFile_Add::OnPlfileAddUpload() { if ( m_bUpload ) { try { if ( m_dwFileSize>0 ) { m_File.Close(); m_dwFileSize = 0; } } catch(...) { } m_bUpload = false; m_E_Name.SetReadOnly(false); m_B_Add.EnableWindow(true); m_B_Upload.SetWindowText(_T("上传号码文件")); } else { CString strName; m_E_Name.GetWindowText(strName); if ( strName.GetLength()<=0 ) { MessageBox(_T("文件描述不能为空,请输入!") , _T("错误") , MB_ICONWARNING ); GetDlgItem(IDC_PLFILE_ADD_NAME)->SetFocus(); return ; } if ( this->m_pPLFile->FindName(strName,(POSITION)0) ) { MessageBox(_T("文件描述已存在,请更换描述!") , _T("错误") , MB_ICONWARNING ); GetDlgItem(IDC_PLFILE_ADD_NAME)->SetFocus(); return ; } //上传文件 if ( m_lMobileCount<0 ) { MessageBox(_T("请先导入号码后再上传!"),_T("错误") , MB_ICONWARNING ); GetDlgItem(IDC_PLFILE_ADD_UPLOAD)->SetFocus(); return ; } m_AdoRS.Close(); m_adoConnection.Close(); TCHAR szPath[512]={0}; m_pPLFile->m_pMainFrame->GetCurrentPath(szPath); _tcscat(szPath , _T("Temp\\") ); CString strDBName; CString strRarName; strDBName.Format(_T("%sMobileFile.dat") , szPath); strRarName.Format(_T("%sMobileFile.rar") , szPath); if ( _taccess(strDBName, 0) == -1 ) { MessageBox( _T("文件错误,建议重启后再试!") , _T("错误") , MB_ICONWARNING ); return ; } if ( _taccess(strRarName, 0) != -1 ) { if ( !::DeleteFile(strRarName) ) { MessageBox( _T("文件冲突,建议重启后再试!") , _T("错误") , MB_ICONWARNING ); return ; } } if ( !CAdoConnection::CompDB(strDBName,_T("")) ) { // MessageBox( _T("压缩数据库错误,建议重启后再试!") , _T("错误") , MB_ICONWARNING ); // return ; } try { if ( m_dwFileSize>0 ) { m_File.Close(); m_dwFileSize = 0; } } catch(...) { } if ( !m_File.Open(strDBName , CFile::modeRead) ) { MessageBox( _T("打开号码数据库错误,建议重启后再试!") , _T("错误") , MB_ICONWARNING ); return ; } m_dwFileSize = (DWORD)m_File.GetLength(); if ( m_dwFileSize>20*1024*1024 ) //是否大于2M { m_File.Close(); MessageBox( _T("不能上传超过20M的文件,请先缩小后再上传!") , _T("错误") , MB_ICONWARNING ); return ; } m_dwUpSize=0; m_lPLFileID = 0; m_P_GDT.SetRange32(0,m_dwFileSize); m_E_Name.SetReadOnly(true); m_B_Add.EnableWindow(false); m_B_Upload.SetWindowText(_T("停止上传")); m_bUpload = true; REQ_PLFile_ID * pID = new REQ_PLFile_ID; memset(pID , 0 , sizeof(REQ_PLFile_ID)); pID->lCorpID = m_pPLFile->m_pMainFrame->m_lCorpID; pID->lUserID = m_pPLFile->m_pMainFrame->m_lUserID; pID->lMobileCount = this->m_lMobileCount; _tcscpy(pID->szName , strName); m_pPLFile->m_pMainFrame->SendFrame( SMSFUNC_PLFILE_ID , (BYTE*)pID , sizeof( REQ_PLFile_ID ) ); //发送取资料的请求 } } void DLG_PLFile_Add::OnTimer(UINT_PTR nIDEvent) { CDialog::OnTimer(nIDEvent); if ( nIDEvent==1 ) { KillTimer(nIDEvent); if ( !CreateNullFile() ) //创建空文件不成功 { CDialog::OnCancel(); //m_B_Add.EnableWindow(false); //m_B_Upload.EnableWindow(false); } } } BOOL DLG_PLFile_Add::ProcessSocket(Socket_Head_Add *pHead, BYTE *pFrame) { if ( pHead->lFuncType == SMSFUNC_PLFILE_ID ) { ANS_PLFile_ID * pID = (ANS_PLFile_ID *)pFrame; if ( pID->lPLFileID>0 ) //上传成功 { m_lPLFileID = pID->lPLFileID; m_dwUpSize = 0; UpFile_Next(); } else { MessageBox(pID->szErrMsg , _T("上传错误") , MB_ICONWARNING ); if ( m_bUpload) { OnPlfileAddUpload(); //停止上传 } } return true; } if ( pHead->lFuncType == SMSFUNC_PLFILE_UP ) { ANS_PLFile_Up * pUp = (ANS_PLFile_Up *)pFrame; if ( pUp->bOK ) { m_dwUpSize = pUp->lUpLen; m_P_GDT.SetPos(m_dwUpSize); UpFile_Next(); } else { MessageBox(_T("上传号码文件产生未知错误!") , _T("错误") , MB_ICONWARNING ); if ( m_bUpload) { OnPlfileAddUpload(); //停止上传 } } return true; } return false; } BOOL DLG_PLFile_Add::UpFile_Next() { if ( !m_bUpload ) return false; long lUpLen = PLFILE_ATTACH_UPLEN; if ( m_dwUpSize + lUpLen>m_dwFileSize ) { lUpLen = m_dwFileSize-m_dwUpSize; } if ( lUpLen<=0 ) { //上传已完成 MessageBox(_T("号码文件上传成功!\r\n号码文件属临时性质,视服务器资源使用情况,会对其进行自动清理。") , _T("消息") , MB_ICONINFORMATION ); EndDialog(IDOK); return true; } long lSize = sizeof(REQ_PLFile_Up) + lUpLen; BYTE * pData = new BYTE[lSize]; memset(pData , 0 , lSize ); REQ_PLFile_Up * pUp = (REQ_PLFile_Up * )pData; BYTE * pBuf = pData+sizeof(REQ_PLFile_Up); pUp->lPLFileID= m_lPLFileID; pUp->lAllLen = m_dwFileSize; pUp->lUpLen = m_dwUpSize; pUp->lDataLen = lUpLen; pUp->lNumCount= m_lMobileCount; pUp->lCorpID = m_pPLFile->m_pMainFrame->m_lCorpID; pUp->lUserID = m_pPLFile->m_pMainFrame->m_lUserID; DWORD dwRead=0; dwRead = m_File.Read(pBuf , lUpLen ); if ( dwRead >0 ) { pUp->lDataLen= dwRead; m_dwUpSize += dwRead; m_pPLFile->m_pMainFrame->SendFrame(SMSFUNC_PLFILE_UP , pData , lSize ); return true; } else { MessageBox(_T("读取文件错误,上传文件失败!") , _T("错误") , MB_ICONWARNING ); OnPlfileAddUpload(); //停止上传 return false; } } void DLG_PLFile_Add::OnClose() { if ( !m_bUpload && m_lMobileCount>0 ) { int iRet = MessageBox( _T("已导入号码数据,需要执行\"上传号码文件\"才生效。\r\n是否放弃上传而退出?") , _T("提问") , MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2); if ( iRet != IDYES ) { return ; } } CDialog::OnClose(); }