2785 lines
87 KiB
C++
2785 lines
87 KiB
C++
// 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;
|
||
|
||
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<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) //社保局的签名字数是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 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;
|
||
} |