SmsCenter/SendThread.cpp
2025-01-03 16:47:25 +08:00

2747 lines
86 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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 <afxinet.h>
#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;
//查通道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());
/*
//将收到的短信转到到一个网页中
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<br>%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) //社保局的签名字数是7个字
lZDCMLen = 8;
#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的签名新签名:%s1-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 timer<getdate())"),strNext,strNow );
if ( pAdoRS->Open(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;
}