// 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 ) //������ڷ��ͣ��������� 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: //������ tAlarm.SetDateTime(tNow.GetYear(),tAlarm.GetMonth(),tAlarm.GetDay(),tAlarm.GetHour(),tAlarm.GetMinute(),tAlarm.GetSecond() ); //����ʱ�� if (tAlarm.GetStatus()==COleDateTime::valid && tNow > tAlarm && (tNow-tAlarm)<ts) //��ǰʱ���������ʱ��,���Ҽ��С��30���� { if ( tSendLast.GetStatus() == COleDateTime::valid ) { if ( tSendLast != tAlarm ) //����������ʱ��������ʱ����һ�����ʾ��ǰ���������ѹ� bSend = true; } else { bSend = true; } } break; case 1: //������ tAlarm.SetDateTime(tNow.GetYear(),tNow.GetMonth(),tAlarm.GetDay(),tAlarm.GetHour(),tAlarm.GetMinute(),tAlarm.GetSecond() ); //����ʱ�� if (tAlarm.GetStatus()==COleDateTime::valid && tNow > tAlarm && (tNow-tAlarm)<ts) //��ǰʱ���������ʱ��,���Ҽ��С��30���� { if ( tSendLast.GetStatus() == COleDateTime::valid ) { if ( tSendLast != tAlarm ) //����������ʱ��������ʱ����һ�����ʾ��ǰ���������ѹ� bSend = true; } else { bSend = true; } } break; case 2: //������ _stprintf(szTemp, _T("%d") , tNow.GetDayOfWeek()-1 ); //���� if ( strAddMsg.Find(szTemp[0]) >= 0 ) //�жϴ��������Ƿ���Ҫ���� { tAlarm.SetDateTime(tNow.GetYear(),tNow.GetMonth(),tNow.GetDay(),tAlarm.GetHour(),tAlarm.GetMinute(),tAlarm.GetSecond() ); //����ʱ�� if (tAlarm.GetStatus()==COleDateTime::valid && tNow > tAlarm && (tNow-tAlarm)<ts) //��ǰʱ���������ʱ��,���Ҽ��С��30���� { if ( tSendLast.GetStatus() == COleDateTime::valid ) { if ( tSendLast != tAlarm ) //����������ʱ��������ʱ����һ�����ʾ��ǰ���������ѹ� bSend = true; } else { bSend = true; } } } break; case 3: //������ tAlarm.SetDateTime(tNow.GetYear(),tNow.GetMonth(),tNow.GetDay(),tAlarm.GetHour(),tAlarm.GetMinute(),tAlarm.GetSecond() ); //����ʱ�� if (tAlarm.GetStatus()==COleDateTime::valid && tNow > tAlarm && (tNow-tAlarm)<ts) //��ǰʱ���������ʱ��,���Ҽ��С��30���� { if ( tSendLast.GetStatus() == COleDateTime::valid ) { if ( tSendLast != tAlarm ) //����������ʱ��������ʱ����һ�����ʾ��ǰ���������ѹ� bSend = true; } else { bSend = true; } } break; case 4: //����һ�� //tAlarm.SetDateTime(tNow.GetYear(),tNow.GetMonth(),tNow.GetDay(),tAlarm.GetHour(),tAlarm.GetMinute(),tAlarm.GetSecond() ); //����ʱ�� if (tAlarm.GetStatus()==COleDateTime::valid && tNow > tAlarm && (tNow-tAlarm)<ts) //��ǰʱ���������ʱ��,���Ҽ��С��30���� { if ( tSendLast.GetStatus() == COleDateTime::valid ) { if ( tSendLast != tAlarm ) //����������ʱ��������ʱ����һ�����ʾ��ǰ���������ѹ� 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 ) //����һ��,���Ѻ���״̬Ϊ { strSelect.Format( _T("update calendar set Status=0 where CalendarID=%d"),lID ); m_AdoRS1.Open(strSelect); } //�ύ���� 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); //���Ͷ��� //����һ�κ��˳�������һ���ټ����һ�� 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); //�������ӳ�ʱʱ�� #ifdef SMSCENTER_USECLIENT m_adoConnection.SetCursorLocation(adUseClient); //����Ϊ�����α����� #endif m_AdoRS.SetAdoConnection( &m_adoConnection ); //�������ݿ����� m_AdoRS1.SetAdoConnection( &m_adoConnection ); //�������ݿ����� m_AdoRS2.SetAdoConnection( &m_adoConnection ); //�������ݿ����� } return b; }