SmsCenter/CalendarThread.cpp

242 lines
7.3 KiB
C++
Raw Normal View History

2025-01-03 16:47:25 +08:00
// CalendarThread.cpp : implementation file
//
#include "stdafx.h"
#include "SmsCenter.h"
#include "CalendarThread.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCalendarThread
#include "SmsCenterDlg.h"
IMPLEMENT_DYNCREATE(CCalendarThread, CWinThread)
CCalendarThread::CCalendarThread()
{
m_bStart = false;
m_pSMSDlg = NULL;
}
CCalendarThread::~CCalendarThread()
{
}
BOOL CCalendarThread::InitInstance()
{
CoInitializeEx( NULL , COINIT_MULTITHREADED );
// TODO: perform and per-thread initialization here
return TRUE;
}
int CCalendarThread::ExitInstance()
{
CoUninitialize();
// TODO: perform any per-thread cleanup here
return CWinThread::ExitInstance();
}
BEGIN_MESSAGE_MAP(CCalendarThread, CWinThread)
//{{AFX_MSG_MAP(CCalendarThread)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
ON_THREAD_MESSAGE(TH_CALENDAR,On_Calendar)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCalendarThread message handlers
void CCalendarThread::On_Calendar(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 ;
try
{
m_bStart = true;
CString strSelect;
strSelect = "select calendar.*,users.mobile from calendar,users where calendar.Status=1 and calendar.userid = users.userid";
BOOL b = m_AdoRS.Open( strSelect );
if ( b && !m_AdoRS.IsEOF() )
{
long lID;
long lCorpID;
long lUserID;
long lType;
COleDateTime tAlarm;
COleDateTime tSendLast;
CString strMsg;
CString strAddMsg;
CString strMobile;
CString strAddMobile;
COleDateTimeSpan ts(0,0,30,0);
TCHAR szTemp[32]={0};
long lCount2 = 0;
while ( !m_AdoRS.IsEOF() && lCount2<1000 )
{
m_AdoRS.GetCollect( _T("CalendarID") , lID );
m_AdoRS.GetCollect( _T("CorpID") , lCorpID );
m_AdoRS.GetCollect( _T("UserID") , lUserID );
m_AdoRS.GetCollect( _T("Type") , lType );
m_AdoRS.GetCollect( _T("Alarm"), tAlarm );
m_AdoRS.GetCollect( _T("SendLast"),tSendLast);
m_AdoRS.GetCollect( _T("Msg") , strMsg );
m_AdoRS.GetCollect( _T("AddMsg") , strAddMsg );
m_AdoRS.GetCollect( _T("Mobile") , strMobile );
m_AdoRS.GetCollect( _T("AddMobile") , strAddMobile );
if ( strAddMobile.GetLength()>=10 )
strMobile = strAddMobile;
if ( tAlarm.GetStatus() == COleDateTime::valid )
{
BOOL bSend=false;
COleDateTime tNow = COleDateTime::GetCurrentTime();
switch ( lType )
{
case 0: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tAlarm.SetDateTime(tNow.GetYear(),tAlarm.GetMonth(),tAlarm.GetDay(),tAlarm.GetHour(),tAlarm.GetMinute(),tAlarm.GetSecond() ); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
if (tAlarm.GetStatus()==COleDateTime::valid && tNow > tAlarm && (tNow-tAlarm)<ts) //<2F><>ǰʱ<C7B0><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD>Ҽ<EFBFBD><D2BC><EFBFBD>С<EFBFBD><D0A1>30<33><30><EFBFBD><EFBFBD>
{
if ( tSendLast.GetStatus() == COleDateTime::valid )
{
if ( tSendLast != tAlarm ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>
bSend = true;
}
else
{
bSend = true;
}
}
break;
case 1: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tAlarm.SetDateTime(tNow.GetYear(),tNow.GetMonth(),tAlarm.GetDay(),tAlarm.GetHour(),tAlarm.GetMinute(),tAlarm.GetSecond() ); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
if (tAlarm.GetStatus()==COleDateTime::valid && tNow > tAlarm && (tNow-tAlarm)<ts) //<2F><>ǰʱ<C7B0><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD>Ҽ<EFBFBD><D2BC><EFBFBD>С<EFBFBD><D0A1>30<33><30><EFBFBD><EFBFBD>
{
if ( tSendLast.GetStatus() == COleDateTime::valid )
{
if ( tSendLast != tAlarm ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>
bSend = true;
}
else
{
bSend = true;
}
}
break;
case 2: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
_stprintf(szTemp, _T("%d") , tNow.GetDayOfWeek()-1 ); //<2F><><EFBFBD><EFBFBD>
if ( strAddMsg.Find(szTemp[0]) >= 0 ) //<2F>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
{
tAlarm.SetDateTime(tNow.GetYear(),tNow.GetMonth(),tNow.GetDay(),tAlarm.GetHour(),tAlarm.GetMinute(),tAlarm.GetSecond() ); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
if (tAlarm.GetStatus()==COleDateTime::valid && tNow > tAlarm && (tNow-tAlarm)<ts) //<2F><>ǰʱ<C7B0><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD>Ҽ<EFBFBD><D2BC><EFBFBD>С<EFBFBD><D0A1>30<33><30><EFBFBD><EFBFBD>
{
if ( tSendLast.GetStatus() == COleDateTime::valid )
{
if ( tSendLast != tAlarm ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>
bSend = true;
}
else
{
bSend = true;
}
}
}
break;
case 3: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tAlarm.SetDateTime(tNow.GetYear(),tNow.GetMonth(),tNow.GetDay(),tAlarm.GetHour(),tAlarm.GetMinute(),tAlarm.GetSecond() ); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
if (tAlarm.GetStatus()==COleDateTime::valid && tNow > tAlarm && (tNow-tAlarm)<ts) //<2F><>ǰʱ<C7B0><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD>Ҽ<EFBFBD><D2BC><EFBFBD>С<EFBFBD><D0A1>30<33><30><EFBFBD><EFBFBD>
{
if ( tSendLast.GetStatus() == COleDateTime::valid )
{
if ( tSendLast != tAlarm ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>
bSend = true;
}
else
{
bSend = true;
}
}
break;
case 4: //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
//tAlarm.SetDateTime(tNow.GetYear(),tNow.GetMonth(),tNow.GetDay(),tAlarm.GetHour(),tAlarm.GetMinute(),tAlarm.GetSecond() ); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
if (tAlarm.GetStatus()==COleDateTime::valid && tNow > tAlarm && (tNow-tAlarm)<ts) //<2F><>ǰʱ<C7B0><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD>Ҽ<EFBFBD><D2BC><EFBFBD>С<EFBFBD><D0A1>30<33><30><EFBFBD><EFBFBD>
{
if ( tSendLast.GetStatus() == COleDateTime::valid )
{
if ( tSendLast != tAlarm ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>
bSend = true;
}
else
{
bSend = true;
}
}
break;
}
if ( bSend )
{
m_AdoRS.Close();
strSelect.Format( _T("update calendar set SendLast='%04d%02d%02d %02d:%02d:%02d' where CalendarID=%d"),tAlarm.GetYear(),tAlarm.GetMonth(),tAlarm.GetDay(),tAlarm.GetHour(),tAlarm.GetMinute(),tAlarm.GetSecond(),lID );
m_AdoRS1.Open(strSelect);
if ( lType == 4 ) //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>,<2C><><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD>״̬Ϊ
{
strSelect.Format( _T("update calendar set Status=0 where CalendarID=%d"),lID );
m_AdoRS1.Open(strSelect);
}
//<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("calendar") );
_tcscpy( data.szMobile , strMobile );
_tcscpy( data.szMsg , strMsg );
CSendThread::SubmitSms( data,&m_AdoRS1,&m_AdoRS2,m_pSMSDlg,lMobType,SMSTYPE_ALARM); //<2F><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ټ<EFBFBD><D9BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
m_bStart = false;
return ;
}
}
m_AdoRS.MoveNext();
lCount2 ++;
}
}
m_bStart = false;
}
catch(...)
{
LOG_APPERROR(_T("T"));
m_bStart = false;
return ;
}
m_bStart = false;
return ;
}
BOOL CCalendarThread::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_AdoRS1.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>
}
return b;
}