SmsCenter/SPThread.cpp

435 lines
12 KiB
C++
Raw Normal View History

2025-01-03 16:47:25 +08:00
// SPThread.cpp : implementation file
//
#include "stdafx.h"
#include "smscenter.h"
#include "SPThread.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSPThread
#include "SmsCenterDlg.h"
IMPLEMENT_DYNCREATE(CSPThread, CWinThread)
CSPThread::CSPThread()
{
m_bStart = false;
}
CSPThread::~CSPThread()
{
}
BOOL CSPThread::InitInstance()
{
CoInitializeEx( NULL , COINIT_MULTITHREADED );
// TODO: perform and per-thread initialization here
return TRUE;
}
int CSPThread::ExitInstance()
{
CoUninitialize();
// TODO: perform any per-thread cleanup here
return CWinThread::ExitInstance();
}
BEGIN_MESSAGE_MAP(CSPThread, CWinThread)
//{{AFX_MSG_MAP(CSPThread)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
ON_THREAD_MESSAGE(TH_SMSSP,On_SPDZ)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSPThread message handlers
BOOL CSPThread::SetParam(CSmsCenterDlg *pSmsDlg)
{
m_pSMSDlg = pSmsDlg;
BOOL b = m_adoConnection.ConnectSQLServer2(m_pSMSDlg->m_Setup.szDBName,DEFAULT_DBNAME,m_pSMSDlg->m_Setup.szDBUser,m_pSMSDlg->m_Setup.szDBPasswd, m_pSMSDlg->m_Setup.szProvider);
if ( b )
{
m_adoConnection.SetCommandTimeout(7200); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>ʱʱ<CAB1><CAB1>
#ifdef SMSCENTER_USECLIENT
m_adoConnection.SetCursorLocation(adUseClient); //<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD>
#endif
m_AdoRS.SetAdoConnection( &m_adoConnection ); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>
m_AdoRS2.SetAdoConnection( &m_adoConnection ); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>
m_AdoRS3.SetAdoConnection( &m_adoConnection ); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>
}
return b;
}
void CSPThread::On_SPDZ(WPARAM wParam, LPARAM lParam)
{
if ( m_bStart ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return ;
Sleep(10000); //<2F><>ʱ10<31><30>
m_pSMSDlg->m_bAutoSend_SP = false;
m_bStart = true;
try {
CString strSelect;
strSelect.Format( _T("select dz.*,users.mobile from dz,users where dz.userid = users.userid order by dz.OperCmd,dz.Birthday") );
BOOL b = m_AdoRS.Open( strSelect );
long lAllCount = m_AdoRS.GetRecordCount() ;
if ( b && lAllCount>0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>û<EFBFBD>
{
m_AdoRS.MoveFirst();
long lCorpID=0;
long lUserID=0;
CString strMobile;
TCHAR szOldOperCmd[32]={0};
TCHAR szOldAddCmd[32]={0};
COleDateTime tOldBirthday;
BOOL bOldMsg = false;
long lOldPrice=0;
CString strOldMsg;
long lOperCmdID;
COleDateTime tBirthday;
TCHAR szOperCmd[32]={0};
TCHAR szAddCmd[32]={0};
COleDateTime tSend;
COleDateTime tYSend; //Ӧ<><D3A6><EFBFBD>͵<EFBFBD>ʱ<EFBFBD><CAB1>
long lDZID;
long lAllCount2=0;
while( !m_AdoRS.IsEOF() && lAllCount2<lAllCount)
{
m_AdoRS.GetCollect( _T("CorpID"), lCorpID );
m_AdoRS.GetCollect( _T("UserID"), lUserID );
m_AdoRS.GetCollect( _T("OperCmd"), szOperCmd );
m_AdoRS.GetCollect( _T("AddCmd") , szAddCmd );
m_AdoRS.GetCollect( _T("Mobile") , strMobile );
m_AdoRS.GetCollect( _T("DZID") , lDZID );
m_AdoRS.GetCollect( _T("OperCmdID") , lOperCmdID );
m_AdoRS.GetCollect( _T("SendLast") , tSend );
m_AdoRS.GetCollect( _T("Birthday") , tBirthday );
Sleep(10);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>
if ( strMobile.GetLength() < 11 )
{
lAllCount2 ++;
m_AdoRS.MoveNext();
continue;
}
if ( bOldMsg &&
!_tcscmp(szOperCmd,szOldOperCmd) && //<2F>¾<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
!_tcscmp(szAddCmd,szOldAddCmd ) &&
tBirthday== tOldBirthday )
{
CString strSelect3;
if ( tSend.GetStatus()!= COleDateTime::valid || tSend < tYSend ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>С<EFBFBD><D0A1>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
{
//<2F><><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
strSelect3.Format( _T("update dz set SendLast=GetDATE() where DZID=%d") ,lDZID );
m_AdoRS2.Open(strSelect3);
m_AdoRS2.Close();
//<2F><EFBFBD><E1BDBB><EFBFBD><EFBFBD>
long lMobType = MOBILE_TYPE_CMCC;
//if ( isNumUnicom((char*)(LPCTSTR)strMobile) )
// lMobType = MOBILE_TYPE_UNICOM;
SubmitData data={0};
data.lCorpID = lCorpID;
data.lUserID = lUserID;
_tcscpy( data.szName , _T("SP") );
_tcscpy( data.szMobile , strMobile );
_tcscpy( data.szMsg , strOldMsg );
CSendThread::SubmitSms( data,&m_AdoRS2,&m_AdoRS3,m_pSMSDlg,lMobType,SMSTYPE_SP,lOldPrice); //<2F><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>
}
}
else
{
bOldMsg = false;
_tcscpy( szOldOperCmd , szOperCmd ); //<2F><><EFBFBD>浱ǰָ<C7B0><D6B8>
_tcscpy( szOldAddCmd , szAddCmd );
tOldBirthday = tBirthday;
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CString strSelect2;
BOOL b2;
//Sleep(100); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>Ҫ<EFBFBD><D2AA>
strSelect2.Format(_T("select * from OperCmd where OperCmdID=%d"),lOperCmdID);
b2 = m_AdoRS2.Open( strSelect2 );
if ( b2 && m_AdoRS2.GetRecordCount() )
{
//<2F><><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD>ʱ<EFBFBD><EFBFBD><E4B7A2>
long lTemp;
BOOL bWeek;
TCHAR szWeek[32]={0};
COleDateTime t1;
COleDateTime t2;
COleDateTime t3;
COleDateTime tNow = ::COleDateTime::GetCurrentTime();
m_AdoRS2.MoveFirst();
m_AdoRS2.GetCollect( _T("DZSendTime1") , t1 );
m_AdoRS2.GetCollect( _T("DZSendTime2") , t2 );
m_AdoRS2.GetCollect( _T("DZSendTime3") , t3 );
m_AdoRS2.GetCollect( _T("Price") , lOldPrice );
m_AdoRS2.GetCollect( _T("isWeek") , bWeek );
m_AdoRS2.GetCollect( _T("WeekDay"), szWeek );
m_AdoRS2.Close();
t1.SetDateTime(tNow.GetYear() , tNow.GetMonth() , tNow.GetDay(),t1.GetHour(),t1.GetMinute(),t1.GetSecond());
t2.SetDateTime(tNow.GetYear() , tNow.GetMonth() , tNow.GetDay(),t2.GetHour(),t2.GetMinute(),t2.GetSecond());
t3.SetDateTime(tNow.GetYear() , tNow.GetMonth() , tNow.GetDay(),t3.GetHour(),t3.GetMinute(),t3.GetSecond());
SYSTEMTIME ttn;tNow.GetAsSystemTime(ttn);
SYSTEMTIME tts;tSend.GetAsSystemTime(tts);
SYSTEMTIME tt1;t1.GetAsSystemTime(tt1);
SYSTEMTIME tt2;t2.GetAsSystemTime(tt2);
SYSTEMTIME tt3;t3.GetAsSystemTime(tt3);
BOOL bSend=false;
if ( !bSend &&
tSend.GetStatus() != COleDateTime::valid &&
t1.GetHour() > 2 &&
tNow>t1 )
{
bSend = true;
tYSend = t1;
}
if ( !bSend &&
tSend.GetStatus() == COleDateTime::valid &&
t1.GetHour() > 2 &&
tSend < t1 &&
tNow>t1 )
{
bSend = true;
tYSend = t1;
}
/*
if ( !bSend &&
tSend.GetStatus() == COleDateTime::valid &&
t1.GetHour() > 2 &&
tSend > t1 &&
tNow>t1 && tNow < t2 )
{
bSend = true;
tYSend = t1;
}
*/
if ( !bSend &&
tSend.GetStatus() == COleDateTime::valid &&
t2.GetHour() > 2 &&
tSend < t2 &&
tNow>t2 )
{
bSend = true;
tYSend = t2;
}
if ( !bSend &&
tSend.GetStatus() == COleDateTime::valid &&
t3.GetHour() > 2 &&
tSend < t3 &&
tNow>t3 )
{
bSend = true;
tYSend = t3;
}
if ( bSend && bWeek )
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˰<EFBFBD><CBB0><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>Ƚ<EFBFBD>
lTemp = tNow.GetDayOfWeek();
lTemp--;
if ( szWeek[lTemp] != '1' ) //<2F><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2>÷<EFBFBD><C3B7><EFBFBD>
bSend = false;
}
if ( bSend ) //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD>ͣ<EFBFBD>ȡ<EFBFBD><C8A1>Ϣ
{
CString strSelect3;
BOOL b3;
if ( !_tcscmp(szOperCmd,_T("XD") )) //<2F>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
{
//<2F><><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int iMon=0;
int iDay=0;
if ( GetBBMonDay(tBirthday,iMon,iDay) && iDay>0 )
{
strSelect3.Format( _T("select * from DataMsg where OperCmd='%s' and convert(int,key1)=%d order by yelevel") , szOperCmd,iMon);
b3 = m_AdoRS2.Open(strSelect3 );
if ( b3 && !m_AdoRS2.IsEOF() )
{
long lAdoCount = m_AdoRS2.GetRecordCount();
if ( iDay<=lAdoCount )
{
m_AdoRS2.Move(iDay-1);
m_AdoRS2.GetCollect( _T("Msg") , strOldMsg );
m_AdoRS2.Close();
//<2F><><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
strSelect3.Format( _T("update dz set SendLast=GetDATE() where DZID=%d") ,lDZID );
m_AdoRS2.Open(strSelect3);
m_AdoRS2.Close();
bOldMsg = true;
//<2F><EFBFBD><E1BDBB><EFBFBD><EFBFBD>
long lMobType = MOBILE_TYPE_CMCC;
//if ( isNumUnicom((char*)(LPCTSTR)strMobile) )
// lMobType = MOBILE_TYPE_UNICOM;
SubmitData data={0};
data.lCorpID = lCorpID;
data.lUserID = lUserID;
_tcscpy( data.szName , _T("SP") );
_tcscpy( data.szMobile , strMobile );
_tcscpy( data.szMsg , strOldMsg );
CSendThread::SubmitSms( data,&m_AdoRS2,&m_AdoRS3,m_pSMSDlg,lMobType,SMSTYPE_SP,lOldPrice); //<2F><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>
}
else
{
//strSelect.Format( _T("Error:%s:%s->%s,û<>й<EFBFBD><D0B9><EFBFBD><EFBFBD>ƻظ<C6BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>!"),smsSend.ServiceType,smsSend.szRecvNum,smsSend.szSendNum);
//g_dlg->AddLog((char*)(LPCSTR)strSelect);
}
}
}
}
else
{
//<2F><>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>
if ( _tcslen(szAddCmd) > 0 )
strSelect3.Format( _T("select top 1 * from DataMsg where OperCmd='%s' and Key1='%s' and status=0 order by MsgTime desc") , szOperCmd,szAddCmd );
else
strSelect3.Format( _T("select top 1 * from DataMsg where OperCmd='%s' and status=0 order by MsgTime desc") , szOperCmd );
if ( !_tcscmp(szOperCmd,_T("HL")) ) //<2F><>Ҫ<EFBFBD><D2AA>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B4A6>
{
SYSTEMTIME t ;
::GetLocalTime(&t);
CString strTime;
strTime.Format( _T("%04d.%02d.%02d") , t.wYear,t.wMonth,t.wDay );
strSelect3.Format( _T("select top 1 * from DataMsg where OperCmd='%s' and Key1='%s' order by MsgTime desc") , szOperCmd,strTime );
}
b3 = m_AdoRS2.Open(strSelect3 );
if ( b3 && m_AdoRS2.GetRecordCount()>0 )
{
m_AdoRS2.MoveFirst();
long lMsgID;
m_AdoRS2.GetCollect( _T("DataMsgID") , lMsgID );
m_AdoRS2.GetCollect( _T("Msg") , strOldMsg );
m_AdoRS2.Close();
strSelect3.Format( _T("update DataMsg set status=1 where DataMsgID=%d") , lMsgID );
m_AdoRS2.Open(strSelect3);
m_AdoRS2.Close();
//<2F><><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
strSelect3.Format( _T("update dz set SendLast=GetDATE() where DZID=%d") ,lDZID );
m_AdoRS2.Open(strSelect3);
m_AdoRS2.Close();
bOldMsg = true;
//<2F><EFBFBD><E1BDBB><EFBFBD><EFBFBD>
long lMobType = MOBILE_TYPE_CMCC;
//if ( isNumUnicom((char*)(LPCTSTR)strMobile) )
// lMobType = MOBILE_TYPE_UNICOM;
SubmitData data={0};
data.lCorpID = lCorpID;
data.lUserID = lUserID;
_tcscpy( data.szName , _T("SP") );
_tcscpy( data.szMobile , strMobile );
_tcscpy( data.szMsg , strOldMsg );
CSendThread::SubmitSms( data,&m_AdoRS2,&m_AdoRS3,m_pSMSDlg,lMobType,SMSTYPE_SP,lOldPrice); //<2F><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>
}
else
{
//strSelect.Format( _T("Error:%s:%s->%s,û<>й<EFBFBD><D0B9><EFBFBD><EFBFBD>ƻظ<C6BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>!"),smsSend.ServiceType,smsSend.szRecvNum,smsSend.szSendNum);
//g_dlg->AddLog((char*)(LPCSTR)strSelect);
}
}
}
}
}
lAllCount2 ++;
//Sleep(50); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>Ҫ<EFBFBD><D2AA>
m_AdoRS.MoveNext(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
}
}
m_AdoRS.Close();
}
catch (...)
{
LOG_APPERROR(_T("T"));
m_bStart = false;
return ;
}
m_bStart = false;
return ;
}
BOOL CSPThread::GetBBMonDay(COleDateTime tBirthday, int &iMon, int &iDay)
{
COleDateTime tNow2 = ::COleDateTime::GetCurrentTime();
if ( tBirthday>tNow2 ) //<2F><><EFBFBD>󣬷<EFBFBD><F3A3ACB7><EFBFBD>
{
iMon = -1;
iDay = -1;
return false;
}
SYSTEMTIME tNow,tBB;
tNow2.GetAsSystemTime(tNow);
tBirthday.GetAsSystemTime(tBB);
//<2F>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>
if ( tNow.wDay >=tBB.wDay )
{
iDay = tNow.wDay-tBB.wDay;
}
else
{
tNow.wMonth--;
if ( tNow.wMonth<=0 )
{
tNow.wMonth=12;
tNow.wYear--;
}
switch(tNow.wMonth)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
tNow.wDay += 31;
break;
case 2:
if (tNow.wYear%4==0 )
tNow.wDay += 30;
else
tNow.wDay += 28;
break;
default:
tNow.wDay += 30;
}
iDay = tNow.wDay-tBB.wDay;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ( tNow.wMonth >=tBB.wMonth )
{
iMon = tNow.wMonth-tBB.wMonth;
}
else
{
tNow.wYear --;
tNow.wMonth+= 12;
iMon = tNow.wMonth-tBB.wMonth;
}
iMon = iMon+(tNow.wYear-tBB.wYear)*12;
iDay++;
iMon++;
return true;
}