// SendThread.cpp : implementation file // #include "stdafx.h" #include "SmsCenter.h" #include "SendThread.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CSendThread #include "SmsCenterDlg.h" extern CSmsCenterApp theApp; BOOL g_bInit2=false; CSmsCenterDlg * g_pSMSDlg2=NULL; #include #pragma comment(lib, "wininet.lib") IMPLEMENT_DYNCREATE(CSendThread, CWinThread) CSendThread::CSendThread() { m_lSendCount = 0; m_bSend = false; } CSendThread::~CSendThread() { } BOOL CSendThread::InitInstance() { // TODO: perform and per-thread initialization here return TRUE; } int CSendThread::ExitInstance() { return CWinThread::ExitInstance(); } BEGIN_MESSAGE_MAP(CSendThread, CWinThread) //{{AFX_MSG_MAP(CSendThread) // NOTE - the ClassWizard will add and remove mapping macros here. //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSendThread message handlers BOOL CSendThread::Recv_Sms(HANDLE & hPipe,SmsSendData sms,CAdoRecordSet * pAdoRS,CAdoRecordSet * pAdoRS2,CAdoRecordSet * pAdoRS3,CSmsCenterDlg * pSMSDlg) { try { CString str; CString strSelect; CString strAllNum = sms.szRecvNum; CString strExTFH; CString strExCorpNum; CString strCorpNum; CString strUserNum; CString strExNum; CString strGroupID; CString strSender; CString strRecver; CString strProv; CString strCity; CString strSName = _T("广州首易"); TCHAR szUpSms[256]={0}; long lCorpID=0; long lUserID=0; DWORD lPurview=0; BOOL bSWT=false; long lTFHBegin=0; long lTDMode = 0; if (sms.lCorpID <= 0) //没送企业ID过来的,要根据号码匹配企业与用户 { //查通道ID CString strTDNum; long lLen = strAllNum.GetLength(); for (int i = lLen; i >= 0; i--) { strTDNum = strAllNum.Left(i); //从左开始增位判断是否为特服号 str.Format(_T("select * from TD2 with(nolock) where Ability=0 and AccessPort='%s'"), strTDNum); if (strTDNum.GetLength() > 0 && pAdoRS->Open(str) && !pAdoRS->IsEOF()) { lTFHBegin = i; pAdoRS->GetCollect(_T("Mode"), lTDMode); break; } } if (lTFHBegin > 0) { strExTFH = strAllNum.Right(strAllNum.GetLength() - lTFHBegin); //排除总特服号后剩下的号码 //查询企业ID long lLen = strExTFH.GetLength(); for (int i = lLen; i >= 0; i--) { strCorpNum = strExTFH.Left(i); //从右开始缩位判断是否企业特服号 if (lTDMode == 1 || lTDMode == 2) //迅祺黑白名单类型,在特服号2记录的是扩展号 { str.Format(_T("select * from Corp with(nolock) where SMSNum2='%s'"), strCorpNum); } else { str.Format(_T("select * from Corp with(nolock) where SMSNum='%s'"), strCorpNum); } if (strCorpNum.GetLength() > 0 && pAdoRS->Open(str) && !pAdoRS->IsEOF()) { pAdoRS->GetCollect(_T("CorpID"), lCorpID); pAdoRS->GetCollect(_T("SName"), strSName); pAdoRS->GetCollect(_T("UpSms"), szUpSms); break; } } } else { //通道里找不到,可能是企信通之类的独立号码,从QXT_SmsNum中查找企业ID long lLen = strAllNum.GetLength(); for (int i = lLen; i >= 0; i--) { strTDNum = strAllNum.Left(i); //从左开始增位判断是否为特服号 str.Format(_T("select * from corp with(nolock) where QXT_SmsNum='%s'"), strTDNum); if (strTDNum.GetLength() > 0 && pAdoRS->Open(str) && !pAdoRS->IsEOF()) { lTFHBegin = i; pAdoRS->GetCollect(_T("CorpID"), lCorpID); pAdoRS->GetCollect(_T("SName"), strSName); pAdoRS->GetCollect(_T("UpSms"), szUpSms); strExTFH = strAllNum.Right(strAllNum.GetLength() - lTFHBegin); //排除总特服号后剩下的号码 break; } } } //查找用户ID if (lCorpID > 0) { strExCorpNum = strExTFH.Right(strExTFH.GetLength() - strCorpNum.GetLength()); //排除企业特服号后剩下的号码 long lLen = strExCorpNum.GetLength(); for (int i = lLen; i >= 0; i--) { strUserNum = strExCorpNum.Left(i); //从右开始缩位判断是否企业特服号 str.Format(_T("select * from Users with(nolock) where CorpID=%d and SMSNum='%s'"), lCorpID, strUserNum); if (strUserNum.GetLength() > 0 && pAdoRS->Open(str) && !pAdoRS->IsEOF()) { pAdoRS->GetCollect(_T("UserID"), lUserID); pAdoRS->GetCollect(_T("Name"), strRecver); pAdoRS->GetCollect(_T("purview"), lPurview); pAdoRS->GetCollect(_T("GroupID"), strGroupID); if (lPurview & PURVIEW_LOGIN && lPurview & PURVIEW_RECVP) //有登录权限,并可接收私人信息 { pAdoRS->GetCollect(_T("UserID"), lUserID); long lSDK; pAdoRS->GetCollect(_T("SDK"), lSDK); bSWT = lSDK & SDK_SWT ? true : false; } break; } } } strExNum = strExTFH.Right(strExTFH.GetLength() - strCorpNum.GetLength() - strUserNum.GetLength()); } else { //有企业ID的,直接取企业信息 str.Format(_T("select * from Corp with(nolock) where corpID=%d"), sms.lCorpID); if (pAdoRS->Open(str) && !pAdoRS->IsEOF()) { pAdoRS->GetCollect(_T("CorpID"), lCorpID); pAdoRS->GetCollect(_T("SName"), strSName); pAdoRS->GetCollect(_T("UpSms"), szUpSms); //取取企业资料,再继续取用户资料 if (sms.lUserID > 0) { str.Format(_T("select * from Users with(nolock) where userID=%d"), sms.lUserID); if (pAdoRS->Open(str) && !pAdoRS->IsEOF()) { pAdoRS->GetCollect(_T("UserID"), lUserID); pAdoRS->GetCollect(_T("Name"), strRecver); pAdoRS->GetCollect(_T("purview"), lPurview); pAdoRS->GetCollect(_T("GroupID"), strGroupID); /* if (lPurview & PURVIEW_LOGIN && lPurview & PURVIEW_RECVP) //有登录权限,并可接收私人信息 { pAdoRS->GetCollect(_T("UserID"), lUserID); long lSDK; pAdoRS->GetCollect(_T("SDK"), lSDK); bSWT = lSDK & SDK_SWT ? true : false; } */ } } } } /* //将收到的短信转到到一个网页中 if ( lCorpID2>0 && _tcslen(szUpSms) >0 && bSubmitSms ) { UpSmsS * pUpSms = new UpSmsS; _tcscpy(pUpSms->szSendNum , data.szSendNum ); _tcscpy(pUpSms->szRecvNum , data.szRecvNum ); _tcscpy(pUpSms->szMsg , data.szMsg ); _tcscpy(pUpSms->szUrl , szUpSms ); pUpSms->tSendTime = data.tSendTime; //启动线程进行传送 ::AfxBeginThread((AFX_THREADPROC)UpSms,(LPVOID)pUpSms,THREAD_PRIORITY_BELOW_NORMAL); } */ //查询短信信归属地与号码类型 long lMobileType=MOBILE_TYPE_UNKNOW; strSender = CSendPub::GetMobileProvCity(pAdoRS2,sms.szSendNum,lMobileType,strProv,strCity); //判断是否为特殊短信 BOOL bReportNumber = false; DWORD dwType = 0; str.Format( _T("select * from reportnum with(nolock) where (Mobile='%s' or WxWorkName='%s') and Status=1") , sms.szSendNum, sms.szSendNum); if ( pAdoRS->Open(str) && !pAdoRS->IsEOF() ) { bReportNumber = true; pAdoRS->GetCollect( _T("Type") , dwType ); pAdoRS->Close(); } if (pSMSDlg->m_WxWork.bSend && (CString(sms.szSendNum).MakeUpper() == CString(pSMSDlg->m_WxWork.szWxName).MakeUpper())) //微信注册了审核短信。 { bReportNumber = true; dwType = dwType | REPORT_CHECKUP; } //处理上行指令 ProcessUp(pSMSDlg,dwType,lMobileType,sms , pAdoRS,pAdoRS2,pAdoRS3,bReportNumber,lCorpID,lUserID,lTDMode,strSName); //将收到的短信放入发送列表 SmsSendData data={0}; data.lCorpID = lCorpID; data.lUserID = lUserID; data.lSendID = 0; //因为是接收,SendID=0 data.lStatus = SEND_STATUS_RECV_OK; //接收成功 data.lMsgType= SMSTYPE_RECV; _tcscpy( data.szGroupID , strGroupID ); _tcscpy( data.szSendNum , sms.szSendNum ); _tcscpy( data.szRecvNum , sms.szRecvNum ); _tcscpy( data.szRecver , strRecver ); _tcscpy( data.szSender , strSender ); _tcscpy( data.szMsg , sms.szMsg ); _tcscpy( data.szRecvStatus , strExNum ); //用来存贮扩展号码 data.tSendTime = sms.tSendTime; //将收到的短信转到到一个网页中 if ( lCorpID>0 && _tcslen(szUpSms)>0 ) { UpSmsS * pUpSms = new UpSmsS; memset(pUpSms , 0 , sizeof(UpSmsS)); pUpSms->lCorpID = lCorpID; pUpSms->lUserID = lUserID; pUpSms->lType = 0; //上行短信 pUpSms->pDlg = pSMSDlg; _tcscpy(pUpSms->szSendNum , data.szSendNum ); _tcscpy(pUpSms->szRecvNum , data.szRecvNum ); _tcscpy(pUpSms->szAddNum , data.szRecvStatus ); //扩展号码 _tcscpy(pUpSms->szMsg , data.szMsg ); if ( szUpSms[0] == 'A' ) //有个A在前面表示推送状态报告 _tcscpy(pUpSms->szUrl , szUpSms+1 ); else _tcscpy(pUpSms->szUrl , szUpSms ); pUpSms->tSendTime = data.tSendTime; //启动线程进行传送 //::AfxBeginThread((AFX_THREADPROC)Recv_Sms_UpSms,(LPVOID)pUpSms,THREAD_PRIORITY_BELOW_NORMAL); QueueUserWorkItem(Recv_Sms_UpSms,(LPVOID)pUpSms , WT_EXECUTELONGFUNCTION ); } //防止'引起的问题 CString strTempMsg = data.szMsg; strTempMsg.Replace(_T("'"),_T("''")); CString strSubTime; strSubTime.Format( _T("'%04d%02d%02d %02d:%02d:%02d'") , sms.tSendTime.wYear,sms.tSendTime.wMonth,sms.tSendTime.wDay,sms.tSendTime.wHour,sms.tSendTime.wMinute,sms.tSendTime.wSecond ); //插入多一份到smsrecvlog表中 strSelect.Format( _T("insert into smsrecvlog(corpid,userid,groupid,Sender,sendnum,recver,recvnum,AddNum,recvnumtype,msg,subtime,LongMsg) values (%d,%d,'%s','%s','%s','%s','%s','%s',%d,'%s',%s,'%s') ") , data.lCorpID, data.lUserID, data.szGroupID, data.szSender, data.szSendNum, data.szRecver, data.szRecvNum, strExNum, lMobileType, strTempMsg, strSubTime, sms.szRecver ); BOOL b = pAdoRS->Open(strSelect); //取ID strSelect = _T("SELECT SCOPE_IDENTITY()") ; if ( pAdoRS->Open( strSelect ) && !pAdoRS->IsEOF() ) { pAdoRS->GetCollect((long)0 , data.lSendID ); //再插入到corpsmsm.dbo.smssend 中 strSelect.Format( _T("insert into corpsmsm.dbo.smssend (SendID , CorpID,UserID,GroupID,Status,Sender,SendNum,RecvNum,RecvNumType,Recver,Msg,MsgType,SubTime,SendTime,RecvTime,RecvStatus,KF,MsgID) values (%d,%d,%d,'%s',%d,'%s','%s','%s',%d,'%s','%s',%d,%s,%s,%s,'%s',0,'%s') ") , data.lSendID, data.lCorpID, data.lUserID, data.szGroupID, data.lStatus, data.szSender, data.szSendNum, data.szRecvNum, lMobileType, data.szRecver, strTempMsg, data.lMsgType, strSubTime, strSubTime, strSubTime, strExNum, sms.szRecver); BOOL b = pAdoRS->Open( strSelect ); if ( lCorpID>0 ) { _tcscpy( data.szMsg , sms.szMsg ); _tcscpy( data.szMsgID , sms.szRecver); //长短信消息 if (!pSMSDlg->SocketPushMsg(pAdoRS, data, strProv, strCity)) //没有推送到客户端,可能是其它中心端的,写到数据库中让其它中心端推送 { #if (defined(SMSCENTER_ONE)||defined(SMSCENTER_TWO)) && defined(_UNICODE) && !defined(SMSCENTER_DEMO) //推送到非UNICODE的客户端 ////PushRecvSmsToOtherCenter(hPipe, data, strProv, strCity); //PushRecvSmsToOtherCenter(pAdoRS, data, strProv, strCity); #endif } } } /* strSelect.Format( _T("insert into smssend (CorpID,UserID,GroupID,Status,Sender,SendNum,RecvNum,RecvNumType,Recver,Msg,MsgType,SubTime,SendTime,RecvTime,RecvStatus,KF,MsgID) values (%d,%d,'%s',%d,'%s','%s','%s',%d,'%s','%s',%d,%s,%s,%s,'%s',0,'%s') ") , data.lCorpID, data.lUserID, data.szGroupID, data.lStatus, data.szSender, data.szSendNum, data.szRecvNum, lMobileType, data.szRecver, strTempMsg, data.lMsgType, strSubTime, strSubTime, strSubTime, szExNumb2, sms.szRecver); BOOL b = pAdoRS->Open( strSelect ); if ( b && lCorpID>0 ) { //取SendID //strSelect.Format( _T("select * from smssend where UserID=%d AND SubTime=%s AND MsgType=%d order by SubTime desc") , data.lUserID,strSubTime,data.lMsgType); //strSelect.Format( "select SendID from smssend where UserID=%d and RecvTime=%s",data.lUserID,strSubTime); //if ( pAdoRS->Open(strSelect) && !pAdoRS->IsEOF()) strSelect = _T("SELECT SCOPE_IDENTITY();") ; if ( pAdoRS->Open( strSelect ) && !pAdoRS->IsEOF() ) { pAdoRS->GetCollect((long)0 , data.lSendID ); //pAdoRS->GetCollect( _T("SendID") , data.lSendID ); //收到短信,通知已连接的用户 //SmsSendData * psms = new SmsSendData; //*psms = data; //_tcscpy( psms->szMsg , sms.szMsg ); //pSMSDlg->On_User_PushMsg( SMS_PUSH , (WPARAM)psms , 0 ); //插入多一份到smsrecvlog表中 strSelect.Format( _T("insert into smsrecvlog(sendid,corpid,userid,groupid,Sender,sendnum,recver,recvnum,AddNum,recvnumtype,msg,subtime,LongMsg) values (%d,%d,%d,'%s','%s','%s','%s','%s','%s',%d,'%s',%s,'%s') ") , data.lSendID, data.lCorpID, data.lUserID, data.szGroupID, data.szSender, data.szSendNum, data.szRecver, data.szRecvNum, szExNumb2, lMobileType, strTempMsg, strSubTime, sms.szRecver ); pAdoRS->Open(strSelect); _tcscpy( data.szMsg , sms.szMsg ); _tcscpy( data.szMsgID , sms.szRecver); //长短信消息 if ( bSubmitSms ) { pSMSDlg->SocketPushMsg(pAdoRS, data,strProv,strCity ); } } } #endif if ( lCorpID <= 0 ) //没找到相应企业ID,退出 return false; */ //先查询是否要转发 if ( lUserID != 0 ) //属于私人信息 strSelect.Format( _T("select * from smszf where UserID=%d AND ((BZF='1' or BZF='5') or (BZF='3' or BZF='7') and '%s' in (select mobile from smszf where UserID=%d)) ") , lUserID,sms.szSendNum,lUserID ); else strSelect.Format( _T("select * from smszf where CorpID=%d AND UserID=0 AND ((BZF='1' or BZF='5') or (BZF='3' or BZF='7') and '%s' in (select mobile from smszf where CorpID=%d and UserID=0)) ") , lCorpID,sms.szSendNum,lCorpID ); if ( pAdoRS->Open( strSelect ) && !pAdoRS->IsEOF() ) //有要转发的手机号码 { TCHAR szTemp[32]={0}; pAdoRS->GetCollect( _T("BZF") , szTemp ); long lZF = szTemp[0]-'0'; //在转发中取姓名 CString strSender; strSelect.Format( _T("select * from smszf with(nolock) where CorpID=%d and Mobile='%s'"),lCorpID,sms.szSendNum ); if ( pAdoRS2->Open( strSelect ) && !pAdoRS2->IsEOF() ) { pAdoRS2->GetCollect(_T("Name"),strSender); pAdoRS2->Close(); } //在公用通讯录中检索姓名 strSelect.Format( _T("select * from corpsmsa.dbo.gaddress with(nolock) where CorpID=%d and Mobile='%s'"),lCorpID,sms.szSendNum ); if ( strSender.GetLength()<=0 && pAdoRS2->Open( strSelect ) && !pAdoRS2->IsEOF() ) { pAdoRS2->GetCollect(_T("Name"),strSender); pAdoRS2->Close(); } //在帐号管理中检索姓名 strSelect.Format( _T("select * from users with(nolock) where CorpID=%d and Mobile='%s'"),lCorpID,sms.szSendNum ); if ( strSender.GetLength()<=0 && pAdoRS2->Open( strSelect ) && !pAdoRS2->IsEOF() ) { pAdoRS2->GetCollect(_T("Name"),strSender); pAdoRS2->Close(); } //pAdoRS->MoveFirst(); SYSTEMTIME t;::GetLocalTime(&t); while( !pAdoRS->IsEOF() ) { SubmitData data = { 0 }; data.lCorpID = lCorpID; data.lUserID = lUserID; pAdoRS->GetCollect( _T("Name") , data.szName ); pAdoRS->GetCollect( _T("Mobile") , data.szMobile ); /* //先发送提示 _stprintf( data.szMsg , _T("短信转发通知:\n你的%s号码在%02d.%02d %02d:%02d时收到%s的短信,内容见下一条短信。") , sms.szRecvNum ,t.wMonth,t.wDay,t.wHour,t.wMinute,sms.szSendNum ); SubmitSms( data,pAdoRS2,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 //再发送转发内容 _tcscpy( data.szMsg , sms.szMsg ); SubmitSms( data,pAdoRS2,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 */ //合成一条发送 memset(data.szSendNum,0,sizeof(data.szSendNum)); if ( strSender.GetLength()<=0 ) _stprintf( data.szMsg , _T("转发%s:%s") , sms.szSendNum,sms.szMsg ); else _stprintf( data.szMsg , _T("%s:%s") , strSender,sms.szMsg ); data.lItem = 100; //有此标志,需要带签名发送 if (lZF&SMSZF_LONGSMS) //是否强制使用长短信转发 { data.lItemID = 100; } SubmitSms( data,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 pAdoRS->MoveNext(); } } /* //商务通特殊处理 if ( bSWT ) { long lAddNum = 0; TCHAR szAddNum[32]={0}; _tcscpy(szAddNum , szExNumb+_tcslen(szExNum)+_tcslen(szExNum2) ); szAddNum[2]=0; lAddNum = _ttol(szAddNum); memset(data.szSendNum,0,sizeof(data.szSendNum)); if ( lAddNum>0 ) { strSelect.Format( _T("select top 1 * from SWT_Log where UserID=%d and AddNum=%d order by SubTime Desc") , lUserID , lAddNum ); if ( pAdoRS->Open(strSelect) && !pAdoRS->IsEOF() ) { CString strMobile1; CString strMobile2; CString strRecvName; long lSWTID=0; long lWYID=0; pAdoRS->MoveFirst(); pAdoRS->GetCollect( _T("SendMobile") , strMobile1 ); pAdoRS->GetCollect( _T("RecvMobile") , strMobile2 ); pAdoRS->GetCollect( _T("RecvName") , strRecvName ); pAdoRS->GetCollect( _T("SWTID") , lSWTID ); pAdoRS->GetCollect( _T("WYID") , lWYID ); if ( strMobile1 == CString(sms.szSendNum) ) //为客户回复的短信 { if (isMobileNum(strMobile2)) //通过手机转发 { SubmitData data={0}; data.lCorpID = lCorpID; data.lUserID = lUserID; _tcscpy(data.szSendNum,szAddNum); _tcscpy(data.szMobile , strMobile2 ); _tcscpy(data.szMsg , sms.szMsg ); data.lItem = 100; //有此标志,需要带签名发送 SubmitSms( data,pAdoRS2,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } //记录在商务通中 strSelect.Format( _T("insert into SWT_Log (CorpID,UserID,SWTID,WYID,SendMobile,RecvName,RecvMobile,Type,Msg,SubTime) values (%d,%d,%d,%d,'%s','%s','%s',0,'%s',GETDATE())"), lCorpID,lUserID,lSWTID,lWYID,strMobile1,strRecvName,strMobile2,strTempMsg); pAdoRS->Open(strSelect); } if ( strMobile2 == CString(sms.szSendNum) ) //为回复给客户的短信 { if (isMobileNum(strMobile1)) //通过手机转发 { SubmitData data={0}; data.lCorpID = lCorpID; data.lUserID = lUserID; _tcscpy(data.szSendNum,szAddNum); _tcscpy(data.szMobile , strMobile1 ); _tcscpy(data.szMsg , sms.szMsg ); data.lItem = 100; //有此标志,需要带签名发送 SubmitSms( data,pAdoRS2,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } //记录在商务通中 strSelect.Format( _T("insert into SWT_Log (CorpID,UserID,SWTID,WYID,SendMobile,RecvName,RecvMobile,Type,Msg,SubTime) values (%d,%d,%d,%d,'%s','%s','%s',4,'%s',GETDATE())"), lCorpID,lUserID,lSWTID,lWYID,strMobile1,strRecvName,strMobile2,strTempMsg); pAdoRS->Open(strSelect); } } } } */ if ( data.lUserID==DEFAULT_SEND_USERID ) //回访特殊处理 { COleDateTime t=COleDateTime::GetCurrentTime()-COleDateTimeSpan(1,0,0,0); strSelect.Format(_T("select * from corp_bz where LXRMobile='%s' and NRType=1 and SendSms=1 and SmsRetType=0 and CreateTime>'%04d%02d%02d %02d:%02d' order by CreateTime desc") , sms.szSendNum , t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute() ); if ( pAdoRS->Open(strSelect) && !pAdoRS->IsEOF() ) { long lBZID=0; pAdoRS->GetCollect( _T("BZID") , lBZID ); long lRetType=_ttol(data.szMsg); if (lRetType>9 ) { strSelect.Format(_T("%d") , lRetType ); lRetType = _ttol(strSelect.Left(1)); } if ( lRetType<1 || lRetType>3 ) lRetType=0; strSelect.Format( _T("update corp_bz set SmsRetType='%d' , SmsRetMsg='%s' where BZID=%d") , lRetType,strTempMsg,lBZID); pAdoRS->Open(strSelect); } } return true; } catch(...) { LOG_APPERROR(_T("T")); return false; } } long CSendThread::SubmitSms(SubmitData &SendData,CAdoRecordSet * pAdoRS,CAdoRecordSet * pAdoRS2,CSmsCenterDlg * pSMSDlg,long lMobileType,long lSmsType,long lSmsKF) { #ifdef SMSCENTER_ADC_TEMP //临时第三平台,不能发送短信 return false; #endif try { if (SendData.lPrority == 876534 && CString(SendData.szName).MakeLower() == CString(_T("WxWork")).MakeLower()) //属于企业微信的内容 { CString strPT = _T("平台1"); #ifdef SMSCENTER_TWO //第二短信平台 strPT = _T("平台2"); #endif #ifdef SMSCENTER_THREE //第三短信平台 strPT = _T("平台3"); #endif CString strSelect; SYSTEMTIME t; GetLocalTime(&t); strSelect.Format(_T("%s %04d.%02d.%02d %02d:%02d:%02d
%s"), strPT, t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond, SendData.szMsg); REQ_WxWork_Send send; send.strSender = _T("平台通知"); send.strRecver = SendData.szMobile; send.strMsg = strSelect; pSMSDlg->m_WxWorkSend.AddTail(send); return 0; } TCHAR szSmsTD[32]={0}; TCHAR szCM[64]={0}; //取企业签名 CString strSelect; if ( SendData.lUserID != 0 ) //如果UserID==0,则是企业转发 { strSelect.Format( _T("select * from users with(nolock) where UserID=%d") , SendData.lUserID ); BOOL b = pAdoRS->Open( strSelect ); if ( b && !pAdoRS->IsEOF() ) { pAdoRS->GetCollect(_T("CM2") , szCM ); } } strSelect.Format( _T("select * from corp with(nolock) where CorpID=%d") , SendData.lCorpID ); BOOL b = pAdoRS->Open( strSelect ); if ( b && !pAdoRS->IsEOF() ) { pAdoRS->GetCollect( _T("SMSTD") , szSmsTD ); _tcscat(szSmsTD,_T("000000")); //取得短信通道 if ( _tcslen(szCM)<=0 ) pAdoRS->GetCollect(_T("CM") , szCM ); } long lMaxSendLenB = MSG_MAXSENDLEN; long lZDCMLen = 0; #if defined(SMSCENTER_NX) && defined(SMSCENTER_GDDX) //农信自带签名6个字 lZDCMLen = 6; #endif #if defined(SMSCENTER_NX) && defined(SMSCENTER_DGSB) //社保局的签名字数是6个字 lZDCMLen = 6; //签名为【东莞人社】 #endif #ifdef SMSCENTER_DGSB_SGYD lZDCMLen = 0; #endif ANS_GetTD2Data td={0}; if ( CSendPub::GetTDPro(pAdoRS,szSmsTD,td,MOBILE_TYPE_CMCC)) //取此企业所设置的通道属性,看是否要缩减字数 { if ( td.lContentLen>10 && td.lContentLen<70 ) lZDCMLen = MSG_MAXSENDLEN-td.lContentLen; } lMaxSendLenB = lMaxSendLenB-lZDCMLen; long lSignLen = 0; if ( SendData.lItem != 101 && _tcslen(szCM)>0) //信息源不带带签名 { #ifdef UNICODE lSignLen = _tcslen(szCM); #else lSignLen = MultiByteToWideChar( CP_ACP,NULL,szCM,_tcslen(szCM), NULL,0); #endif if ( lSignLen>0 ) lSignLen = lSignLen+2; //加上括号 } long lMobileCount=0; if ( SendData.lMobileCount<=0 || SendData.lMobileCount>SubmitData_Mobile_Max) //如果MobileCount<0,为旧版的短信发送,改为新版 { SendData.lMobileCount=1; _tcscpy(SendData.Mobile[0].szName , SendData.szName); _tcscpy(SendData.Mobile[0].szMobile , SendData.szMobile); } lMobileCount = SendData.lMobileCount * 16; //每个号码最多16条短信 ANS_SendData2 * pSmsData = new ANS_SendData2[lMobileCount]; memset(pSmsData , 0 , sizeof(ANS_SendData2)*lMobileCount); srand(::GetTickCount()); long lMobileIndex = 0; for (int j=0 ; j< SendData.lMobileCount ; j++ ) { pSmsData[lMobileIndex].lCorpID = SendData.lCorpID; pSmsData[lMobileIndex].lUserID = SendData.lUserID; _tcscpy( pSmsData[lMobileIndex].szMobile , SendData.Mobile[j].szMobile ); _tcscpy( pSmsData[lMobileIndex].szName , SendData.Mobile[j].szName ); CString strNewMsg = SendData.szMsg; //取新的短信内容,因为允许发备注信息,每条内容均有可能不同 try { if ( SendData.Mobile[j].pMsg && SendData.Mobile[j].pMsg->GetLength()>0 ) { strNewMsg = *SendData.Mobile[j].pMsg; } } catch(...) { LOG_APPERROR(_T("T")); } //先将内容分段 //计算分段 CStringArray saMsg; //判断是否需要分段发送 TCHAR szSrcMsg[2048]={0}; _tcscpy(szSrcMsg , strNewMsg); long lMsgAll=0; long lMsgIndex = 1; BOOL bGetMsg2; TCHAR szSendMsg1[512]={0}; TCHAR szSendMsg2[512]={0}; long lMsgLen =0; #ifdef UNICODE lMsgLen = _tcslen(szSrcMsg); #else lMsgLen = MultiByteToWideChar( CP_ACP,NULL,szSrcMsg,_tcslen(szSrcMsg), NULL,0); #endif //判断是否以长短信方式发送 BOOL bLongSms=false; long lRand=0; //随机数,长短信有用 long lMaxSendLen = lMaxSendLenB; if ( lMsgLen+lSignLen>lMaxSendLen && SendData.lItemID!=102) //102,强制非长短信 { if (SendData.lItem != 101 && _tcslen(szCM)>0) //长短信,短信内容加上签名 { /* _tcscat(szSrcMsg , _T("【")); _tcscat(szSrcMsg , szCM ); _tcscat(szSrcMsg , _T("】")); */ //所有签名前置 CString strSrcMsg22; strSrcMsg22.Format(_T("【%s】%s"), szCM, szSrcMsg); _tcscpy(szSrcMsg, strSrcMsg22); } bLongSms = true; } if ( bLongSms ) //如果不是长短信 { lMaxSendLen = MSG_MAXSENDLEN-3; //长短信,默认都是67个字 } else { lMaxSendLen = lMaxSendLen-lSignLen; } while ( true ) { memset( szSendMsg2 , 0 , sizeof(szSendMsg2) ); //if ( isChinese( szSrcMsg,_tcslen(szSrcMsg) ) ) //{ bGetMsg2 = GetSpiltUnicodeMsg( szSrcMsg , szSendMsg1 , lMsgIndex , lMaxSendLen ,lMsgAll); //} //else //{ // bGetMsg2 = GetSpiltAsciiMsg( szSrcMsg , szSendMsg2 , lMsgIndex , MSG_MAXSENDLEN*2+MSG_MAXSENDLEN*2/7 ,lMsgAll); //} if ( bGetMsg2 ) { if ( bLongSms ) { saMsg.Add(szSendMsg1); } else { if (SendData.lItem != 101 && _tcslen(szCM)>0) //长短信,短信内容加上签名 { /* _tcscat(szSendMsg1 , _T("[")); _tcscat(szSendMsg1 , szCM ); _tcscat(szSendMsg1 , _T("]")); */ //所有签名前置 CString strSrcMsg22; strSrcMsg22.Format(_T("【%s】%s"), szCM, szSendMsg1); _tcscpy(szSendMsg1, strSrcMsg22); } saMsg.Add(szSendMsg1); } } else { break; } lMsgIndex ++; } if ( lZDCMLen >0 ) //有自带签名 { if ( bLongSms && saMsg.GetSize()>0) { strSelect = saMsg.GetAt(saMsg.GetSize()-1); //最后一条内容 #ifdef UNICODE lMsgLen = _tcslen(strSelect); #else lMsgLen = MultiByteToWideChar( CP_ACP,NULL,strSelect,_tcslen(strSelect), NULL,0); #endif if ( lMsgLen>lMaxSendLen-lZDCMLen ) { saMsg.Add(CString(_T(""))); //加多一条内容用于签名 } } } long lZDSmsCount=saMsg.GetSize() * SendData.lMobileCount; //计算应该扣费条数 long lKF=1; /* //日程提醒与邮件通知发一条当2条计 if ( lSmsType == SMSTYPE_ALARM || lSmsType == SMSTYPE_EMAIL ) { lZDSmsCount = lZDSmsCount*2; lKF = 2; } if ( lSmsType == SMSTYPE_SP ) //增值业务的扣费 { lZDSmsCount = lZDSmsCount*lSmsKF; lKF = lSmsKF; } */ if ( lMsgAll<0 || lMsgAll>15 ) { continue; } lMsgAll = saMsg.GetSize(); lRand = rand()%254; if ( lRand<0 ) lRand=-lRand; for ( int h=1 ; h<=lMsgAll ; h++ ) { if ( h>1 ) { pSmsData[lMobileIndex] = pSmsData[lMobileIndex-1]; //多条内容的情况,除短信内容外复制前一个数组的其它数据 } if ( bLongSms ) { _stprintf( pSmsData[lMobileIndex].szMsg , _T("长信%02X%X%X:%s") , lRand,lMsgAll,h,saMsg.GetAt(h-1)); } else { _tcscpy(pSmsData[lMobileIndex].szMsg , saMsg.GetAt(h-1) ); } pSmsData[lMobileIndex].tOvrTime.wSecond = lRand; pSmsData[lMobileIndex].tOvrTime.wDayOfWeek =(WORD)(h*100+lMsgAll); lMobileIndex ++; if ( lMobileIndex >= lMobileCount ) break; } if ( lMobileIndex >= lMobileCount ) break; } CSendPub::SendPub_Mms Sms={0}; Sms.lCorpID = SendData.lCorpID; Sms.lUserID = SendData.lUserID; //_tcscpy(Sms.szIP , m_szIP); Sms.lPriority = SendData.lPrority; //Sms.lPriority = 0; //由SubmitMms计算优先级 //Sms.lSendCount = m_dwSendCount; //总短信发送量,用于计算发送条数 Sms.tTimer = SendData.tTimer; Sms.bFirstCheckYE = true; //预先检查余额,余额不足时不发送 CString strErrMsg; long lRet = CSendPub::SubmitSms(Sms, pSmsData,lMobileIndex,strErrMsg,pAdoRS,pAdoRS2); delete pSmsData; return lRet; } catch (...) { LOG_APPERROR(_T("T")); } return -1; } BOOL CSendThread::SplitNum(TCHAR *pCorp, TCHAR *pMan) { TCHAR szBuf[32]={0}; _tcscpy( szBuf , pCorp ); #ifdef SMSCENTER_ADC memcpy(pCorp , szBuf , 4); //adc的子特服号为4位 _tcscpy(pMan , szBuf+4 ); pCorp[4]=0; pMan[3]=0; return true; #endif #ifdef SMSCENTER_TWO if ( szBuf[0] >= '0' && szBuf[0] <= '3' ) { memcpy( pCorp , szBuf , 2 ); //2位 _tcscpy( pMan , szBuf+2 ); //3位 pCorp[2]=0; pMan[3]=0; return true; //第一号 } if ( szBuf[0] >= '4' && szBuf[0] <='5') { memcpy( pCorp , szBuf , 4 ); //3位 _tcscpy( pMan , szBuf+4 ); pCorp[4]=0; pMan[2]=0; return true; //第一号 } if ( szBuf[0] >= '6' && szBuf[0] <='8') { memcpy( pCorp , szBuf , 1 ); //3位 _tcscpy( pMan , szBuf+1 ); pCorp[1]=0; pMan[3]=0; return true; //第一号 } if ( szBuf[0] == '9' ) { memcpy( pCorp , szBuf , 5 ); //3位 _tcscpy( pMan , szBuf+5 ); pCorp[5]=0; pMan[1]=0; return true; //第一号 } return false; #else if ( szBuf[0] >= '0' && szBuf[0] <='3' ) { memcpy( pCorp , szBuf , 3 ); //3位 _tcscpy( pMan , szBuf+3 ); pCorp[3]=0; pMan[3]=0; return true; //第一号 } #endif if ( szBuf[0] == '5' ) //属于速达用户 { memcpy( pCorp , szBuf , 6 ); //3位 _tcscpy( pMan , szBuf+6 ); pCorp[6]=0; pMan[2]=0; return true; //第一号 } if ( szBuf[0] >= '4' && szBuf[0] <='8') { memcpy( pCorp , szBuf , 4 ); //3位 _tcscpy( pMan , szBuf+4 ); pCorp[4]=0; pMan[2]=0; return true; //第一号 } if ( szBuf[0] == '9' ) { memcpy( pCorp , szBuf , 5 ); //3位 _tcscpy( pMan , szBuf+5 ); pCorp[5]=0; pMan[1]=0; return true; //第一号 } /* //数据通专用 if ( szBuf[0] == '*' && szBuf[1] == '*' && szBuf[2] == '8' && szBuf[3] <='2' ) { memcpy( pCorp , szBuf , 4 ); //1位 _tcscpy( pMan , szBuf+4 ); pCorp[4]=0; pMan[1]=0; return true; //第一号 } if ( szBuf[0] == '*' && szBuf[1] == '2' ) { memcpy( pCorp , szBuf , 2 ); //1位 _tcscpy( pMan , szBuf+2 ); pCorp[2]=0; pMan[1]=0; return true; //第一号 } */ if ( szBuf[0] == '*' && szBuf[1] == '*' && szBuf[2] >= '0' && szBuf[2] <='3' ) { memcpy( pCorp , szBuf , 3 ); //1位 _tcscpy( pMan , szBuf+3 ); pCorp[3]=0; pMan[3]=0; return true; //第一号 } if ( szBuf[0] == '*' && szBuf[1] == '*' && ( (szBuf[2] >= '4' && szBuf[2] <='6') || szBuf[2] =='8') ) { memcpy( pCorp , szBuf , 4 ); //1位 _tcscpy( pMan , szBuf+4 ); pCorp[4]=0; pMan[3]=0; return true; } if ( szBuf[0] == '*' && szBuf[1] == '*' && (szBuf[2] == '7' || szBuf[2] =='9') ) { memcpy( pCorp , szBuf , 5 ); //1位 _tcscpy( pMan , szBuf+5 ); pCorp[5]=0; pMan[3]=0; return true; } if ( szBuf[0] == '*' && szBuf[1] >= '0' && szBuf[1] <='3' ) { memcpy( pCorp , szBuf , 2 ); //1位 _tcscpy( pMan , szBuf+2 ); pCorp[2]=0; pMan[3]=0; return true; //第一号 } if ( szBuf[0] == '*' && szBuf[1] =='6' ) { memcpy( pCorp , szBuf , 2 ); //1位 _tcscpy( pMan , szBuf+2 ); pCorp[2]=0; pMan[3]=0; return true; //第一号 } if ( szBuf[0] == '*' && szBuf[1] >= '4' && szBuf[1] <='6' ) { memcpy( pCorp , szBuf , 3 ); //1位 _tcscpy( pMan , szBuf+3 ); pCorp[3]=0; pMan[3]=0; return true; } if ( szBuf[0] == '*' && szBuf[1] >= '7' && szBuf[1] <='9' ) { memcpy( pCorp , szBuf , 4 ); //1位 _tcscpy( pMan , szBuf+4 ); pCorp[4]=0; pMan[3]=0; return true; } return false; } DWORD CSendThread::Recv_Sms_UpSms(LPVOID pParam) { try { UpSmsS sms={0}; UpSmsS * pSms = (UpSmsS *)(pParam); sms = *pSms; delete pSms; CString strURL; CString strTemp; HINTERNET hNet = NULL; strTemp.Format(_T("UPSMS%d"),rand()); hNet = InternetOpen(strTemp,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0); if ( !hNet ) { return -1; } DWORD dwTimeOut=20*1000; InternetSetOption(hNet,INTERNET_OPTION_CONNECT_TIMEOUT,&dwTimeOut,sizeof(dwTimeOut)); InternetSetOption(hNet,INTERNET_OPTION_SEND_TIMEOUT,&dwTimeOut,sizeof(dwTimeOut)); InternetSetOption(hNet,INTERNET_OPTION_RECEIVE_TIMEOUT,&dwTimeOut,sizeof(dwTimeOut)); strURL.Format( _T("%s?Type=MO&CorpID=%d&SendNum=%s&RecvNum=%s&AddNum=%s&Msg=%s"),sms.szUrl,sms.lCorpID,sms.szSendNum,sms.szRecvNum,sms.szAddNum,sms.szMsg); HINTERNET hUrl = InternetOpenUrl(hNet,strURL,NULL,0,INTERNET_FLAG_RELOAD,0); if ( hUrl ) { /* char buffer[1024]={0} ; DWORD dwBytesRead = 0; BOOL bRead = ::InternetReadFile(hUrl, buffer, sizeof(buffer), &dwBytesRead); */ ::InternetCloseHandle(hUrl); } ::InternetCloseHandle(hNet); } catch(...) { LOG_APPERROR(_T("T")); } return 0; } /* BOOL CSendThread::SetSmsAddOne(CAdoRecordSet *pAdoRS, long lCorpID, long lUserID, long lKF, const TCHAR *pRecvStatus,long lSendRet,BOOL bAdc) { BOOL b; CString strSelect; if ( lKF<=0 || lKF>50 ) lKF = 1; //因为状态报告返回失败,所以扣费不成功 //因为发送失败,可用短信应加1,已发短信减1 if ( lSendRet>=100000 ) //SendRet为企业ID的是移动业务,不扣费 { } else { if ( bAdc ) strSelect.Format( _T("update corp set MQ_SmsUsed=MQ_SmsUsed+%d,MQ_SmsSendAll=MQ_SmsSendAll-%d where CorpID=%d ") ,1,1,lCorpID ); //adc只扣费1条 else #ifdef SMSCENTER_NX strSelect.Format( _T("update corp set SmsUsed=SmsUsed+%d,SmsSendAll=SmsSendAll-%d,Day_ReportFail=Day_ReportFail+%d where CorpID=%d ") ,lKF,lKF,lKF,lCorpID ); #else strSelect.Format( _T("update corp set SmsUsed=SmsUsed+%d,SmsSendAll=SmsSendAll-%d where CorpID=%d ") ,lKF,lKF,lCorpID ); #endif b = pAdoRS->Open( strSelect ); } //用户短信加1 strSelect.Format( _T("update users set SMSUsed=SMSUsed+%d where UserID=%d AND SMSUsed != -100 ") , lKF,lUserID ); b = pAdoRS->Open( strSelect ); //已发短信减1 strSelect.Format( _T("update users set SmsSendAll=SmsSendAll-%d where UserID=%d ") ,lKF,lUserID ); b = pAdoRS->Open( strSelect ); //超级代理商特殊处理 if ( pRecvStatus[0] == 'A' ) { long lAgentID=0; long lAgentType=0; //取代理商ID strSelect.Format( _T("select * from corp with (nolock) where corpid=%d") , lCorpID ); if ( pAdoRS->Open( strSelect ) && !pAdoRS->IsEOF() ) { //pAdoRS->MoveFirst(); pAdoRS->GetCollect( _T("AgentID") , lAgentID ); pAdoRS->Close(); if ( lAgentID > 0 ) { //取代理商信息 strSelect.Format( _T("select * from agent with (nolock) where agentID=%d") , lAgentID ); if ( pAdoRS->Open( strSelect ) && !pAdoRS->IsEOF() ) { //pAdoRS->MoveFirst(); pAdoRS->GetCollect( _T("Type") , lAgentType ); pAdoRS->Close(); if ( lAgentType ==2 ) //超级代理商 { strSelect.Format( _T("Update agent set used=used+%.2f where agentid=%d"),lKF*0.10f,lAgentID); pAdoRS->Open( strSelect ); pAdoRS->Close(); } } } } } return true; } BOOL CSendThread::SetSmsAddOne(CAdoRecordSet *pAdoRS, long lSendID,long lType) { CString strSelect; if ( lType ==2 ) strSelect.Format( _T("select * from corpsmsm.dbo.smssendt with (nolock) where SendID=%d") , lSendID); else strSelect.Format( _T("select * from smssend with (nolock) where SendID=%d") , lSendID); BOOL b =pAdoRS->Open( strSelect ); if ( b && !pAdoRS->IsEOF() ) { long lCorpID=0; long lUserID=0; long lKF=0; BOOL bAdc=false; long lSendRet=0; #ifdef SMSCENTER_ADC long lRecvNumType=0; long lStatus=0; long lSendFCS=0; #endif TCHAR szRecvStatus[32]={0}; //pAdoRS->MoveFirst(); pAdoRS->GetCollect( _T("CorpID") , lCorpID ); //取得发送ID pAdoRS->GetCollect( _T("UserID") , lUserID ); //取得发送ID pAdoRS->GetCollect( _T("KF") , lKF ); //取得发送ID pAdoRS->GetCollect( _T("RecvStatus") , szRecvStatus ); pAdoRS->GetCollect( _T("SendRet") , lSendRet ); #ifdef SMSCENTER_ADC pAdoRS->GetCollect( _T("Status") , lStatus ); //取得发送ID pAdoRS->GetCollect( _T("RecvNumType") , lRecvNumType ); //取得发送ID pAdoRS->GetCollect( _T("SendFCS") , lSendFCS ); if ( lStatus>=10 ) { if ( lRecvNumType==0 && lSendFCS==0 ) bAdc=true; } else { if ( lRecvNumType==0 && lSendRet==0 ) bAdc=true; } #endif if ( lKF<=0 || lKF>50 ) lKF = 1; return SetSmsAddOne(pAdoRS,lCorpID,lUserID,lKF,szRecvStatus,lSendRet,bAdc); } return false; } */ BOOL CSendThread::Recv_Mms(MmsRecv mms, CAdoRecordSet *pAdoRS, CAdoRecordSet *pAdoRS2, CSmsCenterDlg *pSMSDlg) { try { CString str; CString strAllNum = mms.szRecvNum; CString strExTFH; CString strExCorpNum; CString strCorpNum; CString strUserNum; CString strExNum; CString strGroupID; CString strSender; CString strRecver; CString strProv,strCity; long lCorpID=0; long lUserID=0; long lTFHBegin=0; //查通道ID CString strTDNum; long lLen = strAllNum.GetLength(); for ( int i=lLen; i>=0 ; i-- ) { strTDNum = strAllNum.Left(i); //从左开始增位判断是否为特服号 str.Format(_T("select * from TD2 where Ability=1 and AccessPort='%s'") , strTDNum ); if (strTDNum.GetLength()>0 && pAdoRS->Open(str) && !pAdoRS->IsEOF() ) { lTFHBegin = i; break; } } if ( lTFHBegin>0 ) { strExTFH = strAllNum.Right(strAllNum.GetLength()-lTFHBegin); //排除总特服号后剩下的号码 //查询企业ID long lLen = strExTFH.GetLength(); for ( int i=lLen; i>=0 ; i-- ) { strCorpNum = strExTFH.Left(i); //从右开始缩位判断是否企业特服号 str.Format(_T("select * from Corp with(nolock) where SMSNum='%s'") , strCorpNum ); if (strCorpNum.GetLength()>0 && pAdoRS->Open(str) && !pAdoRS->IsEOF() ) { pAdoRS->GetCollect(_T("CorpID") , lCorpID ); break; } } //查找用户ID if (lCorpID>0 ) { strExCorpNum = strExTFH.Right(strExTFH.GetLength()-strCorpNum.GetLength()); //排除企业特服号后剩下的号码 long lLen = strExCorpNum.GetLength(); for ( int i=lLen; i>=0 ; i-- ) { strUserNum = strExCorpNum.Left(i); //从右开始缩位判断是否企业特服号 str.Format(_T("select * from Users with(nolock) where CorpID=%d and SMSNum='%s'") , lCorpID , strUserNum ); if (strUserNum.GetLength()>0 && pAdoRS->Open(str) && !pAdoRS->IsEOF() ) { pAdoRS->GetCollect(_T("UserID") , lUserID ); pAdoRS->GetCollect(_T("Name") , strRecver ); pAdoRS->GetCollect(_T("GroupID") , strGroupID ); break; } } } strExNum = strExTFH.Right(strExTFH.GetLength()-strCorpNum.GetLength()-strUserNum.GetLength()); } /* //将收到的短信转到到一个网页中 if ( lCorpID2>0 && _tcslen(szUpSms) >0 && bSubmitSms ) { UpSmsS * pUpSms = new UpSmsS; _tcscpy(pUpSms->szSendNum , data.szSendNum ); _tcscpy(pUpSms->szRecvNum , data.szRecvNum ); _tcscpy(pUpSms->szMsg , data.szMsg ); _tcscpy(pUpSms->szUrl , szUpSms ); pUpSms->tSendTime = data.tSendTime; //启动线程进行传送 ::AfxBeginThread((AFX_THREADPROC)UpSms,(LPVOID)pUpSms,THREAD_PRIORITY_BELOW_NORMAL); } */ //查询彩信归属地 long lMobileType=MOBILE_TYPE_UNKNOW; strSender = CSendPub::GetMobileProvCity(pAdoRS2,mms.szSendNum,lMobileType,strProv,strCity); //防止'引起的问题 CString strTempTitle = mms.szTitle; strTempTitle.Replace(_T("'"),_T("''")); //插入多一份到smsrecvlog表中 str.Format( _T("insert into MmsRecvLog(corpid,userid,MmsFileID,groupid,Sender,sendnum,recver,recvnum,AddNum,recvnumtype,Title,mmSize,subtime) values (%d,%d,%d,'%s','%s','%s','%s','%s','%s',%d,'%s',%d,GetDate()) ") , lCorpID, lUserID, mms.lMmsFileID, strGroupID, strSender, mms.szSendNum, strRecver, mms.szRecvNum, strExNum, lMobileType, strTempTitle, mms.lmmSize ); BOOL b = pAdoRS->Open(str); pAdoRS->Close(); if ( b ) { //取SendID long lSendID=0; str = _T("SELECT SCOPE_IDENTITY()") ; if ( pAdoRS->Open(str) && !pAdoRS->IsEOF() ) { pAdoRS->GetCollect( (long)0 , lSendID ); str.Format( _T("insert into corpsmsm.dbo.MmsSend (SendID,CorpID,UserID,MmsFileID,GroupID,Status,Sender,SendNum,RecvNum,RecvNumType,Recver,Title,mmSize,MsgType,SubTime,SendTime,RecvTime,RecvStatus,KF) values (%d,%d,%d,%d,'%s',%d,'%s','%s','%s',%d,'%s','%s',%d,%d,GetDate(),GetDate(),GetDate(),'%s',0) ") , lSendID, lCorpID, lUserID, mms.lMmsFileID, strGroupID, SEND_STATUS_RECV_OK, strSender, mms.szSendNum, mms.szRecvNum, lMobileType, strRecver, strTempTitle, mms.lmmSize, SMSTYPE_RECV, strExNum); pAdoRS->Open( str ); pAdoRS->Close(); //收到短信,通知已连接的用户 //SmsSendData * psms = new SmsSendData; //*psms = data; //_tcscpy( psms->szMsg , sms.szMsg ); //pSMSDlg->On_User_PushMsg( SMS_PUSH , (WPARAM)psms , 0 ); /* if ( bSubmitSms ) { pSMSDlg->SocketPushMsg(pAdoRS, data,strProv,strCity ); } */ } } return TRUE; } catch(...) { LOG_APPERROR(_T("T")); } return false; } BOOL CSendThread:: ProcessUp(CSmsCenterDlg * pSMSDlg,DWORD dwType,long lMobileType,SmsSendData sms , CAdoRecordSet * pAdoRS, CAdoRecordSet * pAdoRS2,CAdoRecordSet * pAdoRS3,BOOL bReportNumber,long lCorpID,long lUserID,long lTDMode,CString strSName) { CString strSelect; CString strTemp; SubmitData Quitdata={0}; Quitdata.lCorpID = DEFAULT_SEND_CORPID; Quitdata.lUserID = DEFAULT_SEND_USERID; _tcscpy( Quitdata.szName , _T("ZF") ); //_tcscpy( Quitdata.szSendNum , sms.szRecvNum ); _tcscpy( Quitdata.szMobile , sms.szSendNum ); TCHAR szMsg[512]={0}; _tcscpy(szMsg , sms.szMsg ); ExChar(szMsg,_T("\r")); ExChar(szMsg,_T("\n")); ExChar(szMsg,_T(" ")); ExChar(szMsg,_T(" ")); ExChar(szMsg,_T(":")); _tcsupr(szMsg); //转大写 //判断是否为停止或开通服务 long lCorpID2 = lCorpID; long lCorpID3 = lCorpID; long lUserID2 = lUserID; long lUserID3 = lUserID; if ( lUserID2 <= 10000000 ) lUserID2 = -1; if ( lCorpID3 <100000 ) { lCorpID3 = DEFAULT_SEND_CORPID; //默认使用公司的帐号发送 lUserID3 = DEFAULT_SEND_USERID; lCorpID2 = -1; lUserID2 = -1; } if ( (!_tcsncmp(szMsg , _T("TD"),_tcslen(_T("TD")) )) || //5个0为取消业务 (!_tcsncmp(szMsg , _T("0000"),_tcslen(_T("0000")) ) ) || (!_tcscmp(szMsg , _T("N") ) ) || (!_tcscmp(szMsg, _T("R"))) || //2023 (!_tcscmp(szMsg, _T("T")))) //5个0为取消业务 { if (lCorpID2 < 100000) //读取企业发送记录,不加-1的黑名单 { strSelect.Format(_T("select top 1 * from corpsmsm.dbo.smssend with(nolock) where recvnum='%s' and SendNum like '%s%%' order by sendtime desc"), sms.szSendNum, sms.szRecvNum); if (pAdoRS->Open(strSelect) && !pAdoRS->IsEOF()) { pAdoRS->GetCollect(_T("CorpID"), lCorpID2); pAdoRS->GetCollect(_T("UserID"), lUserID2); } } //strSelect.Format( _T("insert into back (CorpID,UserID,Mobile,AddTime,BZ) values(%d,%d,'%s',GETDATE(),'自发00000取消业务!')"),lCorpID2,lUserID2,sms.szSendNum ); strSelect.Format( _T("insert into back (CorpID,UserID,Mobile,AddTime,BZ) values(%d,-1,'%s',GETDATE(),'自发00000取消业务!')"),lCorpID2,sms.szSendNum ); //精确到企业 //strSelect.Format( _T("insert into back (CorpID,UserID,Mobile,AddTime,BZ) values(-1,-1,'%s',GETDATE(),'自发00000取消业务!')"),sms.szSendNum ); //全禁 pAdoRS->Open( strSelect ); pAdoRS->Close(); if (lCorpID2 >= 100000) lCorpID3 = lCorpID2; if (lUserID2 >= 10000000) lUserID3 = lUserID2; /* if (lCorpID2>0 ) //白名单通道,需要删除白名单 { strSelect.Format( _T("delete from white2 where Mobile='%s' and CorpID=%d") , sms.szSendNum , lCorpID2 ); pAdoRS->Open(strSelect); pAdoRS->Close(); } */ if ( lCorpID3>0 && lCorpID3>0 ) { Sleep(2000); //延时,防止状态报告的接收不到 //发送短信 SubmitData data={0}; data.lCorpID = lCorpID3; data.lUserID = lUserID3; //data.lItem = 101; _tcscpy(data.szMobile,sms.szSendNum); //_stprintf( data.szMsg , _T("已成功禁用来自%s的信息!") , sms.szRecvNum); _stprintf( data.szMsg , _T("您已成功禁用来自%s的短信,再次开通接收%s的短信请发送11111到%s!") ,strSName,strSName,sms.szRecvNum); //_stprintf( data.szMsg , _T("尊敬的用户,您的取消发送请求已收到,我们将不再向您发送该类免费信息,如仍有问题可致电02033242290取消。[%s]") ,szSName); SubmitSms( data,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } } #ifdef SMSCENTER_GDDX if ( !_tcsncmp(szMsg , _T("DG"),_tcslen(_T("DG")) ) ) //5个0为取消业务 #else if ( !_tcsncmp(szMsg , _T("1111"),_tcslen(_T("1111")) ) ) //5个0为取消业务 #endif { //if ( lCorpID2>0 ) // strSelect.Format( _T("delete from back where Mobile='%s' and CorpID=%d"),sms.szSendNum,lCorpID2); //else strSelect.Format( _T("delete from back where Mobile='%s' "),sms.szSendNum); pAdoRS->Open( strSelect ); pAdoRS->Close(); if (lTDMode==1 && lCorpID2>0 ) //白名单通道,需要加入白名单 { strSelect.Format( _T("select * from white2 with (index(White2_Mobile),nolock ) where Mobile='%s' and CorpID=%d") , sms.szSendNum , lCorpID2 ); if ( pAdoRS->Open(strSelect) && !pAdoRS->IsEOF() ) { //已存在记录 long lWhiteID=0; pAdoRS->GetCollect(_T("WhiteID") , lWhiteID ); strSelect.Format( _T("update white2 set Status=%d where WhiteID=%d") ,1, lWhiteID ); pAdoRS->Open(strSelect); pAdoRS->Close(); } else { //插入新的白名单记录 strSelect.Format(_T("insert into White2 (CorpID,Mobile,AddTime,Status) values (%d,'%s',GetDate(),%d)") ,lCorpID2, sms.szSendNum ,1); pAdoRS->Open(strSelect); pAdoRS->Close(); } } if ( lCorpID3>0 && lCorpID3>0 ) { Sleep(2000); //延时,防止状态报告的接收不到 //发送短信 SubmitData data={0}; data.lCorpID = lCorpID3; data.lUserID = lUserID3; //data.lItem = 101; _tcscpy(data.szMobile,sms.szSendNum); //_stprintf( data.szMsg , _T("已成功启用来自%s的信息!") , sms.szRecvNum); _stprintf(data.szMsg, _T("您已再次开通来免费信息接收功能,禁止接收该信息请发送00000到%s!"), sms.szRecvNum); //_stprintf( data.szMsg , _T("您已再次开通来免费信息接收功能,禁止接收该信息请发送00000到%s![%s]") , sms.szRecvNum,strSName); SubmitSms( data,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } } //根据收到的内容判断是否属于短信查询的用户 if ( lCorpID2 >0 ) //必须有所属的企业有能有查询 { BOOL bQueryData=false; CString strCmd2=szMsg; strCmd2.Replace( _T("'") , _T("''")); if ( lUserID2 >0 ) strSelect.Format( _T("select * from Query where CorpID=%d and UserID=%d and Cmd='%s' and Status=1"),lCorpID2,lUserID2,strCmd2 ); else strSelect.Format( _T("select * from Query where CorpID=%d and Cmd='%s' and Status=1"),lCorpID2,strCmd2 ); if ( pAdoRS->Open(strSelect) && !pAdoRS->IsEOF()) bQueryData = true; //正常的查询不到,查询所有的默认指令 if (!bQueryData) { if ( lUserID2 >0 ) strSelect.Format( _T("select * from Query where CorpID=%d and UserID=%d and Cmd='*' and Status=1"),lCorpID2,lUserID2 ); else strSelect.Format( _T("select * from Query where CorpID=%d and Cmd='*' and Status=1"),lCorpID2 ); if ( pAdoRS->Open(strSelect) && !pAdoRS->IsEOF()) bQueryData = true; } if ( bQueryData ) { CString strRet; long lQueryID=0; pAdoRS->MoveFirst(); pAdoRS->GetCollect( _T("QueryID"), lQueryID ); pAdoRS->GetCollect( _T("UserID") , lUserID2 ); pAdoRS->GetCollect( _T("Ret") , strRet ); pAdoRS->Close(); //查询看是否开通了查询权限 strSelect.Format( _T("select * from users where userid=%d ") , lUserID2 ); if ( pAdoRS->Open(strSelect) && !pAdoRS->IsEOF() ) { pAdoRS->MoveFirst(); long lSDK = 0; pAdoRS->GetCollect( _T("SDK") , lSDK ); BOOL bQuery = lSDK & SDK_AUTOQUERY ? true:false; if ( bQuery ) { BOOL bAllowQuery=true; //判断鉴权内容 strSelect.Format( _T("select * from QueryFilt where UserID=%d and mobile='所有' and Status=1 and Type=0"),lUserID2); //查询是否有禁止所有 if ( bAllowQuery && pAdoRS->Open(strSelect) && !pAdoRS->IsEOF() ) { bAllowQuery = false; //禁止了所有 } strSelect.Format( _T("select * from QueryFilt where UserID=%d and mobile='%s' and Status=1"),lUserID2 , sms.szSendNum ); if (pAdoRS->Open(strSelect) && !pAdoRS->IsEOF() ) { //pAdoRS->MoveFirst(); pAdoRS->GetCollect(_T("Type"), bAllowQuery ); } if ( bAllowQuery ) { Sleep(2000); //延时,防止状态报告的接收不到 //发送短信 SubmitData data={0}; data.lCorpID = lCorpID2; data.lUserID = lUserID2; data.lSendID = -100; //需要查询发送ID _tcscpy(data.szMobile,sms.szSendNum); _stprintf( data.szMsg , strRet); SubmitSms( data,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 //查询次数加1 strSelect.Format( _T("update Query set QueryCount=QueryCount+1 where QueryID=%d"),lQueryID); pAdoRS->Open(strSelect); pAdoRS->Close(); //将查询的记录记在QueryLog表中。 CString strmsg=sms.szMsg; strmsg.Replace( _T("'") , _T("''") ); strSelect.Format( _T("insert into QueryLog(QueryID,CorpID,UserID,SendID,Mobile,RecvMsg,RetMsg,Reader,SendTime) values(%d,%d,%d,%d,'%s','%s','%s',0,GETDATE())"), lQueryID,lCorpID2,lUserID2,data.lSendID, sms.szSendNum,strmsg,strRet); pAdoRS->Open(strSelect); pAdoRS->Close(); strSelect.Format( _T("select top 1 * from QueryLog where UserID=%d order by SendTime desc") , lUserID2 ); if ( pAdoRS->Open(strSelect) && !pAdoRS->IsEOF()) { //pAdoRS->MoveFirst(); ANS_QueryLog_Data QueryLog={0}; pAdoRS->GetCollect( _T("QueryLogID") , QueryLog.lQueryLogID ); pAdoRS->Close(); //收到查询短信,通知已连接的用户 //SmsSendData * psms = new SmsSendData; //*psms = data; //_tcscpy( psms->szMsg , sms.szMsg ); //pSMSDlg->On_User_PushMsg( SMS_PUSH , (WPARAM)psms , 0 ); QueryLog.lQueryID = lQueryID; QueryLog.lSendID = data.lSendID; QueryLog.lCorpID = lCorpID2; QueryLog.lUserID = lUserID2; _tcscpy(QueryLog.szMobile,sms.szSendNum); _tcscpy(QueryLog.szRecvMsg,sms.szMsg); _tcscpy(QueryLog.szRetMsg,strRet); ::GetLocalTime(&QueryLog.tSendTime); pSMSDlg->SocketPushQueryLog(pAdoRS, QueryLog ); } } } } } } if ( !bReportNumber ) //不是管理员号码,下面的不处理 return false; if (CString(sms.szRecvNum).MakeUpper() == CString(_T("WxWork")).MakeUpper()) //属于企业微信的内容 { _tcscpy(Quitdata.szName, sms.szRecvNum); Quitdata.lPrority = 876534; } if ( dwType&REPORT_MANAGER && !_tcsncmp( szMsg , _T("RESTART"),_tcslen(_T("RESTART")) ) ) { _stprintf( Quitdata.szMsg , _T("成功收到%s的重启信息%s!") , sms.szSendNum , szMsg ); Sleep(2000); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 pSMSDlg->PostMessage( SMS_RESTART , 1 , 0 ); //重启 } if (dwType&REPORT_MANAGER && !_tcsncmp( szMsg , _T("REBOOT"),_tcslen(_T("REBOOT")) ) ) { _stprintf( Quitdata.szMsg , _T("成功收到%s的强制重启计算机信息%s!") , sms.szSendNum , szMsg ); Sleep(2000); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 pSMSDlg->PostMessage( SMS_RESTART , 1 , 0 ); //重启 CProcessSocket::Reboot(); //强制重启 } if (dwType&REPORT_MANAGER && !_tcsncmp( szMsg , _T("QUIT") , _tcslen(_T("QUIT"))) ) { _stprintf( Quitdata.szMsg , _T("成功收到%s的退出信息%s!") , sms.szSendNum , szMsg ); Sleep(2000); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 pSMSDlg->PostMessage( SMS_RESTART , 2 , 0 ); //退出 } if ((dwType&REPORT_MANAGER || dwType&REPORT_CHECKUP ) && !_tcsncmp( szMsg , _T("OFF") , _tcslen(_T("OFF"))) ) { TCHAR szCorpID[512]={0}; _tcscpy( szCorpID,szMsg+3 ); if ( _tcslen(szCorpID)>=8 ) { szCorpID[8]=0; strSelect.Format( _T("select * from users where userid=%d"),_ttol(szCorpID)); if ( pAdoRS->Open(strSelect) && !pAdoRS->IsEOF() ) { //pAdoRS->MoveFirst(); //以下为通知socket,后来发送的短信再也不可以通过 Checkup up={0}; pAdoRS->GetCollect( _T("CorpID") , up.lCorpID ); pAdoRS->GetCollect( _T("UserID") , up.lUserID ); up.bCheckup= true; pSMSDlg->SocketPushCheck(up); //强制踢出用户 REQ_CloseClient close={0}; close.lUserID = up.lUserID; close.ucUserType = LOGINTYPE_ALL; pSMSDlg->SocketPushClose(pAdoRS2,&close); Sleep(200); long lPurview=0; pAdoRS->GetCollect( _T("Purview"),lPurview ); pAdoRS->Close(); lPurview &= ~(PURVIEW_LOGIN); strSelect.Format( _T("update users set Purview=%d where userid=%d") ,lPurview,_ttol(szCorpID) ); pAdoRS->Open(strSelect); //现已发送的短信全部置为审核 strSelect.Format( _T("update smssend set Status=1 where userid=%d and status=0") , _ttol(szCorpID) ); pAdoRS->Open(strSelect); //将定时的短信全部置为审核 strSelect.Format(_T("update corpsmsm.dbo.smssendT set Status=1 where userid=%d and status=0"), _ttol(szCorpID)); pAdoRS->Open(strSelect); _stprintf( Quitdata.szMsg , _T("成功禁用了用户ID为%s的短信,所有未发短信已转审核列表!") , szCorpID ); //插入日志 strTemp.Format( _T("(%s)成功禁用了用户ID为%s的短信,所有未发短信已转审核列表!"),Quitdata.szMobile,szCorpID); Bbs_Insert_Sys(pAdoRS,strTemp); } else { _stprintf( Quitdata.szMsg , _T("用户ID:%s不存在,请检查!") , szCorpID ); } } else { szCorpID[6]=0; strSelect.Format( _T("select * from corp where corpid=%d"),_ttol(szCorpID)); if ( pAdoRS->Open(strSelect) && !pAdoRS->IsEOF() ) { //pAdoRS->MoveFirst(); //以下为通知socket,后来发送的短信也可以通过 Checkup up={0}; pAdoRS->GetCollect( _T("CorpID") , up.lCorpID ); pAdoRS->Close(); up.bCheckup= true; pSMSDlg->SocketPushCheck(up); //强制踢出用户 REQ_CloseClient close={0}; close.lUserID = up.lCorpID; close.ucUserType = LOGINTYPE_ALL; pSMSDlg->SocketPushClose(pAdoRS2,&close); Sleep(200); //禁用企业 strSelect.Format( _T("update corp set Status=1 where corpid=%d") , _ttol(szCorpID) ); pAdoRS->Open(strSelect); //现已发送的短信全部置为审核 strSelect.Format( _T("update smssend set Status=1 where corpid=%d and status=0") , _ttol(szCorpID) ); pAdoRS->Open(strSelect); //将定时的短信全部置为审核 strSelect.Format(_T("update corpsmsm.dbo.smssendT set Status=1 where corpid=%d and status=0"), _ttol(szCorpID)); pAdoRS->Open(strSelect); _stprintf( Quitdata.szMsg , _T("成功禁用了企业ID为%s的短信,所有未发短信已转审核列表!") , szCorpID ); strTemp.Format( _T("(%s)成功禁用了企业ID为%s的短信,所有未发短信已转审核列表!"),Quitdata.szMobile,szCorpID); Bbs_Insert_Sys(pAdoRS,strTemp); //插入系统信息日志 //操作成功后,增加操作记录 CString str; str.Format( _T("insert into Corp_Oper ( CorpID,UserType,OperType,OperMsg,BZ,CreateUser,CreateTime ) values( %d,%d,%d,'%s','%s','%s',GetDate())") , //插入记录 up.lCorpID, 0, //用户 1, //关闭操作 _T(""), strTemp, Quitdata.szMobile); pAdoRS->Open(str); } else { _stprintf( Quitdata.szMsg , _T("企业ID:%s不存在,请检查!") , szCorpID ); } } Sleep(2000); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } if ((dwType&REPORT_MANAGER || dwType&REPORT_CHECKUP ) && !_tcsncmp( szMsg , _T("ON") , _tcslen(_T("ON"))) ) { TCHAR szCorpID[512]={0}; _tcscpy( szCorpID,szMsg+2 ); if ( _tcslen(szCorpID)>=8 ) { szCorpID[8]=0; strSelect.Format( _T("select * from users where userid=%d"),_ttol(szCorpID)); if ( pAdoRS->Open(strSelect) && !pAdoRS->IsEOF()) { long lPurview=0; //pAdoRS->MoveFirst(); pAdoRS->GetCollect( _T("Purview"),lPurview ); pAdoRS->Close(); lPurview |= PURVIEW_LOGIN; strSelect.Format( _T("update users set Purview=%d where userid=%d") ,lPurview,_ttol(szCorpID) ); pAdoRS->Open(strSelect); _stprintf( Quitdata.szMsg , _T("成功启用了用户ID为%s的短信!") , szCorpID ); strTemp.Format( _T("(%s)成功启用了用户ID为%s的短信!"),Quitdata.szMobile,szCorpID); Bbs_Insert_Sys(pAdoRS,strTemp); //插入系统信息日志 } else { _stprintf( Quitdata.szMsg , _T("用户ID:%s不存在,请检查!") , szCorpID ); } } else { szCorpID[6]=0; strSelect.Format( _T("select * from corp where corpid=%d"),_ttol(szCorpID)); if ( pAdoRS->Open(strSelect) && !pAdoRS->IsEOF() ) { strSelect.Format( _T("update corp set Status=0 where corpid=%d and status=1") , _ttol(szCorpID) ); pAdoRS->Open(strSelect); _stprintf( Quitdata.szMsg , _T("成功启用了企业ID为%s的短信!") , szCorpID ); strTemp.Format( _T("(%s)成功启用了企业ID为%s的短信!"),Quitdata.szMobile,szCorpID); Bbs_Insert_Sys(pAdoRS,strTemp); //插入系统信息日志 //操作成功后,增加操作记录 CString str; str.Format( _T("insert into Corp_Oper ( CorpID,UserType,OperType,OperMsg,BZ,CreateUser,CreateTime ) values( %d,%d,%d,'%s','%s','%s',GetDate())") , //插入记录 _ttol(szCorpID), 0, //用户 0, //启用操作 _T(""), strTemp, Quitdata.szMobile); pAdoRS->Open(str); } else { _stprintf( Quitdata.szMsg , _T("企业ID:%s不存在,请检查!") , szCorpID ); } } Sleep(2000); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } if ((dwType&REPORT_MANAGER || dwType&REPORT_CHECKUP ) && !_tcsncmp( szMsg , _T("TG") , _tcslen(_T("TG"))) ) { TCHAR szCorpID[512]={0}; _tcscpy( szCorpID,szMsg+2 ); if ( _tcslen(szCorpID)>=8 ) { szCorpID[8]=0; strSelect.Format( _T("select * from users where userid=%d"),_ttol(szCorpID)); if ( pAdoRS->Open(strSelect) && !pAdoRS->IsEOF() ) { //以下为通知socket,后来发送的短信也可以通过 Checkup up={0}; pAdoRS->GetCollect( _T("CorpID") , up.lCorpID ); pAdoRS->GetCollect( _T("UserID") , up.lUserID ); pAdoRS->Close(); up.bCheckup= false; pSMSDlg->SocketPushCheck(up); Sleep(200); strSelect.Format( _T("update smssend set Status=0 where userid=%d and Status=%d") , _ttol(szCorpID),SEND_STATUS_SUB_FILT ); pAdoRS->Open(strSelect); _stprintf( Quitdata.szMsg , _T("审核通过了用户ID为%s的短信!") , szCorpID ); strTemp.Format( _T("(%s)审核通过了用户ID为%s的短信!"),Quitdata.szMobile,szCorpID); Bbs_Insert_Sys(pAdoRS,strTemp); //插入系统信息日志 } else { _stprintf( Quitdata.szMsg , _T("用户ID:%s不存在,请检查!") , szCorpID ); } } else { szCorpID[6]=0; strSelect.Format( _T("select * from corp where corpid=%d"),_ttol(szCorpID)); if ( pAdoRS->Open(strSelect) && !pAdoRS->IsEOF()) { //以下为通知socket,后来发送的短信也可以通过 Checkup up={0}; pAdoRS->GetCollect( _T("CorpID") , up.lCorpID ); pAdoRS->Close(); up.bCheckup= false; pSMSDlg->SocketPushCheck(up); Sleep(200); strSelect.Format( _T("update smssend set Status=0 where corpid=%d and Status=%d") , _ttol(szCorpID),SEND_STATUS_SUB_FILT ); pAdoRS->Open(strSelect); _stprintf( Quitdata.szMsg , _T("审核通过了企业ID为%s的短信!") , szCorpID ); strTemp.Format( _T("(%s)审核通过了企业ID为%s的短信!"),Quitdata.szMobile,szCorpID); Bbs_Insert_Sys(pAdoRS,strTemp); //插入系统信息日志 } else { _stprintf( Quitdata.szMsg , _T("企业ID:%s不存在,请检查!"), szCorpID ); } } Sleep(2000); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } if ((dwType&REPORT_MANAGER || dwType&REPORT_CHECKUP ) && !_tcsncmp( szMsg , _T("SG") , _tcslen(_T("SG"))) ) { TCHAR szTaskID[512]={0}; _tcscpy( szTaskID,szMsg+2 ); long lTaskID = _ttol(szTaskID); if ( lTaskID>1 ) { strSelect.Format( _T("update PLTaskSms set Status=1 where PLTaskSmsID=%d and Status=2") ,lTaskID ); pAdoRS->Open(strSelect); _stprintf( Quitdata.szMsg , _T("审核通过了ID为%d的短信任务!") , lTaskID ); strTemp.Format( _T("(%s)审核通过了ID为%d的短信任务!"),Quitdata.szMobile,lTaskID); Bbs_Insert_Sys(pAdoRS,strTemp); //插入系统信息日志 } Sleep(2000); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } if ((dwType&REPORT_MANAGER || dwType&REPORT_CHECKUP ) && !_tcsncmp( szMsg , _T("SF") , _tcslen(_T("SF"))) ) { TCHAR szTaskID[512]={0}; _tcscpy( szTaskID,szMsg+2 ); long lTaskID = _ttol(szTaskID); if ( lTaskID>1 ) { strSelect.Format( _T("update PLTaskSms set Status=3 where PLTaskSmsID=%d and Status=2") ,lTaskID ); pAdoRS->Open(strSelect); _stprintf( Quitdata.szMsg , _T("审核失败了ID为%d的短信任务!") , lTaskID ); strTemp.Format( _T("(%s)审核失败了ID为%d的短信任务!"),Quitdata.szMobile,lTaskID); Bbs_Insert_Sys(pAdoRS,strTemp); //插入系统信息日志 } Sleep(2000); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } if (dwType&REPORT_MANAGER && ( !_tcsncmp( szMsg , _T("BZ") , _tcslen(_T("BZ"))) || !_tcsncmp( szMsg , _T("HELP") , _tcslen(_T("HELP")))) ) { SYSTEMTIME t;::GetLocalTime(&t); _stprintf(Quitdata.szMsg , _T("RESTART、QUIT、REBOOT、OFF、ON、QUERYLL、NEXT、CJ、ACJ、QJTD、TD。%02d:%02d:%02d") ,t.wHour,t.wMinute,t.wSecond ); Sleep(2000); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } if (dwType&REPORT_CM && !_tcsncmp( szMsg , _T("CMG") , _tcslen(_T("CMG"))) ) { TCHAR szBBSID[512]={0}; _tcscpy( szBBSID,szMsg+3 ); szBBSID[8]=0; TCHAR szErrMsg[512]={0}; _tcscpy(szErrMsg,szMsg+11); Sleep(2000); strSelect.Format( _T("select * from BBS with(nolock) where BBSID=%d AND BBSType=1"),_ttol(szBBSID)); if ( pAdoRS->Open(strSelect) && !pAdoRS->IsEOF()) { long lUserID=0; long lCorpID=0; long lRCorpID=0; long lRUserID=0; TCHAR szCM[512]={0}; CString strMobile; CString strBZ; CString strType; CString strName; pAdoRS->GetCollect( _T("CorpID") , lCorpID ); pAdoRS->GetCollect( _T("UserID") , lUserID ); pAdoRS->GetCollect( _T("SCorpID") , lRCorpID ); pAdoRS->GetCollect( _T("SUserID") , lRUserID ); pAdoRS->GetCollect( _T("CM") , szCM ); pAdoRS->GetCollect( _T("Tel") , strMobile ); pAdoRS->GetCollect( _T("BZ") , strBZ ); pAdoRS->GetCollect( _T("Type") , strType ); pAdoRS->GetCollect( _T("Email") , strName ); CString strTemp=strBZ + _T("\r\n签名审核通过,我们将提交给运营商审核,需1-2个工作日后得到正式审核结果。新签名:")+CString(szCM); pAdoRS->PutCollect( _T("BZ") , strTemp ); //失败 pAdoRS->PutCollect( _T("BBSType") , 2 ); //成功 pAdoRS->PutCollect( _T("ExpTime") , COleDateTime::GetCurrentTime() ); //处理时间 pAdoRS->Update(); pAdoRS->Close(); if ( _tcslen(szErrMsg)>=2 ) { ExChar(szErrMsg , _T("\r") ); ExChar(szErrMsg , _T("\n") ); ExChar(szErrMsg , _T("\t") ); _tcscpy(szCM,szErrMsg); } //记录此事件 strTemp=_T("签名审核通过,我们将提交给运营商审核,需1-2个工作日后得到正式审核结果。新签名:")+CString(szCM); strTemp=strTemp+_T("!\r\n"); strBZ=strTemp+strBZ; BBS_Insert bbs={0}; bbs.SCorpID = 0; bbs.SUserID = 0; _tcscpy(bbs.SCorpName , _T("系统信息") ); _tcscpy(bbs.SUserName , _T("系统信息") ); bbs.RCorpID = lRCorpID; bbs.RUserID = lRUserID; _tcscpy(bbs.Type , strType ); _tcscpy(bbs.BZ , strBZ ); bbs.Status = 0; bbs.BBSType = 0; Bbs_Insert(pAdoRS,bbs); //添加一个系统消息 strTemp.Format( _T("(%s)"),Quitdata.szMobile); strBZ=strTemp+strBZ; Bbs_Insert_Sys(pAdoRS,strBZ); //插入系统信息日志 if ( lUserID<=0 ) strSelect.Format( _T("update corp set CM='%s' where CorpID=%d") , szCM,lCorpID); else strSelect.Format( _T("update users set CM2='%s' where CorpID=%d AND UserID=%d ") , szCM,lCorpID,lUserID); pAdoRS->Open(strSelect); _stprintf( Quitdata.szMsg , _T("审核通过了%s的签名,新签名:%s!") , strName,szCM ); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 //短信通知代理商 if ( strMobile.GetLength()>= 8 ) { _tcscpy( Quitdata.szMobile , strMobile ); _stprintf( Quitdata.szMsg , _T("已审核通过了%s的签名,新签名:%s,1-2个工作日后得到正式审核结果。") , strName,szCM ); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } } else { _stprintf( Quitdata.szMsg , _T("签名ID:%s不存在,请检查!") , szBBSID ); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } } if (dwType&REPORT_CM && !_tcsncmp( szMsg , _T("CMJ") , _tcslen(_T("CMJ"))) ) { TCHAR szBBSID[512]={0}; _tcscpy( szBBSID,szMsg+3 ); szBBSID[8]=0; TCHAR szErrMsg[512]={0}; _tcscpy(szErrMsg,szMsg+11); Sleep(2000); strSelect.Format( _T("select * from BBS where BBSID=%d and BBSType=1"),_ttol(szBBSID)); if ( pAdoRS->Open(strSelect) && !pAdoRS->IsEOF()) { long lUserID=0; long lCorpID=0; long lRCorpID=0; long lRUserID=0; TCHAR szCM[512]={0}; CString strMobile; CString strBZ; CString strType; CString strName; pAdoRS->GetCollect( _T("CorpID") , lCorpID ); pAdoRS->GetCollect( _T("UserID") , lUserID ); pAdoRS->GetCollect( _T("SCorpID") , lRCorpID ); pAdoRS->GetCollect( _T("SUserID") , lRUserID ); pAdoRS->GetCollect( _T("CM") , szCM ); pAdoRS->GetCollect( _T("Tel") , strMobile ); pAdoRS->GetCollect( _T("BZ") , strBZ ); pAdoRS->GetCollect( _T("Type") , strType ); pAdoRS->GetCollect( _T("Email") , strName ); CString strTemp=strBZ + _T("\r\n签名审核失败,原因:")+CString(szErrMsg); pAdoRS->PutCollect( _T("BZ") , strTemp ); //失败 pAdoRS->PutCollect( _T("BBSType") , 3 ); //失败 pAdoRS->PutCollect( _T("ExpTime") , COleDateTime::GetCurrentTime() ); //处理时间 pAdoRS->Update(); pAdoRS->Close(); strTemp=_T("签名审核失败,原因:")+CString(szErrMsg); strTemp=strTemp+_T("\r\n"); strBZ=strTemp+strBZ; BBS_Insert bbs={0}; bbs.SCorpID = 0; bbs.SUserID = 0; _tcscpy(bbs.SCorpName , _T("系统信息") ); _tcscpy(bbs.SUserName , _T("系统信息") ); bbs.RCorpID = lRCorpID; bbs.RUserID = lRUserID; _tcscpy(bbs.Type , strType ); _tcscpy(bbs.BZ , strBZ ); bbs.Status = 0; bbs.BBSType = 0; Bbs_Insert(pAdoRS,bbs); //添加一个系统消息 strTemp.Format( _T("(%s)"),Quitdata.szMobile); strBZ=strTemp+strBZ; Bbs_Insert_Sys(pAdoRS,strBZ); //插入系统信息日志 _stprintf( Quitdata.szMsg , _T("%s的签名,审核失败,原因:%s。") , strName,szErrMsg ); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 //短信通知代理商 if ( strMobile.GetLength()>= 8 ) { _tcscpy( Quitdata.szMobile , strMobile ); _stprintf( Quitdata.szMsg , _T("%s的签名申请,审核失败,原因:%s。") , strName,szErrMsg ); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } } else { _stprintf( Quitdata.szMsg , _T("签名ID:%s不存在,请检查!") , szBBSID ); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } } if (dwType&REPORT_MANAGER && !_tcsncmp( szMsg , _T("QUERYLL") , _tcslen(_T("QUERYLL"))) ) { Sleep(200); ANS_QueryLL RetLL={0}; CString strRet; CProcessSocket::Process_QueryLL_Query(*pAdoRS,RetLL,strRet); _stprintf(Quitdata.szMsg, strRet ); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } if (dwType&REPORT_MANAGER && !_tcsncmp( szMsg , _T("NEXT") , _tcslen(_T("NEXT"))) ) { Sleep(2000); COleDateTime t = COleDateTime::GetCurrentTime() - COleDateTimeSpan(0,0,10,0); //10分钟前的短信 COleDateTime tn= COleDateTime::GetCurrentTime() + COleDateTimeSpan(1,0,0,0); //第二天的短信 CString strNow,strNext; strNow.Format( _T("%04d%02d%02d %02d:%02d") , t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute() ); strNext.Format( _T("%04d%02d%02d 08:00") , tn.GetYear(),tn.GetMonth(),tn.GetDay()); strSelect.Format( _T("update smssend set timer='%s' where status=0 and Subtime<='%s' and (Timer is null or timerOpen(strSelect) ) { pAdoRS->Close(); strTemp.Format( _T("(%s)设置当前未发短信转次天8:00发送!"),Quitdata.szMobile); Bbs_Insert_Sys(pAdoRS,strTemp); //插入系统信息日志 } _stprintf( Quitdata.szMsg , _T("已成功将%s前发送的短信转次天08:00后发送!"),strNow); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } //企业短信充值 if (dwType&REPORT_CJ && !_tcsncmp( szMsg , _T("CJ") , _tcslen(_T("CJ"))) ) { Sleep(2000); //分解指令,CJ,企业ID,缴费方式,缴费金额,短信费率,赠送数量,是否应收,是否测试,备注 TCHAR szCorpID[32]={0}; TCHAR szPayMode[32]={0}; TCHAR szPrice[32]={0}; TCHAR szPriceOne[32]={0}; TCHAR szPresent[32]={0}; TCHAR szYS[32]={0}; TCHAR szTest[32]={0}; TCHAR szBZ[256]={0}; TCHAR szMsgt[256]={0}; _tcscpy(szMsgt,szMsg); _tcscat(szMsgt , _T(",,,,,,,,,,,,,,") ); long lLen = _tcslen(szMsgt); ::GetReqMess(szMsgt,szCorpID,1,',',lLen);AllTrim(szCorpID);szCorpID[6]=0; ::GetReqMess(szMsgt,szPayMode,2,',',lLen);AllTrim(szPayMode);szPayMode[15]=0; ::GetReqMess(szMsgt,szPrice,3,',',lLen);AllTrim(szPrice);szPrice[8]=0; ::GetReqMess(szMsgt,szPriceOne,4,',',lLen);AllTrim(szPriceOne);szPriceOne[8]=0; ::GetReqMess(szMsgt,szPresent,5,',',lLen);AllTrim(szPresent);szPresent[8]=0; ::GetReqMess(szMsgt,szYS,6,',',lLen);AllTrim(szYS);szYS[4]=0; ::GetReqMess(szMsgt,szTest,7,',',lLen);AllTrim(szTest);szTest[4]=0; ::GetReqMess(szMsgt,szBZ,8,',',lLen);AllTrim(szBZ);szBZ[250]=0; long lCorpID = _ttol(szCorpID); #ifdef UNICODE double fPrice = atof(CW2A(szPrice)); double fPriceOne = atof(CW2A(szPriceOne)); #else double fPrice = atof(szPrice); double fPriceOne = atof(szPriceOne); #endif long lPresent = _ttol(szPresent); BOOL bYS = _ttol(szYS); BOOL bTest = _ttol(szTest); double l = fPrice/fPriceOne; long lSMSCount = long(l+0.5f); if ( l< 0 ) lSMSCount = long(l-0.5f); lSMSCount = lSMSCount + lPresent; if ( !bYS && !_tcscmp(szYS,_T("是")) ) bYS = true; if ( !bTest && !_tcscmp(szTest,_T("是")) ) bTest = true; if ( lCorpID<100000 || lCorpID>1000000 || fPrice<-10000.0f || fPrice>10000.0f || fPriceOne<0 || fPriceOne>1.0f || lPresent<-10000 || lPresent>10000 ) { _tcscpy(Quitdata.szMsg , _T("充值格式有误,正确:CJ,企业ID,缴费方式,缴费金额,短信费率,赠送数量,是否应收,是否测试,备注")); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } else { TCHAR szSMSCount[32]={0}; _stprintf( szCorpID,_T("%d") , lCorpID ); _stprintf( szPrice,_T("%.4f") , fPrice ); _stprintf( szPriceOne,_T("%.4f") , fPriceOne ); _stprintf( szPresent,_T("%d") , lPresent ); _stprintf( szSMSCount,_T("%d") , lSMSCount ); _stprintf( szYS,_T("%d") , bYS ); _stprintf( szTest,_T("%d") , bTest ); strSelect.Format( _T("select * from corp where corpid=%d") , lCorpID ); if (pAdoRS2->Open(strSelect) && !pAdoRS2->IsEOF() ) { long lAgentID; CString strCorpName; pAdoRS2->GetCollect( _T("AgentID") , lAgentID ); pAdoRS2->GetCollect( _T("CorpName") , strCorpName ); pAdoRS2->Close(); if ( lAgentID>0 ) { _tcscpy(Quitdata.szMsg , _T("不能为代理商的企业充值!")); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } else { strSelect = CString("insert into corp_Pay (CorpID,AgentID,PayMan,PayMode,Price,PriceOne,Present,SMSCount,YS,Test,CreateUser,PayTime,OvrTime,BZ) values(") + CString(" '") + CString(szCorpID) + CString("',") + CString(" '") + CString("0") + CString("',") + CString(" '") + CString("短信充值") + CString("',") + CString(" '") + CString(szPayMode) + CString("',") + CString(szPrice) + CString(",") + CString(szPriceOne) + CString(",") + CString(szPresent) + CString(",") + CString(szSMSCount) + CString(",") + CString(szYS) + CString(",") + CString(szTest) + CString(",") + CString(" '") + CString(sms.szSendNum) + CString("',") + //创建人 CString( "GETDATE(),") + CString( "DATEADD(Year,1,GETDATE()),") + CString(" '") + CString(szBZ) + CString("' )"); if ( pAdoRS2->Open(strSelect) ) { strSelect.Format(_T("update corp set SMSUsed=SMSUsed+%d,Total=Total+%.4f,TotalSms=TotalSms+%d,LastPay=GetDate(),OvrTime=DATEADD(Year,1,GETDATE()) where CorpID=%d") , lSMSCount,fPrice,lSMSCount,lCorpID); pAdoRS2->Open(strSelect); _stprintf(Quitdata.szMsg , _T("充值成功:%s(%d),共%d条短信!"),strCorpName ,lCorpID,lSMSCount); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 strTemp.Format( _T("(%s)%s!"),Quitdata.szMobile,Quitdata.szMsg); Bbs_Insert_Sys(pAdoRS,strTemp); //插入系统信息日志 } else { _tcscpy(Quitdata.szMsg , _T("充值产生异常,请检查!")); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } } } else { _stprintf(Quitdata.szMsg , _T("充值的企业ID(%d)不存在,请检查!"),lCorpID); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } } } //代理商短信充值 if (dwType&REPORT_CJ && !_tcsncmp( szMsg , _T("ACJ") , _tcslen(_T("ACJ"))) ) { Sleep(2000); //分解指令,CJA,代理商ID,缴费方式,缴费金额,短信费率,赠送数量,是否应收,是否测试,备注 TCHAR szCorpID[32]={0}; TCHAR szPayMode[32]={0}; TCHAR szPrice[32]={0}; TCHAR szPriceOne[32]={0}; TCHAR szPresent[32]={0}; TCHAR szYS[32]={0}; TCHAR szTest[32]={0}; TCHAR szBZ[256]={0}; TCHAR szMsgt[256]={0}; _tcscpy(szMsgt,szMsg); _tcscat(szMsgt , _T(",,,,,,,,,,,,,,") ); long lLen = _tcslen(szMsgt); ::GetReqMess(szMsgt,szCorpID,1,',',lLen);AllTrim(szCorpID);szCorpID[6]=0; ::GetReqMess(szMsgt,szPayMode,2,',',lLen);AllTrim(szPayMode);szPayMode[15]=0; ::GetReqMess(szMsgt,szPrice,3,',',lLen);AllTrim(szPrice);szPrice[8]=0; ::GetReqMess(szMsgt,szPriceOne,4,',',lLen);AllTrim(szPriceOne);szPriceOne[8]=0; ::GetReqMess(szMsgt,szPresent,5,',',lLen);AllTrim(szPresent);szPresent[8]=0; ::GetReqMess(szMsgt,szYS,6,',',lLen);AllTrim(szYS);szYS[4]=0; ::GetReqMess(szMsgt,szTest,7,',',lLen);AllTrim(szTest);szTest[4]=0; ::GetReqMess(szMsgt,szBZ,8,',',lLen);AllTrim(szBZ);szBZ[250]=0; long lAgentID = _ttol(szCorpID); #ifdef UNICODE double fPrice = atof(CW2A(szPrice)); double fPriceOne = atof(CW2A(szPriceOne)); #else double fPrice = atof(szPrice); double fPriceOne = atof(szPriceOne); #endif long lPresent = _ttol(szPresent); BOOL bYS = _ttol(szYS); BOOL bTest = _ttol(szTest); double l = fPrice/fPriceOne; long lSMSCount = long(l+0.5f); if ( l< 0 ) lSMSCount = long(l-0.5f); lSMSCount = lSMSCount + lPresent; if ( !bYS && !_tcscmp(szYS,_T("是")) ) bYS = true; if ( !bTest && !_tcscmp(szTest,_T("是")) ) bTest = true; if ( lAgentID<100000 || lAgentID>1000000 || fPrice<-10000.0f || fPrice>10000.0f || fPriceOne<0 || fPriceOne>1.0f || lPresent<-10000 || lPresent>10000 ) { _tcscpy(Quitdata.szMsg , _T("充值格式有误,正确:ACJ,企业ID,缴费方式,缴费金额,短信费率,赠送数量,是否应收,是否测试,备注")); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } else { TCHAR szSMSCount[32]={0}; _stprintf( szCorpID,_T("%d") , lAgentID ); _stprintf( szPrice,_T("%.4f") , fPrice ); _stprintf( szPriceOne,_T("%.4f") , fPriceOne ); _stprintf( szPresent,_T("%d") , lPresent ); _stprintf( szSMSCount,_T("%d") , lSMSCount ); _stprintf( szYS,_T("%d") , bYS ); _stprintf( szTest,_T("%d") , bTest ); float fPrice2 = (float)lSMSCount/10.0f; CString strPrice; strPrice.Format( _T("%.4f") , fPrice2); strSelect.Format( _T("select * from agent where agentid=%d") , lAgentID ); if (pAdoRS2->Open(strSelect) && !pAdoRS2->IsEOF() ) { CString strAgentName; pAdoRS2->GetCollect( _T("Name") , strAgentName ); pAdoRS2->Close(); strSelect = CString("insert into Agent_Pay (AgentID,PayMan,PayMode,JFPrice,PriceOne,Present,Price,CreateUser,PayTime,YS,Test,BZ) values(") + CString(" '") + CString(szCorpID) + CString("',") + CString(" '") + CString("短信充值") + CString("',") + //创建人 CString(" '") + CString(szPayMode) + CString("',") + CString(szPrice) + CString(",") + CString(szPriceOne) + CString(",") + CString(szPresent) + CString(",") + strPrice + CString(",") + CString(" '") + CString(sms.szSendNum) + CString("',") + //创建人 CString( "GETDATE(),") + CString(szYS) + CString(",") + CString(szTest) + CString(",") + CString(" '") + CString(szBZ) + CString("' )"); if ( pAdoRS2->Open(strSelect) ) { strSelect.Format(_T("update Agent set Used=Used+%.4f,JFTotal=JFTotal+%.4f,Total=Total+%.4f where AgentID='%d'") , fPrice2,fPrice,fPrice2,lAgentID); pAdoRS2->Open( strSelect ); _stprintf(Quitdata.szMsg , _T("充值成功:%s(%d),共%d条短信!"),strAgentName ,lAgentID,lSMSCount); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 strTemp.Format( _T("(%s)%s!"),Quitdata.szMobile,Quitdata.szMsg); Bbs_Insert_Sys(pAdoRS,strTemp); //插入系统信息日志 } else { _tcscpy(Quitdata.szMsg , _T("充值产生异常错误,请检查!")); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } } else { _stprintf(Quitdata.szMsg , _T("充值的代理商ID(%d)不存在,请检查!"),lAgentID); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } } } //修改短信通道 #ifdef SMSCENTER_GDDX if (dwType&REPORT_CJ && !_tcsncmp( szMsg , _T("GTD") , _tcslen(_T("GTD"))) ) #else if (dwType&REPORT_CJ && !_tcsncmp( szMsg , _T("GTD") , _tcslen(_T("GTD"))) ) #endif { Sleep(2000); //分解指令,TD,企业ID,运营商类型,通道号,是否强制全网 TCHAR szCorpID[32]={0}; TCHAR szYYS[32]={0}; TCHAR szTD[32]={0}; TCHAR szOutAll[32]={0}; TCHAR szMsgt[256]={0}; _tcscpy(szMsgt,szMsg); _tcscat(szMsgt , _T(",,,,,,,,,,,,,,") ); long lLen = _tcslen(szMsgt); ::GetReqMess(szMsgt,szCorpID,1,',',lLen);AllTrim(szCorpID);szCorpID[6]=0; ::GetReqMess(szMsgt,szYYS,2,',',lLen);AllTrim(szYYS);szYYS[1]=0; ::GetReqMess(szMsgt,szTD,3,',',lLen);AllTrim(szTD);szTD[2]=0; ::GetReqMess(szMsgt,szOutAll,4,',',lLen);AllTrim(szOutAll);szOutAll[1]=0; long lCorpID = _ttol(szCorpID); long lYYS = _ttol(szYYS); long lTD = _ttol(szTD); if ( lCorpID<100000 || lCorpID>1000000 || lYYS<1 || lYYS>3 || lTD<0 || lTD>20 ) { _tcscpy(Quitdata.szMsg , _T("改通道格式有误,正确:TD,企业ID,运营商类型(1-3),通道号(1-6)(11-17),是否强制全网(0-1)。")); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } else { strSelect.Format( _T("select * from corp where corpid=%d") , lCorpID ); if (pAdoRS2->Open(strSelect) && !pAdoRS2->IsEOF() ) { TCHAR szTD2[32]={0}; pAdoRS2->GetCollect( _T("SMSTD") , szTD2 ); szTD2[lYYS-1] =(TCHAR)('0'+lTD); pAdoRS2->Close(); if ( szOutAll[0] == '1' || szOutAll[0] == '0') { strSelect.Format(_T("Update corp set SMSTD='%s',OutAll=%d where corpid=%d") ,szTD2, _ttol(szOutAll),lCorpID ); } else { strSelect.Format(_T("Update corp set SMSTD='%s' where corpid=%d") , szTD2,lCorpID ); } pAdoRS2->Open(strSelect); _stprintf(Quitdata.szMsg , _T("改通道(%d),%d运营商改为%d通道!"),lCorpID ,lYYS,lTD); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } else { _stprintf(Quitdata.szMsg , _T("改通道的企业ID(%d)不存在,请检查!"),lCorpID); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } } } //修改强制短信通道 if (dwType&REPORT_CJ && !_tcsncmp( szMsg , _T("QJTD") , _tcslen(_T("QJTD"))) ) { Sleep(2000); //分解指令,QJTD,运营商类型,通道号,是否强制全网 TCHAR szYYS[32]={0}; TCHAR szTD[32]={0}; TCHAR szOutAll[32]={0}; TCHAR szMsgt[256]={0}; _tcscpy(szMsgt,szMsg); _tcscat(szMsgt , _T(",,,,,,,,,,,,,,") ); long lLen = _tcslen(szMsgt); ::GetReqMess(szMsgt,szYYS,1,',',lLen);AllTrim(szYYS);szYYS[1]=0; ::GetReqMess(szMsgt,szTD,2,',',lLen);AllTrim(szTD);szTD[2]=0; ::GetReqMess(szMsgt,szOutAll,3,',',lLen);AllTrim(szOutAll);szOutAll[1]=0; long lYYS = _ttol(szYYS); long lTD = _ttol(szTD); if ( lYYS<1 || lYYS>3 || lTD<0 || lTD>20 ) { _tcscpy(Quitdata.szMsg , _T("改强制通道格式有误,正确:QJTD,运营商类型,通道号(1-3),是否强制全网(0-2)。")); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } else { pSMSDlg->m_Setup.szQZSmsTD[lYYS-1]=(TCHAR)('0'+lTD); if ( szOutAll[0] == '2' || szOutAll[0] == '1' || szOutAll[0] == '0' ) { pSMSDlg->m_Setup.szQZSmsOutAll[lYYS-1]=(TCHAR)('0'+_ttol(szOutAll)); } pSMSDlg->SaveSetup(); //保存 _stprintf(Quitdata.szMsg , _T("改强制通道成功,%d运营商改为%d通道!"),lYYS ,lTD); SubmitSms( Quitdata,pAdoRS2,pAdoRS3,pSMSDlg,lMobileType,SMSTYPE_ZF); //发送短信 } } #ifdef SMSCENTER_GDYD_ADC if ( lCorpID == DEFAULT_SEND_CORPID ) { BOOL bQR=false; long lQRType=0; long lWhiteID = 0; long lCorpID = 0; if ( !_tcsncmp( szMsg , _T("是") , _tcslen(_T("是"))) ) { strSelect.Format(_T("select top 1 * from white2 with(nolock) where mobile='%s' and status=0 and QRType=1 order by AddTime desc") , sms.szSendNum ); if (pAdoRS->Open(strSelect) && !pAdoRS->IsEOF() ) { pAdoRS->GetCollect(_T("WhiteID") , lWhiteID ); pAdoRS->GetCollect(_T("CorpID") , lCorpID ); strSelect.Format( _T("update white2 set status=1,QRType=11 where whiteid=%d") ,lWhiteID ); pAdoRS->Open(strSelect); bQR = true; lQRType = 1; } } if ( !_tcsncmp( szMsg , _T("否") , _tcslen(_T("否"))) ) { strSelect.Format(_T("select top 1 * from white2 with(nolock) where mobile='%s' and (status=0 or status=1) and QRType=2 order by AddTime desc") , sms.szSendNum ); if (pAdoRS->Open(strSelect) && !pAdoRS->IsEOF() ) { pAdoRS->GetCollect(_T("WhiteID") , lWhiteID ); pAdoRS->GetCollect(_T("CorpID") , lCorpID ); strSelect.Format( _T("delete from white2 where whiteid=%d") ,lWhiteID ); pAdoRS->Open(strSelect); lQRType = 2; bQR = true; } } CString strRetMsg; if ( bQR ) { CString strSName; CString strSmsNum2; strSelect.Format(_T("select * from corp with(nolock) where corpid=%d") ,lCorpID ); if ( pAdoRS->Open(strSelect) && !pAdoRS->IsEOF() ) { pAdoRS->GetCollect(_T("SName") , strSName); pAdoRS->GetCollect(_T("SmsNum2") , strSmsNum2); } if ( lQRType==1 ) { strRetMsg.Format(_T("你已确认%s的CRM助手的服务,如需要取消,请上行\"TD\"至106573440025%s。") ,strSName, strSmsNum2); } else { strRetMsg.Format(_T("你已拒绝%s的CRM助手的服务,如需加入,请上行\"DG\"至106573440025%s。") ,strSName, strSmsNum2); } } else { strRetMsg.Format(_T("对不起,你发的指令有误,或者已经进行确认操作。")); } SubmitData data={0}; //_tcscpy(data.szSendNum,_T("99999")); data.lCorpID = DEFAULT_SEND_CORPID; data.lUserID = DEFAULT_SEND_USERID; data.lItem = 101; _tcscpy(data.szMobile,sms.szSendNum); _tcscpy(data.szMsg,strRetMsg); CSendThread::SubmitSms( data,pAdoRS2,pAdoRS3,pSMSDlg,0,SMSTYPE_ZF); //发送短信 } #endif return false; } BOOL CSendThread::Bbs_Insert(CAdoRecordSet *pAdoRS,BBS_Insert & bbs) { try { CString strExpTime = _T("NULL"); COleDateTime tExpTime(bbs.expTime); if (tExpTime.GetStatus() == COleDateTime::valid) { strExpTime.Format(_T("'%04d.%02d.%02d %02d:%02d:%02d'"), tExpTime.GetYear(), tExpTime.GetMonth(), tExpTime.GetDay(), tExpTime.GetHour(), tExpTime.GetMinute(), tExpTime.GetSecond()); } CString str; str.Format( _T("insert into BBS (SCorpID,SUserID,SCorpName,SUserName,RCorpID,RUserID,RAgentID,Status,Type,Name,Tel,Email,BZ,BBSType,CorpID,UserID,CM,AgentID,AgentYJ,SendTime,ExpTime) values (%d,%d,'%s','%s',%d,%d,%d,%d,'%s','%s','%s','%s','%s',%d,%d,%d,'%s',%d,%d,GetDate(),%s)") , bbs.SCorpID, bbs.SUserID, SqlStr(bbs.SCorpName), SqlStr(bbs.SUserName), bbs.RCorpID, bbs.RUserID, bbs.RAgentID, bbs.Status, SqlStr(bbs.Type), SqlStr(bbs.Name), SqlStr(bbs.Tel), SqlStr(bbs.Email), SqlStr(bbs.BZ), bbs.BBSType, bbs.CorpID, bbs.UserID, SqlStr(bbs.CM), bbs.AgentID, bbs.AgentYJ, strExpTime); BOOL b = pAdoRS->Open(str); if ( b ) { str = _T("SELECT SCOPE_IDENTITY()") ; if ( pAdoRS->Open( str ) && !pAdoRS->IsEOF() ) { pAdoRS->GetCollect((long)0 , bbs.BBSID ); } } pAdoRS->Close(); return b; } catch(...) { LOG_APPERROR(_T("T")); return false; } return false; } BOOL CSendThread::Bbs_Insert_Sys(CAdoRecordSet *pAdoRS,CString strBZ,COleDateTime * pExpTime) { BBS_Insert bbs={0}; bbs.SCorpID = 0; bbs.SUserID = 0; _tcscpy(bbs.SCorpName , _T("系统信息") ); _tcscpy(bbs.SUserName , _T("系统信息") ); bbs.RCorpID = 0; bbs.RUserID = 0; _tcscpy(bbs.Type , _T("系统信息") ); _tcscpy(bbs.BZ , strBZ ); bbs.Status = 0; bbs.BBSType = 10; if (pExpTime && pExpTime->GetStatus() == COleDateTime::valid) { pExpTime->GetAsSystemTime(bbs.expTime); COleDateTimeSpan span = COleDateTime::GetCurrentTime() - *pExpTime; _stprintf(bbs.Email, _T("%d"), span.GetMinutes()); } return Bbs_Insert(pAdoRS,bbs); } BOOL CSendThread::PushRecvSmsToOtherCenter(HANDLE & hPipe,SmsSendData data, CString strProv,CString strCity) { BOOL bOK=false; #ifdef _UNICODE try { if ( hPipe == INVALID_HANDLE_VALUE ) { hPipe=CreateFile(SMS_PIPE_RECVSMS,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(hPipe==INVALID_HANDLE_VALUE) { return false; } //连接成功 DWORD dwMode=PIPE_TYPE_BYTE|PIPE_NOWAIT; SetNamedPipeHandleState(hPipe,&dwMode,NULL,NULL); //设成非阻赛模式 } tagPipeReport report={0}; report.lType = 1; //上行短信 report.lSendID = data.lSendID; report.lCorpID = data.lCorpID; report.lUserID = data.lUserID; report.lStatus = data.lStatus; report.tSendTime= data.tSendTime; strcpy( report.szSendNum , CW2A(data.szSendNum) ); strcpy( report.szRecvNum , CW2A(data.szRecvNum) ); strcpy( report.szMsg , CW2A(data.szMsg) ); strcpy( report.szAddNum , CW2A(data.szRecvStatus) ); //扩展号 strcpy( report.szProv , CW2A(strProv)); //发送地区 strcpy( report.szCity , CW2A(strCity)); //发送地区 DWORD dwWrite=0; WriteFile(hPipe, &report, sizeof(report), &dwWrite, NULL); if ( dwWrite == sizeof(report) ) { bOK = true; } else { hPipe = INVALID_HANDLE_VALUE; } } catch(...) { LOG_APPERROR(_T("T")); } #endif return bOK; } BOOL CSendThread::PushRecvSmsToOtherCenter(long lType,CAdoRecordSet *pAdoRS, SmsSendData data, CString strProv, CString strCity) { BOOL bOK = false; #ifndef SMSCENTER_DEMO try { CString strSql; if (lType == 1) //推送上行短信 { strSql.Format(_T("insert into PushToOther (PushTime,Type,CorpID,UserID,SendID,SendNum,RecvNum,AddNum,Msg,LongMsg,Prov,City) values (GetDate(),%d,%d,%d,%d,'%s','%s','%s','%s','%s','%s','%s')"), 1, //Type,类型1为推送上行 data.lCorpID, data.lUserID, data.lSendID, data.szSendNum, data.szRecvNum, data.szRecvStatus, //扩展号 SqlStr(data.szMsg), data.szMsgID, //长短信 strProv, strCity); bOK = pAdoRS->Open(strSql); } if (lType == 2) //推送关闭客户端请求 { strSql.Format(_T("insert into PushToOther (PushTime,Type,CorpID,UserID,SendID) values (GetDate(),%d,%d,%d,%d)"), 2, //Type,类型1为推送上行 data.lCorpID, data.lUserID, data.lSendID); bOK = pAdoRS->Open(strSql); } if (rand() % 10 == 1)//10分之1机会要删除2分钟前的数据 { strSql.Format(_T("delete from PushToOther where DATEDIFF(second,PushTime,GETDATE())>120")); pAdoRS->Open(strSql); } } catch (...) { LOG_APPERROR(_T("T")); } #endif return bOK; } BOOL CSendThread::Recv_QQT(long lCorpID,long lUserID,long lRtx_GroupTaskID, CAdoRecordSet *pAdoRS, CAdoRecordSet *pAdoRS2, CSmsCenterDlg *pSMSDlg) { try { CString str; if ( lCorpID<=0 || lRtx_GroupTaskID<=0 ) return -1; str.Format(_T("select * from Rtx_GroupTask where Rtx_GroupTaskID=%d and CorpID=%d and Received=0") , lRtx_GroupTaskID , lCorpID ); if ( pAdoRS->Open(str) && !pAdoRS->IsEOF() ) { REQ_QXBox_Group_SendData SendData={0}; CString strDataMsg; pAdoRS->GetCollect(_T("Rtx_GroupTaskID") , SendData.lRtx_GroupTaskID ); pAdoRS->GetCollect(_T("Rtx_GroupID") , SendData.lRtx_GroupID ); pAdoRS->GetCollect(_T("GroupID") , SendData.szGroupID ); pAdoRS->GetCollect(_T("Sender") , SendData.szSender ); pAdoRS->GetCollect(_T("Mobile") , SendData.szMobile ); pAdoRS->GetCollect(_T("GroupName") , SendData.szGroupName ); pAdoRS->GetCollect(_T("Status") , SendData.lStatus ); pAdoRS->GetCollect(_T("CorpID") , SendData.lCorpID ); pAdoRS->GetCollect(_T("UserID") , SendData.lUserID ); pAdoRS->GetCollect(_T("Timer") , SendData.tTimer ); pAdoRS->GetCollect(_T("MsgType") , SendData.lMsgType ); pAdoRS->GetCollect(_T("MsgImageName") , SendData.szMsgImageName ); //pAdoRS->GetCollect(_T("MsgImageLen") , pSendData->lImageLen ); pAdoRS->GetCollect(_T("MsgDataType") , SendData.lMsgDataType ); pAdoRS->GetCollect(_T("MsgData") , strDataMsg); pAdoRS->GetCollect(_T("MobileAll") , SendData.lMobileAll ); pAdoRS->GetCollect(_T("MobileSent") , SendData.lMobileSent ); pAdoRS->GetCollect(_T("SubTime") , SendData.tSubTime ); if ( pSMSDlg ) { pSMSDlg->SocketPushQQT(pAdoRS, SendData,strDataMsg ); } } return 1; } catch(...) { LOG_APPERROR(_T("T")); } return 0; }