#include "stdafx.h" #include "SMSHandle.h" #include #include SMSInfo CSMSHandle::s_SMSInfo; #define SENDCOUNT _T("SendCount") #define BALANCE _T("Balance") #define ERPHONE _T("ErrorPhone") #define SENDSID _T("Sid") #define QUERYCOUNT _T("SMSCharacterCount") #define QUERYSIGLE _T("Signatures") #define QUERYOWNER _T("OwnedOperators") #define ACCOUNT _T("account") #define SIGNATURES _T("Signatures") #define OPERATORS _T("OwnedOperators") #define RETH _T("") //#define USE_DOMAIN 0 #define SENDSMS _T("http://%s:%d/webService/SendSmsMessage?account=%s&password=%s&phone=%s&content=%s&time=%s&t=%s") #define QUERYACCOUNT _T("http://%s:%d/webService/getuserinfo?account=%s&password=%s&t=%s") #define QUERYSEND _T("http://%s:%d/webService/QuerySendRecordInfo?account=%s&password=%s&sid=%s&t=%s") #define INSERTSENDREG _T("insert into sendreg([msgtype],[phones],[content],[timestamp],[msgcount],[status],[issended],[isautosend],[ren]) values('%s','%s','%s','%s','%d','%s','%s','%s','%s')") //#define INSERTSENDREG_old _T("insert into sendreg([phones],[content],[timestamp],[msgcount],[status],[issended],[isautosend],[ren]) values('%s','%s','%s','%d','%s','%s','%s','%s')") #define UPDATESENDREG _T("update sendreg set msgcount='%s',log='%s',status='%s',issended='%s' where autoid='%s'") //#define UPDATE_VERSION _T(" update [version] set [msgbalance] = convert(int,msgbalance,10) - %s, [msgused] = convert(int,msgused,10) + %s "); #define UPDATE_VERSION _T(" update [version] set [msgbalance] = '%s', [msgused] = convert(int,msgused) + %s ") CString g_strClientFilters = _T(""); CString g_strClient2Filters = _T(""); CString g_strClient3Filters = _T(""); CString g_strHospitalClientFilters = _T(""); //----------------- 儿童版本; //dindanclient : 生日前n天 和 百天前n天; #define FILTERS_CCLIENT_ALL _T("((birthday1 like '%%%s%%' or birthday1 = '%s') and check1 = '0') or ((birthday1 like '%%%s%%' or birthday1 = '%s') and check1 = '1')") #define FILTERS_CCLIENT_CHECK1 _T("(birthday1 like '%%%s%%' and check1 = '0') or (birthday1 like '%%%s%%' and check1 = '1')") #define FILTERS_CCLIENT_CHECK2 _T("(birthday1 = '%s' and check1 = '0') or (birthday1 = '%s'and check1 = '1')") // 医院出生满n天;跟百天一样; #define FILTERS_CCLIENT_HOSPITAL _T("(birthday1 = '%s' and check1 = '0') or (birthday1 = '%s' and check1 = '1')") //--client2 : 生日前n天 和 百天前n天; #define FILTERS_CCLIENT2_ALL _T("((birthday like '%%%s%%' or birthday = '%s') and check1 = '0') or ((birthday like '%%%s%%' or birthday = '%s') and check1 = '1')") #define FILTERS_CCLIENT2_CHECK1 _T("(birthday like '%%%s%%' and check1 = '0') or (birthday like \'$%%s%%\' and check1 = '1')") #define FILTERS_CCLIENT2_CHECK2 _T("(birthday = '%s' and check1 = '0') or ( birthday = '%s' and check1 = '1')") // 医院出生满n天;跟百天一样; #define FILTERS_CCLIENT2_HOSPITAL _T("(birthday = '%s' and check1 = '0') or (birthday = '%s' and check1 = '1')") //--client3 : 生日前n天 和 百天前n天; #define FILTERS_CCLIENT3_ALL _T("((birthday like '%%%s%%' or birthday = '%s') and check1 = '0') or ((birthday like '%%%s%%' or birthday = '%s') and check1 = '1')") #define FILTERS_CCLIENT3_CHECK1 _T("(birthday like '%%%s%%' and check1 = '0') or (birthday like '%%%s%%' and check1 = '1')") #define FILTERS_CCLIENT3_CHECK2 _T("(birthday = '%s' and check1 = '0') or (birthday = '%s' and check1 = '1')") // 医院出生满n天;跟百天一样; #define FILTERS_CCLIENT3_HOSPITAL _T("(birthday = '%s' and check1 = '0') or (birthday = '%s' and check1 = '1')") // 当hospitalmsgcheck==1时;查询hospitalclient表里的宝宝生日和百天、满n天; //#define FILTERS_HOSPITALCLIENT_CHECK1AB _T("birthdaytped ='0' and ((birthday like '%%%s%%' and check1='0') or (birthday like '%%%s%%' and check1='1')) or ((birthday ='%s' and check1='0') or (birthday ='%s' and check1='1'))") #define FILTERS_HOSPITALCLIENT_CHECK1AB _T("birthdaytype ='0' and ((birthday like '%%%s%%' or birthday ='%s') and check1='0') or ((birthday like '%%%s%%' or birthday ='%s') and check1='1')") #define FILTERS_HOSPITALCLIENT_CHECK1A _T("birthdaytype ='0' and (birthday like '%%%s%%' and check1='0') or (birthday like '%%%s%%' and check1='1')") #define FILTERS_HOSPITALCLIENT_CHECK1B _T("birthdaytype ='0' and (birthday ='%s' and check1='0') or (birthday ='%s' and check1='1')") #define FILTERS_HOSPITALCLIENT_CHECK1 _T("(birthday ='%s' and check1='0') or (birthday ='%s' and check1='1')") // 当hospitalcheck2==1时;查询hospitalclient表里孕妇怀满n天的记录; //#define FILTERS_HOSPITALCLIENT_CHECK2 _T("birthdaytype ='1' and date1 > '%s'") //----------------- 婚纱版本: // dindanclient 生日前n天+纪念日前n天+结婚当天; #define FILTERS_WCLIENT_ALL _T("(birthday1 like '%%%s%%' and check1='0') or (birthday1 like '%%%s%%' and check1='1') or (birthday2 like '%%%s%%' and check2='0') or (birthday2 like '%%%s%%' and check2='1') or (time3 like '%%%s%%' and check3='0') or (time3 like '%%%s%%' and check3='1') or (time3 = '%s' and check3='0') or (time3 = '%s' and check3='1')") #define FILTERS_WCLIENT_CHECKA _T("(birthday1 like '%%%s%%' and check1='0') or (birthday1 like '%%%s%%' and check1='1') or (birthday2 like '%%%s%%' and check2='0') or (birthday2 like '%%%s%%' and check2='1')") #define FILTERS_WCLIENT_CHECKB _T("(time3 like '%%%s%%' and check3='0') or (time3 like '%%%s%%' and check3='1')") #define FILTERS_WCLIENT_CHECKF _T("(time3 = '%s' and check3='0') or (time3 = '%s' and check3='1')") #define FILTERS_WCLIENT_CHECKAB _T("(birthday1 like '%%%s%%' and check1='0') or (birthday1 like '%%%s%%' and check1='1') or (birthday2 like '%%%s%%' and check2='0') or (birthday2 like '%%%s%%' and check2='1') or (time3 like '%%%s%%' and check3='0') or (time3 like '%%%s%%' and check3='1')") #define FILTERS_WCLIENT_CHECKAF _T("(birthday1 like '%%%s%%' and check1='0') or (birthday1 like '%%%s%%' and check1='1') or (birthday2 like '%%%s%%' and check2='0') or (birthday2 like '%%%s%%' and check2='1') or (time3 = '%s' and check3='0') or (time3 = '%s' and check3='1')") #define FILTERS_WCLIENT_CHECKBF _T("(time3 like '%%%s%%' and check3='0') or (time3 like '%%%s%%' and check3='1') or (time3 = '%s' and check3='0') or (time3 = '%s' and check3='1')") //--client2 : 生日前n天; #define FILTERS_WCLIENT2 _T("((birthday like '%%%s%%' and check1 = '0') or (birthday like '%%%s%%' and check1 = '1'))") //--client3 : 生日前n天+纪念日前n天+结婚当天; #define FILTERS_WCLIENT3_ALL _T("(birthday like '%%%s%%' and check1='0') or (birthday like '%%%s%%' and check1='1') or (birthday2 like '%%%s%%' and check2='0') or (birthday2 like '%%%s%%' and check2='1') or (time3 like '%%%s%%' and check3='0') or (time3 like '%%%s%%' and check3='1') or (time3 = '%s' and check3='0') or (time3 = '%s' and check3='1')") #define FILTERS_WCLIENT3_CHECKA _T("(birthday like '%%%s%%' and check1='0') or (birthday like '%%%s%%' and check1='1') or (birthday2 like '%%%s%%' and check2='0') or (birthday2 like '%%%s%%' and check2='1')") #define FILTERS_WCLIENT3_CHECKB _T("(time3 like '%%%s%%' and check3='0') or (time3 like '%%%s%%' and check3='1')") #define FILTERS_WCLIENT3_CHECKF _T("(time3 = '%s' and check3='0') or (time3 = '%s' and check3='1')") #define FILTERS_WCLIENT3_CHECKAB _T("(birthday like '%%%s%%' and check1='0') or (birthday like '%%%s%%' and check1='1') or (birthday2 like '%%%s%%' and check2='0') or (birthday2 like '%%%s%%' and check2='1') or (time3 like '%%%s%%' and check3='0') or (time3 like '%%%s%%' and check3='1')") #define FILTERS_WCLIENT3_CHECKAF _T("(birthday like '%%%s%%' and check1='0') or (birthday like '%%%s%%' and check1='1') or (birthday2 like '%%%s%%' and check2='0') or (birthday2 like '%%%s%%' and check2='1') or (time3 = '%s' and check3='0') or (time3 = '%s' and check3='1')") #define FILTERS_WCLIENT3_CHECKBF _T("(time3 like '%%%s%%' and check3='0') or (time3 like '%%%s%%' and check3='1') or (time3 = '%s' and check3='0') or (time3 = '%s' and check3='1')") BOOL CSMSHandle::m_bGenerateEndof=FALSE; CSMSHandle::CSMSHandle() { m_dwblance = 0L; m_ulCountOfSended = 0L; memset(m_szAccount, 0, MAX_NAME_LEN*sizeof(TCHAR)); memset(m_szPassWord, 0, MAX_NAME_LEN*sizeof(TCHAR)); m_hWaitableTime = NULL; m_hSendEvent = NULL; m_hGenerateEvent = NULL; m_hSendSMSThread = NULL; m_hGenerateSMSThread = NULL; } CSMSHandle::~CSMSHandle() { EndofThread(); m_vtSMSTypeOfChild.clear(); m_vtSMSTypeOfWedding.clear(); } int CSMSHandle::StartThread() { m_hSendEvent = CreateEvent(NULL, TRUE, FALSE, NULL); // 无信号事件; if (m_hSendEvent == NULL){ return -1; } m_hSendSMSThread = CreateThread(NULL, 0, SendSMSThread, this, 0, NULL); if (m_hSendSMSThread == NULL){ return -1; } #if JEFF_DELETE_ON m_hGenerateEvent = CreateEvent(NULL, TRUE, FALSE, NULL); // 无信号事件; if (m_hGenerateEvent == NULL){ return -1; } #endif // 计时器; SYSTEMTIME st; FILETIME ftLocal, ftUTC; LARGE_INTEGER liUTC; st.wYear = 2014; // Year st.wMonth = 12; // January st.wDayOfWeek = 0; // Ignored st.wDay = 1; // The first of the month st.wHour = 13; // 1PM st.wMinute = 0; // 0 minutes into the hour st.wSecond = 0; // 0 seconds into the minute st.wMilliseconds = 0; // 0 milliseconds into the second SystemTimeToFileTime(&st, &ftLocal); // Convert local time to UTC time. LocalFileTimeToFileTime(&ftLocal, &ftUTC); // Convert FILETIME to LARGE_INTEGER because of different alignment. liUTC.LowPart = ftUTC.dwLowDateTime; liUTC.HighPart = ftUTC.dwHighDateTime; liUTC.QuadPart = -(2*10000000); m_bGenerateEndof = FALSE; m_hWaitableTime = CreateWaitableTimer(NULL,FALSE,NULL); const int nTimerUnitsPerSecond = 10000000; #if _DEBUG SetWaitableTimer(m_hWaitableTime,&liUTC,3*1000,NULL,NULL,FALSE); // 3秒执行一次; #else SetWaitableTimer(m_hWaitableTime,&liUTC,3*60*60*1000,NULL,NULL,FALSE); // 3小时执行一次; #endif m_hGenerateSMSThread = CreateThread(NULL, 0, GenerateSMSThread, this, 0, NULL); if (m_hGenerateSMSThread == NULL){ return -1; } return 0; } int CSMSHandle::EndofThread() { if (m_hSendEvent){ SetEvent(m_hSendEvent); } if (m_hSendSMSThread){ if (WaitForSingleObject(m_hSendSMSThread, INFINITE) != WAIT_TIMEOUT) { CloseHandle(m_hSendSMSThread); m_hSendSMSThread = NULL; } } if (m_hSendEvent){ CloseHandle(m_hSendEvent); } m_hSendEvent = NULL; #if JEFF_DELETE_ON if (m_hGenerateEvent){ SetEvent(m_hGenerateEvent); } #endif // 重置等待时间,立即返回; m_bGenerateEndof = TRUE; LARGE_INTEGER li; const int nTimerUnitsPerSecond = 10000000; li.QuadPart = 1*nTimerUnitsPerSecond; SetWaitableTimer(m_hWaitableTime,&li,NULL,NULL,NULL,FALSE); if (m_hGenerateSMSThread){ if (WaitForSingleObject(m_hGenerateSMSThread, INFINITE) != WAIT_TIMEOUT) { CloseHandle(m_hGenerateSMSThread); m_hGenerateSMSThread = NULL; } } if ( m_hWaitableTime) { CloseHandle(m_hWaitableTime); m_hWaitableTime = NULL; } return 0L; } void CSMSHandle::GetMainInfo() { CStringArray strArray; if (CDBInterface::GetInstance()->IsOpen() == FALSE) { CDBInterface::GetInstance()->SolveDBError(WSAECONNRESET); } CDBInterface::GetInstance()->Execute(_T("if not exists(select name from syscolumns where id=object_id('sendreg') and name='msgtype') alter table [sendreg] add [msgtype] nvarchar(10)")); CDBInterface::GetInstance()->GetSMSInfo(s_SMSInfo); CDBInterface::GetInstance()->GetSMSType(m_vtSMSTypeOfChild, _ttoi(s_SMSInfo.hospitalmsgcheck1), m_vtSMSTypeOfWedding, _ttoi(s_SMSInfo.hospitalmsgcheck2)); if (CHILD_VERSION) { CalculateFilter_Child(); } else { CalculateFilter_Wedding(); } StartThread(); } /* BOOL CSMSHandle::GetSMSBlance(QuerAccountInfo &tAccountInfo) { AutoThreadSection aSection(&s_critSection); CString str = _T(""); str.Format(QUERYACCOUNT,g_szSMSServer, g_dwTCPSMSPort, s_SMSInfo.msgaccount, s_SMSInfo.msgpassword, CTime::GetCurrentTime().Format(_T("%Y%m%d%H%M%S"))); VecStParam vp; if (TRUE == m_httpGet.TransDataToServer((LPCTSTR)str, 3000, vp)) { DWORD nReciveLen = 10240; BYTE szReciveData[10240]; memset(szReciveData, 0, nReciveLen); m_httpGet.ReceiveData(szReciveData, nReciveLen); CStringW strRespone; UrlUTF8Decode(szReciveData, strRespone); INT nPos = strRespone.Find(RETH); strRespone.Delete(0, nPos + wcslen(RETH)); nPos = strRespone.Find(RETE); strRespone = strRespone.Mid(0, nPos); // 解析参数值; nPos = strRespone.Find(ACCOUNT); tAccountInfo.strSendStatus = strRespone.Left(nPos - 1); strRespone.Delete(0, nPos + wcslen(ACCOUNT) + 1); nPos = strRespone.Find(BALANCE); tAccountInfo.strAccount = strRespone.Left(nPos - 1); strRespone.Delete(0, nPos + wcslen(BALANCE) + 1); nPos = strRespone.Find(QUERYCOUNT); tAccountInfo.strBalance = strRespone.Left(nPos - 1); strRespone.Delete(0, nPos + wcslen(QUERYCOUNT) + 1); nPos = strRespone.Find(SIGNATURES); tAccountInfo.strSMSCharacterCount = strRespone.Left(nPos - 1); strRespone.Delete(0, nPos + wcslen(SIGNATURES) + 1); nPos = strRespone.Find(OPERATORS); tAccountInfo.strSignatures = strRespone.Left(nPos - 1); strRespone.Delete(0, nPos + wcslen(OPERATORS) + 1); tAccountInfo.strOwnedOperators = strRespone; return TRUE; } return FALSE; } */ CString CSMSHandle::CalculateFilter_Child() { g_strClientFilters = _T(""); g_strClient2Filters = _T(""); g_strClient3Filters = _T(""); g_strHospitalClientFilters = _T(""); // 计算出儿童生日和儿童百天; if (s_SMSInfo.msgCheck1 == _T("1") && s_SMSInfo.msgCheck2 == _T("1")) { // 公历+农历生日; CString strSolarBirthday = _T(""); CString strLunarBirthday = _T(""); // 公历+农历出生百天; CString strSolarHundred = _T(""); CString strLunarHundred = _T(""); // 1.计算生日前n天的公历和农历日期; COleDateTime dtToday = COleDateTime::GetCurrentTime(); COleDateTimeSpan Span(_ttoi(s_SMSInfo.msgDays1), 0, 0, 0); dtToday += Span; strSolarBirthday.Format(_T("-%02d-%02d"), dtToday.GetMonth(), dtToday.GetDay()); strLunarBirthday = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarBirthday.Delete(0, 4); // 2.计算宝宝出生百天后的公历和农历日期; dtToday = COleDateTime::GetCurrentTime(); Span.SetDateTimeSpan(100 - _ttoi(s_SMSInfo.msgDays2), 0, 0, 0); dtToday -= Span; strSolarHundred.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarHundred = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); g_strClientFilters.Format(FILTERS_CCLIENT_ALL, strSolarBirthday, strSolarHundred, strLunarBirthday, strLunarHundred); g_strClient2Filters.Format(FILTERS_CCLIENT2_ALL, strSolarBirthday, strSolarHundred, strLunarBirthday, strLunarHundred); g_strClient3Filters.Format(FILTERS_CCLIENT3_ALL, strSolarBirthday, strSolarHundred, strLunarBirthday, strLunarHundred); #if JEFF_TEST_OFF // 3.计算出医院跟踪系统的意向儿童出生满n天日期; CString strSolarBorn = _T(""); CString strLunarBorn = _T(""); CString strHospitalClientFilters = _T(""); for (std::vector::iterator it = m_vtSMSTypeOfChild.begin(); it != m_vtSMSTypeOfChild.end(); it++) { dtToday = COleDateTime::GetCurrentTime(); Span.SetDateTimeSpan(it->nDays, 0, 0, 0); dtToday -= Span; strSolarBorn.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarBorn = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strHospitalClientFilters.Format(FILTERS_CCLIENT_HOSPITAL, strSolarBorn, strLunarBorn, strSolarBorn, strLunarBorn); g_strClientFilters += _T(" or ") + strHospitalClientFilters; strHospitalClientFilters.Format(FILTERS_CCLIENT2_HOSPITAL, strSolarBorn, strLunarBorn, strSolarBorn, strLunarBorn); g_strClient2Filters += _T(" or ") + strHospitalClientFilters; strHospitalClientFilters.Format(FILTERS_CCLIENT3_HOSPITAL, strSolarBorn, strLunarBorn, strSolarBorn, strLunarBorn); g_strClient3Filters += _T(" or ") + strHospitalClientFilters; } #endif } else if (s_SMSInfo.msgCheck1 == _T("1")) { // 公历+农历生日; CString strSolarBirthday = _T(""); CString strLunarBirthday = _T(""); // 1.计算生日前n天的公历和农历日期; COleDateTime dtToday = COleDateTime::GetCurrentTime(); COleDateTimeSpan Span(_ttoi(s_SMSInfo.msgDays1), 0, 0, 0); dtToday += Span; strSolarBirthday.Format(_T("-%02d-%02d"), dtToday.GetMonth(), dtToday.GetDay()); strLunarBirthday = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarBirthday.Delete(0, 4); g_strClientFilters.Format(FILTERS_CCLIENT_CHECK1, strSolarBirthday, strLunarBirthday); g_strClient2Filters.Format(FILTERS_CCLIENT2_CHECK1, strSolarBirthday, strLunarBirthday); g_strClient3Filters.Format(FILTERS_CCLIENT3_CHECK1, strSolarBirthday, strLunarBirthday); #if JEFF_TEST_OFF // 3.计算出医院跟踪系统的意向儿童出生满n天日期; CString strSolarBorn = _T(""); CString strLunarBorn = _T(""); CString strHospitalClientFilters = _T(""); for (std::vector::iterator it = m_vtSMSTypeOfChild.begin(); it != m_vtSMSTypeOfChild.end(); it++) { dtToday = COleDateTime::GetCurrentTime(); Span.SetDateTimeSpan(it->nDays, 0, 0, 0); dtToday -= Span; strSolarBorn.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarBorn = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strHospitalClientFilters.Format(FILTERS_CCLIENT_HOSPITAL, strSolarBorn, strLunarBorn, strSolarBorn, strLunarBorn); g_strClientFilters += _T(" or ") + strHospitalClientFilters; strHospitalClientFilters.Format(FILTERS_CCLIENT2_HOSPITAL, strSolarBorn, strLunarBorn, strSolarBorn, strLunarBorn); g_strClient2Filters += _T(" or ") + strHospitalClientFilters; strHospitalClientFilters.Format(FILTERS_CCLIENT3_HOSPITAL, strSolarBorn, strLunarBorn, strSolarBorn, strLunarBorn); g_strClient3Filters += _T(" or ") + strHospitalClientFilters; } #endif } else if (s_SMSInfo.msgCheck2 == _T("1")) { // 公历+农历出生百天; CString strSolarHundred = _T(""); CString strLunarHundred = _T(""); // 1.计算宝宝出生百天后的公历和农历日期; COleDateTime dtToday = COleDateTime::GetCurrentTime(); COleDateTimeSpan Span(100 - _ttoi(s_SMSInfo.msgDays2), 0, 0, 0); dtToday -= Span; strSolarHundred.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarHundred = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); g_strClientFilters.Format(FILTERS_CCLIENT_CHECK2, strSolarHundred, strLunarHundred); g_strClient2Filters.Format(FILTERS_CCLIENT2_CHECK2, strSolarHundred, strLunarHundred); g_strClient3Filters.Format(FILTERS_CCLIENT3_CHECK2, strSolarHundred, strLunarHundred); #if JEFF_TEST_OFF // 2.计算出医院跟踪系统的意向儿童出生满n天日期; CString strSolarBorn = _T(""); CString strLunarBorn = _T(""); CString strHospitalClientFilters = _T(""); for (std::vector::iterator it = m_vtSMSTypeOfChild.begin(); it != m_vtSMSTypeOfChild.end(); it++) { dtToday = COleDateTime::GetCurrentTime(); Span.SetDateTimeSpan(it->nDays, 0, 0, 0); dtToday -= Span; strSolarBorn.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarBorn = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strHospitalClientFilters.Format(FILTERS_CCLIENT_HOSPITAL, strSolarBorn, strLunarBorn, strSolarBorn, strLunarBorn); g_strClientFilters += _T(" or ") + strHospitalClientFilters; strHospitalClientFilters.Format(FILTERS_CCLIENT2_HOSPITAL, strSolarBorn, strLunarBorn, strSolarBorn, strLunarBorn); g_strClient2Filters += _T(" or ") + strHospitalClientFilters; strHospitalClientFilters.Format(FILTERS_CCLIENT3_HOSPITAL, strSolarBorn, strLunarBorn, strSolarBorn, strLunarBorn); g_strClient3Filters += _T(" or ") + strHospitalClientFilters; } #endif } // hospitalcheck1 == 1 and g_bSofeWareReg==1 if (s_SMSInfo.hospitalmsgcheck1 == _T("1") && g_bSoftWareReg && m_vtSMSTypeOfChild.size()) { #if JEFF_TEST_OFF if (s_SMSInfo.msgCheck1 == _T("1") && s_SMSInfo.msgCheck2 == _T("1")) { // 公历+农历生日; CString strSolarBirthday = _T(""); CString strLunarBirthday = _T(""); // 公历+农历出生百天; CString strSolarHundred = _T(""); CString strLunarHundred = _T(""); // 1.计算生日前n天的公历和农历日期; COleDateTime dtToday = COleDateTime::GetCurrentTime(); COleDateTimeSpan Span(_ttoi(s_SMSInfo.msgDays1), 0, 0, 0); dtToday += Span; strSolarBirthday.Format(_T("-%02d-%02d"), dtToday.GetMonth(), dtToday.GetDay()); strLunarBirthday = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarBirthday.Delete(0, 4); // 2.计算宝宝出生百天后的公历和农历日期; dtToday = COleDateTime::GetCurrentTime(); Span.SetDateTimeSpan(100 - _ttoi(s_SMSInfo.msgDays2), 0, 0, 0); dtToday -= Span; strSolarHundred.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarHundred = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); g_strHospitalClientFilters.Format(FILTERS_HOSPITALCLIENT_CHECK1AB, strSolarBirthday, strSolarHundred, strLunarBirthday, strLunarHundred); // 3.计算出医院跟踪系统的意向儿童出生满n天日期; CString strSolarBorn = _T(""); CString strLunarBorn = _T(""); CString strHospitalClientFilters = _T(""); for (std::vector::iterator it = m_vtSMSTypeOfChild.begin(); it != m_vtSMSTypeOfChild.end(); it++) { dtToday = COleDateTime::GetCurrentTime(); Span.SetDateTimeSpan(it->nDays, 0, 0, 0); dtToday -= Span; strSolarBorn.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarBorn = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strHospitalClientFilters.Format(FILTERS_HOSPITALCLIENT_CHECK1, strSolarBorn, strLunarBorn); g_strHospitalClientFilters += _T(" or ") + strHospitalClientFilters; } } else if (s_SMSInfo.msgCheck1 == _T("1")) { // 公历+农历生日; CString strSolarBirthday = _T(""); CString strLunarBirthday = _T(""); // 1.计算生日前n天的公历和农历日期; COleDateTime dtToday = COleDateTime::GetCurrentTime(); COleDateTimeSpan Span(_ttoi(s_SMSInfo.msgDays1), 0, 0, 0); dtToday += Span; strSolarBirthday.Format(_T("-%02d-%02d"), dtToday.GetMonth(), dtToday.GetDay()); strLunarBirthday = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarBirthday.Delete(0, 4); g_strHospitalClientFilters.Format(FILTERS_HOSPITALCLIENT_CHECK1A, strSolarBirthday, strLunarBirthday); // 2.计算出医院跟踪系统的意向儿童出生满n天日期; CString strSolarBorn = _T(""); CString strLunarBorn = _T(""); CString strHospitalClientFilters = _T(""); for (std::vector::iterator it = m_vtSMSTypeOfChild.begin(); it != m_vtSMSTypeOfChild.end(); it++) { dtToday = COleDateTime::GetCurrentTime(); Span.SetDateTimeSpan(it->nDays, 0, 0, 0); dtToday -= Span; strSolarBorn.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarBorn = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strHospitalClientFilters.Format(FILTERS_HOSPITALCLIENT_CHECK1, strSolarBorn, strLunarBorn); g_strHospitalClientFilters += _T(" or ") + strHospitalClientFilters; } } else if (s_SMSInfo.msgCheck2 == _T("1")) { // 公历+农历出生百天; CString strSolarHundred = _T(""); CString strLunarHundred = _T(""); // 1.计算宝宝出生百天后的公历和农历日期; COleDateTime dtToday = COleDateTime::GetCurrentTime(); COleDateTimeSpan Span(100 - _ttoi(s_SMSInfo.msgDays2), 0, 0, 0); dtToday -= Span; strSolarHundred.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarHundred = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); g_strHospitalClientFilters.Format(FILTERS_HOSPITALCLIENT_CHECK1B, strSolarHundred, strLunarHundred); // 2.计算出医院跟踪系统的意向儿童出生满n天日期; CString strSolarBorn = _T(""); CString strLunarBorn = _T(""); CString strHospitalClientFilters = _T(""); for (std::vector::iterator it = m_vtSMSTypeOfChild.begin(); it != m_vtSMSTypeOfChild.end(); it++) { dtToday = COleDateTime::GetCurrentTime(); Span.SetDateTimeSpan(it->nDays, 0, 0, 0); dtToday -= Span; strSolarBorn.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarBorn = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strHospitalClientFilters.Format(FILTERS_HOSPITALCLIENT_CHECK1, strSolarBorn, strLunarBorn); g_strHospitalClientFilters += _T(" or ") + strHospitalClientFilters; } } else #endif { // 1.计算出医院跟踪系统的意向儿童出生满n天日期; COleDateTime dtToday; COleDateTimeSpan Span(0, 0, 0, 0); CString strSolarBorn = _T(""); CString strLunarBorn = _T(""); CString strHospitalClientFilters = _T(""); for (std::vector::iterator it = m_vtSMSTypeOfChild.begin(); it != m_vtSMSTypeOfChild.end(); it++) { dtToday = COleDateTime::GetCurrentTime(); //Span.SetDateTimeSpan(it->nDays, 0, 0, 0); Span.SetDateTimeSpan(it->nDays - 1, 0, 0, 0); // 不是满n天,而是第n天; dtToday -= Span; strSolarBorn.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarBorn = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strHospitalClientFilters.Format(FILTERS_HOSPITALCLIENT_CHECK1, strSolarBorn, strLunarBorn); g_strHospitalClientFilters += strHospitalClientFilters + _T(" or "); } g_strHospitalClientFilters.TrimRight(_T(" or ")); g_strHospitalClientFilters += _T(" and birthdaytype='0'"); } } if (s_SMSInfo.hospitalmsgcheck2 == _T("1") && g_bSoftWareReg && m_vtSMSTypeOfWedding.size()) { // 1.计算出医院跟踪系统的意向孕妇怀满n天日期; CString strSolarBorn = _T(""); int MaxDay = 0; for (std::vector::iterator it = m_vtSMSTypeOfWedding.begin(); it != m_vtSMSTypeOfWedding.end(); it++) { MaxDay = (MaxDay > it->nDays) ? MaxDay : it->nDays; } COleDateTime dtToday = COleDateTime::GetCurrentTime(); COleDateTimeSpan Span(MaxDay, 0, 0, 0); //COleDateTimeSpan Span(MaxDay + 1, 0, 0, 0);// 不是满n天,而是第n天; dtToday -= Span; strSolarBorn.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); CString strFilters; strFilters.Format(_T("date1 > '%s' and birthdaytype='1'"), strSolarBorn); if (g_strHospitalClientFilters.IsEmpty() == FALSE) g_strHospitalClientFilters += _T(" or (") + strFilters + _T(")"); else g_strHospitalClientFilters = strFilters; } // 没启动医院跟踪系统,但是有订单宝宝跟踪; if ( m_vtSMSTypeOfChild.size()/* && (s_SMSInfo.hospitalmsgcheck1 == _T("0") || !g_bSoftWareReg)*/) { // 2.计算出医院跟踪系统的意向儿童出生满n天日期; CString strSolarBorn = _T(""); CString strLunarBorn = _T(""); CString strChildClientFilters = _T(""); COleDateTime dtToday;// = COleDateTime::GetCurrentTime(); COleDateTimeSpan Span;//(100 - _ttoi(s_SMSInfo.msgDays2), 0, 0, 0); for (std::vector::iterator it = m_vtSMSTypeOfChild.begin(); it != m_vtSMSTypeOfChild.end(); it++) { if ( it->nChoose == 0) { dtToday = COleDateTime::GetCurrentTime(); //Span.SetDateTimeSpan(it->nDays, 0, 0, 0); Span.SetDateTimeSpan(it->nDays - 1, 0, 0, 0);// 不是满n天,而是第n天; dtToday -= Span; strSolarBorn.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarBorn = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strChildClientFilters.Format(FILTERS_CCLIENT_HOSPITAL, strSolarBorn, strLunarBorn, strSolarBorn, strLunarBorn); if (g_strClientFilters.IsEmpty()) g_strClientFilters = strChildClientFilters; else g_strClientFilters += _T(" or ") + strChildClientFilters; strChildClientFilters.Format(FILTERS_CCLIENT2_HOSPITAL, strSolarBorn, strLunarBorn, strSolarBorn, strLunarBorn); if (g_strClient2Filters.IsEmpty()) g_strClient2Filters = strChildClientFilters; else g_strClient2Filters += _T(" or ") + strChildClientFilters; strChildClientFilters.Format(FILTERS_CCLIENT3_HOSPITAL, strSolarBorn, strLunarBorn, strSolarBorn, strLunarBorn); if (g_strClient3Filters.IsEmpty()) g_strClient3Filters = strChildClientFilters; else g_strClient3Filters += _T(" or ") + strChildClientFilters; } } } #if _DEBUG LOG4C_NO_FILENUM((LOG_NOTICE,"Client条件:%s",g_strClientFilters)); LOG4C_NO_FILENUM((LOG_NOTICE,"Client2条件:%s",g_strClient2Filters)); LOG4C_NO_FILENUM((LOG_NOTICE,"Client3条件:%s",g_strClient3Filters)); LOG4C_NO_FILENUM((LOG_NOTICE,"HospitalClient条件:%s",g_strHospitalClientFilters)); #endif return _T(""); } CString CSMSHandle::CalculateFilter_Wedding() { g_strClientFilters = _T(""); g_strClient2Filters = _T(""); g_strClient3Filters = _T(""); g_strHospitalClientFilters = _T(""); if (s_SMSInfo.msgCheck1 == _T("1") && s_SMSInfo.msgCheck2 == _T("1") && s_SMSInfo.msgCheck15 == _T("1")) { // 公历+农历生日; CString strSolarBirthday = _T(""); CString strLunarBirthday = _T(""); // 公历+农历结婚纪念日; CString strSolarWedding = _T(""); CString strLunarWedding = _T(""); // 公历+农历结婚当天; CString strSolarMarry = _T(""); CString strLunarMarry = _T(""); // 1.计算生日前n天的公历和农历日期; COleDateTime dtToday = COleDateTime::GetCurrentTime(); COleDateTimeSpan Span(_ttoi(s_SMSInfo.msgDays1), 0, 0, 0); dtToday += Span; strSolarBirthday.Format(_T("-%02d-%02d"), dtToday.GetMonth(), dtToday.GetDay()); strLunarBirthday = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarBirthday.Delete(0, 4); // 2.计算结婚纪念日前n天的公历和农历日期; dtToday = COleDateTime::GetCurrentTime(); Span.SetDateTimeSpan(_ttoi(s_SMSInfo.msgDays2), 0, 0, 0); dtToday += Span; strSolarWedding.Format(_T("-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarWedding = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarWedding.Delete(0, 4); // 3.计算出结婚当天的公历和农历日期; dtToday = COleDateTime::GetCurrentTime(); strSolarMarry.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarMarry = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); g_strClientFilters.Format(FILTERS_WCLIENT_ALL, strSolarBirthday, strLunarBirthday, strSolarBirthday, strLunarBirthday, strSolarWedding, strLunarWedding, strSolarMarry, strLunarMarry); g_strClient2Filters.Format(FILTERS_WCLIENT2, strSolarBirthday, strLunarBirthday); g_strClient3Filters.Format(FILTERS_WCLIENT3_ALL, strSolarBirthday, strLunarBirthday, strSolarBirthday, strLunarBirthday, strSolarWedding, strLunarWedding, strSolarMarry, strLunarMarry); } else if (s_SMSInfo.msgCheck1 == _T("1") && s_SMSInfo.msgCheck2 == _T("1")) { // 公历+农历生日; CString strSolarBirthday = _T(""); CString strLunarBirthday = _T(""); // 公历+农历结婚纪念日; CString strSolarWedding = _T(""); CString strLunarWedding = _T(""); // 1.计算生日前n天的公历和农历日期; COleDateTime dtToday = COleDateTime::GetCurrentTime(); COleDateTimeSpan Span(_ttoi(s_SMSInfo.msgDays1), 0, 0, 0); dtToday += Span; strSolarBirthday.Format(_T("-%02d-%02d"), dtToday.GetMonth(), dtToday.GetDay()); strLunarBirthday = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarBirthday.Delete(0, 4); // 2.计算结婚纪念日前n天的公历和农历日期; dtToday = COleDateTime::GetCurrentTime(); Span.SetDateTimeSpan(_ttoi(s_SMSInfo.msgDays2), 0, 0, 0); dtToday += Span; strSolarWedding.Format(_T("-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarWedding = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarWedding.Delete(0, 4); g_strClientFilters.Format(FILTERS_WCLIENT_CHECKAB, strSolarBirthday, strLunarBirthday, strSolarBirthday, strLunarBirthday, strSolarWedding, strLunarWedding); g_strClient2Filters.Format(FILTERS_WCLIENT2, strSolarBirthday, strLunarBirthday); g_strClient3Filters.Format(FILTERS_WCLIENT3_CHECKAB, strSolarBirthday, strLunarBirthday, strSolarBirthday, strLunarBirthday, strSolarWedding, strLunarWedding); } else if (s_SMSInfo.msgCheck1 == _T("1") && s_SMSInfo.msgCheck15 == _T("1")) { // 公历+农历生日; CString strSolarBirthday = _T(""); CString strLunarBirthday = _T(""); // 公历+农历结婚当天; CString strSolarMarry = _T(""); CString strLunarMarry = _T(""); // 1.计算生日前n天的公历和农历日期; COleDateTime dtToday = COleDateTime::GetCurrentTime(); COleDateTimeSpan Span(_ttoi(s_SMSInfo.msgDays1), 0, 0, 0); dtToday += Span; strSolarBirthday.Format(_T("-%02d-%02d"), dtToday.GetMonth(), dtToday.GetDay()); strLunarBirthday = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarBirthday.Delete(0, 4); // 2.计算出结婚当天的公历和农历日期; dtToday = COleDateTime::GetCurrentTime(); strSolarMarry.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarMarry = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); g_strClientFilters.Format(FILTERS_WCLIENT_CHECKAF, strSolarBirthday, strLunarBirthday, strSolarBirthday, strLunarBirthday, strSolarMarry, strLunarMarry); g_strClient2Filters.Format(FILTERS_WCLIENT2, strSolarBirthday, strLunarBirthday); g_strClient3Filters.Format(FILTERS_WCLIENT3_CHECKAF, strSolarBirthday, strLunarBirthday, strSolarBirthday, strLunarBirthday, strSolarMarry, strLunarMarry); } else if (s_SMSInfo.msgCheck2 == _T("1") && s_SMSInfo.msgCheck15 == _T("1")) { // 公历+农历结婚纪念日; CString strSolarWedding = _T(""); CString strLunarWedding = _T(""); // 公历+农历结婚当天; CString strSolarMarry = _T(""); CString strLunarMarry = _T(""); // 1.计算结婚纪念日前n天的公历和农历日期; COleDateTime dtToday = COleDateTime::GetCurrentTime(); COleDateTimeSpan Span(_ttoi(s_SMSInfo.msgDays2), 0, 0, 0); dtToday += Span; //strSolarWedding.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strSolarWedding.Format(_T("-%02d-%02d"), dtToday.GetMonth(), dtToday.GetDay()); strLunarWedding = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarWedding.Delete(0, 4); // 2.计算出结婚当天的公历和农历日期; dtToday = COleDateTime::GetCurrentTime(); strSolarMarry.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarMarry = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); g_strClientFilters.Format(FILTERS_WCLIENT_CHECKBF, strSolarWedding, strLunarWedding, strSolarMarry, strLunarMarry); g_strClient3Filters.Format(FILTERS_WCLIENT3_CHECKBF, strSolarWedding, strLunarWedding, strSolarMarry, strLunarMarry); } else if (s_SMSInfo.msgCheck1 == _T("1")) { // 公历+农历生日; CString strSolarBirthday = _T(""); CString strLunarBirthday = _T(""); // 1.计算生日前n天的公历和农历日期; COleDateTime dtToday = COleDateTime::GetCurrentTime(); COleDateTimeSpan Span(_ttoi(s_SMSInfo.msgDays1), 0, 0, 0); dtToday += Span; strSolarBirthday.Format(_T("-%02d-%02d"), dtToday.GetMonth(), dtToday.GetDay()); strLunarBirthday = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarBirthday.Delete(0, 4); g_strClientFilters.Format(FILTERS_WCLIENT_CHECKA, strSolarBirthday, strLunarBirthday, strSolarBirthday, strLunarBirthday); g_strClient2Filters.Format(FILTERS_WCLIENT2, strSolarBirthday, strLunarBirthday); g_strClient3Filters.Format(FILTERS_WCLIENT3_CHECKA, strSolarBirthday, strLunarBirthday, strSolarBirthday, strLunarBirthday); } else if (s_SMSInfo.msgCheck2 == _T("1")) { // 公历+农历结婚纪念日; CString strSolarWedding = _T(""); CString strLunarWedding = _T(""); // 1.计算结婚纪念日前n天的公历和农历日期; COleDateTime dtToday = COleDateTime::GetCurrentTime(); COleDateTimeSpan Span(_ttoi(s_SMSInfo.msgDays2), 0, 0, 0); dtToday += Span; strSolarWedding.Format(_T("-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarWedding = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarWedding.Delete(0, 4); g_strClientFilters.Format(FILTERS_WCLIENT_CHECKB, strSolarWedding, strLunarWedding); g_strClient3Filters.Format(FILTERS_WCLIENT3_CHECKB, strSolarWedding, strLunarWedding); } else if (s_SMSInfo.msgCheck15 == _T("1")) { // 公历+农历结婚当天; CString strSolarMarry = _T(""); CString strLunarMarry = _T(""); // 1.计算出结婚当天的公历和农历日期; COleDateTime dtToday = COleDateTime::GetCurrentTime(); strSolarMarry.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarMarry = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); g_strClientFilters.Format(FILTERS_WCLIENT_CHECKF, strSolarMarry, strLunarMarry); g_strClient3Filters.Format(FILTERS_WCLIENT3_CHECKF, strSolarMarry, strLunarMarry); } if (s_SMSInfo.hospitalmsgcheck1 == _T("1") && g_bSoftWareReg && m_vtSMSTypeOfChild.size()) { // 1.计算出医院跟踪系统的意向儿童出生满n天日期; COleDateTime dtToday; COleDateTimeSpan Span(0, 0, 0, 0); CString strSolarBorn = _T(""); CString strLunarBorn = _T(""); CString strHospitalClientFilters = _T(""); for (std::vector::iterator it = m_vtSMSTypeOfChild.begin(); it != m_vtSMSTypeOfChild.end(); it++) { dtToday = COleDateTime::GetCurrentTime(); //Span.SetDateTimeSpan(it->nDays, 0, 0, 0); Span.SetDateTimeSpan(it->nDays - 1, 0, 0, 0);// 不是满n天,而是第n天; dtToday -= Span; strSolarBorn.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strLunarBorn = GetLunarDate(dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); strHospitalClientFilters.Format(FILTERS_HOSPITALCLIENT_CHECK1, strSolarBorn, strLunarBorn); g_strHospitalClientFilters += strHospitalClientFilters + _T(" or "); } g_strHospitalClientFilters.TrimRight(_T(" or ")); g_strHospitalClientFilters += _T(" and birthdaytype='0'"); } // hospitalcheck2==1 and g_bSofeWareReg==true; if (s_SMSInfo.hospitalmsgcheck2 == _T("1") && g_bSoftWareReg && m_vtSMSTypeOfWedding.size()) { // 1.计算出医院跟踪系统的意向孕妇怀满n天日期; CString strSolarBorn = _T(""); int MaxDay = 0; for (std::vector::iterator it = m_vtSMSTypeOfWedding.begin(); it != m_vtSMSTypeOfWedding.end(); it++) { MaxDay = (MaxDay > it->nDays) ? MaxDay : it->nDays; } COleDateTime dtToday = COleDateTime::GetCurrentTime(); //COleDateTimeSpan Span(MaxDay, 0, 0, 0); COleDateTimeSpan Span(MaxDay - 1, 0, 0, 0);// 不是满n天,而是第n天; dtToday -= Span; strSolarBorn.Format(_T("%04d-%02d-%02d"), dtToday.GetYear(), dtToday.GetMonth(), dtToday.GetDay()); CString strFilters; strFilters.Format(_T("date1 > '%s' and birthdaytype='1'"), strSolarBorn); if (g_strHospitalClientFilters.IsEmpty() == FALSE) g_strHospitalClientFilters += _T(" or (") + strFilters + _T(")"); else g_strHospitalClientFilters = strFilters; } #if _DEBUG LOG4C_NO_FILENUM((LOG_NOTICE,"%s",g_strClientFilters)); LOG4C_NO_FILENUM((LOG_NOTICE,"%s",g_strClient2Filters)); LOG4C_NO_FILENUM((LOG_NOTICE,"%s",g_strClient3Filters)); LOG4C_NO_FILENUM((LOG_NOTICE,"%s",g_strHospitalClientFilters)); #endif return _T(""); } void CSMSHandle::UTF8ToWideChar(LPBYTE lpRespone, CString &strRespone) { // 从uft-8转到gb2312,再转到unicode; std::string str; strCoding::UTF_8ToGB2312(str, (char*)lpRespone, strlen((char*)lpRespone)); INT wLen = 0; wLen = MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0); WCHAR *ptRespone = new WCHAR[wLen]; memset(ptRespone, 0, wLen*sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, ptRespone, wLen); strRespone.Format(_T("%s"), ptRespone); if (ptRespone){ delete ptRespone; ptRespone = NULL; } } void CSMSHandle::UrlUTF8Decode(LPBYTE lpRespone, CString &strRespone) { // 从uft-8转到gb2312,再转到unicode; std::string str = strCoding::UrlUTF8Decode((LPSTR)lpRespone); INT wLen = 0; wLen = MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0); WCHAR *ptRespone = new WCHAR[wLen]; memset(ptRespone, 0, wLen*sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, ptRespone, wLen); strRespone.Format(_T("%s"), ptRespone); if (ptRespone){ delete ptRespone; ptRespone = NULL; } } /* INT CSMSHandle::AnalyzeSendStatus(LPBYTE lpRespone, ResponebySend &lRespone) { CStringW strRespone; UTF8ToWideChar(lpRespone, strRespone); LOG4C_NO_FILENUM((LOG_NOTICE,"服务端返回内容:%s",CW2A(strRespone))); INT nIndex = strRespone.Find(RETH); if ( nIndex == -1 ) { LOG4C_NO_FILENUM((LOG_NOTICE,"没有找到:\"\" 元素")); return -13; } strRespone = strRespone.Mid(0, nIndex); // 解析参数值; nIndex = strRespone.Find(SENDCOUNT); if ( nIndex == -1 ) { LOG4C_NO_FILENUM((LOG_NOTICE,"没有找到:\"SendCount\" 元素")); return -13; } lRespone.strSendStatus = strRespone.Left(nIndex - 1); strRespone.Delete(0, nIndex + wcslen(SENDCOUNT) + 1); nIndex = strRespone.Find(BALANCE); if ( nIndex == -1 ) { LOG4C_NO_FILENUM((LOG_NOTICE,"没有找到:\"Balance\" 元素")); return -13; } lRespone.strSendCount = strRespone.Left(nIndex - 1); strRespone.Delete(0, nIndex + wcslen(BALANCE) + 1); nIndex = strRespone.Find(ERPHONE); if ( nIndex == -1 ) { LOG4C_NO_FILENUM((LOG_NOTICE,"没有找到:\"ErrorPhone\" 元素")); return -13; } lRespone.strBalance = strRespone.Left(nIndex - 1); strRespone.Delete(0, nIndex + wcslen(ERPHONE) + 1); nIndex = strRespone.Find(SENDSID); if ( nIndex == -1 ) { LOG4C_NO_FILENUM((LOG_NOTICE,"没有找到:\"Sid\" 元素")); return -13; } lRespone.strErPhone = strRespone.Left(nIndex - 1); strRespone.Delete(0, nIndex + wcslen(SENDSID) + 1); lRespone.strSid = strRespone; return _ttoi(lRespone.strSendStatus); }*/ /* INT_PTR CSMSHandle::SendSMS(LPCTSTR lpStringToSend, CONST INT &nIndex, CONST INT &nGroup, LPCTSTR lpAutoId) { AutoThreadSection aSection(&s_critSection); static VecStParam vp; if (TRUE == m_httpGet.TransDataToServer(lpStringToSend, 150000, vp)) { static DWORD nReciveLen = 10240; static BYTE szReciveData[10240]; memset(szReciveData, 0, nReciveLen); #if _DEBUG LOG4C_NO_FILENUM((LOG_NOTICE,"提交内容:%s",CW2A(lpStringToSend))); #endif //if(m_httpGet.ReceiveData(szReciveData, nReciveLen) == FALSE) { LOG4C_NO_FILENUM((LOG_NOTICE,"发送短信时,接收服务器返回信息失败")); return 0L; } static ResponebySend lRespone; lRespone.strSendStatus = _T(""); lRespone.strSendCount = _T(""); lRespone.strErPhone = _T(""); lRespone.strSid = _T(""); INT nRet = AnalyzeSendStatus(szReciveData, lRespone); static CString strUpdate = _T(""); switch (nRet) { case 0: // 成功; { strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("1/1"), _T("OK"), _T("OK"), lpAutoId); CString strUpdate1; strUpdate1.Format(UPDATE_VERSION,lRespone.strBalance,lRespone.strSendCount); strUpdate += strUpdate1; LOG4C_NO_FILENUM((LOG_NOTICE,"执行SQL:%s",CW2A(strUpdate))); } break; case -1: // 当前账号余额不足; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("当前账号余额不足"), _T("0"), _T("0"), lpAutoId); break; case -2: // 当前账号错误; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("当前账号错误"), _T("0"), _T("0"), lpAutoId); break; case -3: // 当前密码错误; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("当前密码错误"), _T("0"), _T("0"), lpAutoId); break; case -4: // 参数不够或参数内容的类型错误; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("参数不够或参数内容的类型错误"), _T("0"), _T("OK"), lpAutoId); break; case -5: // 手机号码格式不对; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("手机号码格式不对"), _T("0"), _T("OK"), lpAutoId); break; case -6: // 短信内容编码不对; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("短信内容编码不对"), _T("0"), _T("OK"), lpAutoId); break; case -7: // 短信内容含有敏感字符; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("短信内容含有敏感字符"), _T("0"), _T("OK"), lpAutoId); break; case -8: // 无接收数据; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("无接收数据"), _T("0"), _T("OK"), lpAutoId); break; case -9: // 系统维护中; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("系统维护中"), _T("0"), _T("0"), lpAutoId); break; case -10: // 手机号码数量超长_每次最多100个; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("手机号码数量超长_每次最多100个"), _T("0"), _T("OK"), lpAutoId); break; case -11: // 短信内容超长_每条390个字符; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("短信内容超长_每条390个字符"), _T("0"), _T("OK"), lpAutoId); break; case -12: // 其它错误; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("其它错误"), _T("0"), _T("0"), lpAutoId); break; case -13: // 服务器错误; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("服务器错误"), _T("0"), _T("0"), lpAutoId); break; case -14: // 域名不正确;//短信接口不会有该错误返回; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("域名不正确"), _T("0"), _T("OK"), lpAutoId); break; case -15: // 域名所在服务器未提交过IP;//短信接口不会有该错误返回; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("域名所在服务器未提交过IP"), _T("0"), _T("OK"), lpAutoId); break; case -16: // 硬件码不能小于5个字符;//短信接口不会有该错误返回; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("硬件码不能小于5个字符"), _T("0"), _T("OK"), lpAutoId); break; case -17: // 服务器连接失败; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("服务器连接失败"), _T("0"), _T("0"), lpAutoId); break; case -18: // 硬件码不能为空;//短信接口不会有该错误返回; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("硬件码不能为空"), _T("0"), _T("OK"), lpAutoId); break; case -19: // 查询的短信记录不存在或已被删除; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("查询的短信记录不存在或已被删除"), _T("0"), _T("OK"), lpAutoId); break; case -20: // 短信超时过期忽略发送; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("短信超时过期忽略发送"), _T("0"), _T("OK"), lpAutoId); break; case 100: // 服务器授理并等待发送中;并将返回的Sid更新到status中保存; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("服务器授理并等待发送中"), lRespone.strSid, _T("OK"), lpAutoId); break; default: strUpdate = _T(""); break; } // update数据库; if (CDBInterface::GetInstance()->Execute(strUpdate) == FALSE) { // 记录失败,需要相应的补救处理,将更新内容写入SQLite数据库中或其他文本中记录; // 但同时会加大处理难度,暂时不处理这种情况。 // 可能会多发一至多条短信; } strUpdate = _T(""); return 1L; } else { LOG4C_NO_FILENUM((LOG_NOTICE,"发送短信时,连接服务器失败")); } return 0L; } */ INT_PTR CSMSHandle::ReadySendSMS(CString& strPhones, CString& strContent, CString& strTime, CString& strAutoId) { // 判断手机串是否超过100个,超过分组发送; static INT_PTR nLen = 0; static INT nPos = 0; static INT nCount = 0; static CString strSend = _T(""); static CString strTempTime = _T(""); static CString strTempPhone = _T(""); nLen = 0; nPos = 0; nCount = 0; strSend = _T(""); strTempTime = _T(""); strTempPhone = _T(""); TCHAR szErrorMsg[MAX_PATH] = {0}; strPhones.TrimLeft("\n"); strPhones.TrimLeft("\r"); strPhones.TrimRight("\n"); strPhones.TrimRight("\r"); nLen = (strPhones.GetLength() + 1) / 12; strTempTime.Format(_T("%s-%s-%s %s:%s:%s"), strTime.Left(4), strTime.Mid(4, 2), strTime.Mid(6, 2), strTime.Mid(8, 2), strTime.Mid(10, 2), strTime.Mid(12, 2)); LOG4C_NO_FILENUM((LOG_NOTICE,"%s,%s", strPhones, strContent)) int nIndex = 0; do { nPos = strPhones.Find(','); if (nPos != -1) { strTempPhone = strPhones.Left(nPos); strPhones.Delete(0, nPos + 1); strTempPhone.TrimLeft("\n"); strTempPhone.TrimLeft("\r"); strTempPhone.TrimRight("\n"); strTempPhone.TrimRight("\r"); if (!strTempPhone.IsEmpty()) { if ( 0 == SMSProcess::SMS_SENDMSG((LPCTSTR)strTempPhone, (LPCTSTR)strContent, szErrorMsg) ) nCount++; else { LOG4C_NO_FILENUM((LOG_NOTICE,"发送短信失败:%s,%s", strTempPhone, strContent)); } } } else { if (!strPhones.IsEmpty()) { if ( 0 == SMSProcess::SMS_SENDMSG((LPCTSTR)strPhones, (LPCTSTR)strContent,szErrorMsg) ) { nCount++; } else { LOG4C_NO_FILENUM((LOG_NOTICE,"发送短信失败:%s,%s", strPhones, strContent)); } } break; } } while (1); static CString strUpdate = _T(""); if ( nCount > 0 ) { strSend.Format(_T("%d/%d"),nCount, nLen); strUpdate.Format(UPDATESENDREG, strSend, _T("1/1"), _T("OK"), _T("OK"), strAutoId); // update数据库; if (CDBInterface::GetInstance()->Execute(strUpdate) == FALSE) { // 记录失败,需要相应的补救处理,将更新内容写入SQLite数据库中或其他文本中记录; // 但同时会加大处理难度,暂时不处理这种情况。 // 可能会多发一至多条短信; } strUpdate = _T(""); } return 0L; } /* VOID CSMSHandle::QuerySMSStatus(LPCTSTR lpSid, LPCTSTR lpAutoId) { AutoThreadSection aSection(&s_critSection); static VecStParam vp; static CString strQuerySMS; strQuerySMS = _T(""); strQuerySMS.Format(QUERYSEND, g_szSMSServer, g_dwTCPSMSPort,s_SMSInfo.msgaccount, s_SMSInfo.msgpassword, lpSid, CTime::GetCurrentTime().Format(_T("%Y%m%d%H%M%S"))); #if _DEBUG LOG4C_NO_FILENUM((LOG_NOTICE,"提交查询:%s",CW2A(strQuerySMS))); #endif if (TRUE == m_httpGet.TransDataToServer((LPCTSTR)strQuerySMS, 10000, vp)) { DWORD nReciveLen = 10240; BYTE szReciveData[10240]; memset(szReciveData, 0, nReciveLen); if(m_httpGet.ReceiveData(szReciveData, nReciveLen) == FALSE) { LOG4C_NO_FILENUM((LOG_NOTICE,"查询短信时,接收服务器返回失败")); return; } static CStringW strRespone = _T(""); UTF8ToWideChar(szReciveData, strRespone); LOG4C_NO_FILENUM((LOG_NOTICE,"查询时返回:%s",CW2A(strRespone))); static ResponebySend lRespone; lRespone.strSendStatus = _T(""); lRespone.strSendCount = _T(""); lRespone.strErPhone = _T(""); lRespone.strSid = _T(""); static INT nPos = 0; nPos = strRespone.Find(RETH); strRespone.Delete(0, nPos + wcslen(RETH)); nPos = strRespone.Find(RETE); strRespone = strRespone.Mid(0, nPos); // 解析参数值; nPos = strRespone.Find(SENDCOUNT); lRespone.strSendStatus = strRespone.Left(nPos - 1); strRespone.Delete(0, nPos + wcslen(SENDCOUNT) + 1); nPos = strRespone.Find(SENDSID); lRespone.strSendCount = strRespone.Left(nPos - 1); strRespone.Delete(0, nPos + wcslen(SENDSID) + 1); lRespone.strSid = strRespone; nPos = 0; strRespone = _T(""); static CString strUpdate = _T(""); switch (_ttoi(lRespone.strSendStatus)) { case 0: // 成功; { strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("1/1"), _T("OK"), _T("OK"), lpAutoId); CString strUpdate1; strUpdate1.Format(UPDATE_VERSION,lRespone.strBalance,lRespone.strSendCount); strUpdate += strUpdate1; } break; case -1: // 当前账号余额不足; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("当前账号余额不足"), _T("0"), _T("0"), lpAutoId); break; case -2: // 当前账号错误; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("当前账号错误"), _T("0"), _T("0"), lpAutoId); break; case -3: // 当前密码错误; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("当前密码错误"), _T("0"), _T("0"), lpAutoId); break; case -4: // 参数不够或参数内容的类型错误; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("参数不够或参数内容的类型错误"), _T("0"), _T("OK"), lpAutoId); break; case -5: // 手机号码格式不对; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("手机号码格式不对"), _T("0"), _T("OK"), lpAutoId); break; case -6: // 短信内容编码不对; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("短信内容编码不对"), _T("0"), _T("OK"), lpAutoId); break; case -7: // 短信内容含有敏感字符; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("短信内容含有敏感字符"), _T("0"), _T("OK"), lpAutoId); break; case -8: // 无接收数据; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("无接收数据"), _T("0"), _T("OK"), lpAutoId); break; case -9: // 系统维护中; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("系统维护中"), _T("0"), _T("0"), lpAutoId); break; case -10: // 手机号码数量超长_每次最多100个; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("手机号码数量超长_每次最多100个"), _T("0"), _T("OK"), lpAutoId); break; case -11: // 短信内容超长_每条390个字符; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("短信内容超长_每条390个字符"), _T("0"), _T("OK"), lpAutoId); break; case -12: // 其它错误; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("其它错误"), _T("0"), _T("OK"), lpAutoId); break; case -13: // 服务器错误; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("服务器错误"), _T("0"), _T("0"), lpAutoId); break; case -14: // 域名不正确;//短信接口不会有该错误返回; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("域名不正确"), _T("0"), _T("OK"), lpAutoId); break; case -15: // 域名所在服务器未提交过IP;//短信接口不会有该错误返回; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("域名所在服务器未提交过IP"), _T("0"), _T("OK"), lpAutoId); break; case -16: // 硬件码不能小于5个字符;//短信接口不会有该错误返回; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("硬件码不能小于5个字符"), _T("0"), _T("OK"), lpAutoId); break; case -17: // 服务器连接失败; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("服务器连接失败"), _T("0"), _T("0"), lpAutoId); break; case -18: // 硬件码不能为空;//短信接口不会有该错误返回; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("硬件码不能为空"), _T("0"), _T("OK"), lpAutoId); break; case -19: // 查询的短信记录不存在或已被删除; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("查询的短信记录不存在或已被删除"), _T("0"), _T("OK"), lpAutoId); break; case -20: // 短信超时过期忽略发送; strUpdate.Format(UPDATESENDREG, lRespone.strSendCount, _T("短信超时过期忽略发送"), _T("0"), _T("OK"), lpAutoId); break; case 100: break; default: strUpdate = _T(""); break; } // update数据库; if (CDBInterface::GetInstance()->Execute(strUpdate) == FALSE) { // 记录失败,需要相应的补救处理,将更新内容写入SQLite数据库中或其他文本中记录; // 但同时会加大处理难度,暂时不处理这种情况。 // 可能会多发一至多条短信; LOG4C_NO_FILENUM((LOG_NOTICE,"查询时,写数据库失败,请检查数据库有效性")); } strUpdate = _T(""); } else { LOG4C_NO_FILENUM((LOG_NOTICE,"查询时,连接服务器失败")); } } */ DWORD CSMSHandle::SendSMSThread(LPVOID lpParam) // 发送短信; { CSMSHandle *pInstance = (CSMSHandle*)lpParam; INT_PTR i = 0; INT_PTR nSize = 0; CArray sArrayOfSMS; do { sArrayOfSMS.RemoveAll(); if (CDBInterface::GetInstance()->IsOpen() == FALSE) continue; CDBInterface::GetInstance()->GetSMSInfo(s_SMSInfo); // 未发送成功的记录集,且未超过一天的; static CString strFilters = _T(""); COleDateTime dtm = COleDateTime::GetCurrentTime(); static COleDateTimeSpan Span(1,0,0,0); dtm -= Span; strFilters.Format(_T("[issended]<>'OK' and [timestamp] > '%04d%02d%02d%02d%02d%02d'"),dtm.GetYear(),dtm.GetMonth(),dtm.GetDay(),dtm.GetHour(),dtm.GetMinute(),dtm.GetSecond()); CDBInterface::GetInstance()->GetTableSendreg(sArrayOfSMS, strFilters); strFilters = _T(""); nSize = sArrayOfSMS.GetSize(); for (i = 0; i < nSize; i++) { #ifndef NONE pInstance->ReadySendSMS(sArrayOfSMS.ElementAt(i).ElementAt(0), sArrayOfSMS.ElementAt(i).ElementAt(1), sArrayOfSMS.ElementAt(i).ElementAt(2), sArrayOfSMS.ElementAt(i).ElementAt(3)); #endif Sleep(10); } /*Sleep(0); // 查询等待发送的记录; sArrayOfSMS.RemoveAll(); CDBInterface::GetInstance()->GetTableSendreg(sArrayOfSMS, _T("[status]<>'OK' and [status]<>'0'")); nSize = sArrayOfSMS.GetSize(); for (i = 0; i < nSize; i++) { //pInstance->QuerySMSStatus(sArrayOfSMS.ElementAt(i).ElementAt(4), sArrayOfSMS.ElementAt(i).ElementAt(3)); //Sleep(0); }*/ #if _DEBUG } while (WaitForSingleObject(pInstance->m_hSendEvent, 500L) == WAIT_TIMEOUT); #else } while (WaitForSingleObject(pInstance->m_hSendEvent, 50000L) == WAIT_TIMEOUT); #endif return 0L; } DWORD CSMSHandle::GenerateSMSThread(LPVOID lpParam) // 生成短信; { CSMSHandle *pInstance = (CSMSHandle*)lpParam; CArray ArrayOfDindanClient; CArray ArrayOfClient2; CArray ArrayOfClient3; CArray ArrayOfHospitalClient; CArray ArrayOfChildMsg; //do while(!m_bGenerateEndof) { WaitForSingleObject(pInstance->m_hWaitableTime,INFINITE); ArrayOfClient2.RemoveAll(); ArrayOfClient3.RemoveAll(); ArrayOfChildMsg.RemoveAll(); ArrayOfDindanClient.RemoveAll(); ArrayOfHospitalClient.RemoveAll(); CDBInterface::GetInstance()->GetSMSInfo(s_SMSInfo); CDBInterface::GetInstance()->GetSMSType(pInstance->m_vtSMSTypeOfChild, _ttoi(s_SMSInfo.hospitalmsgcheck1), pInstance->m_vtSMSTypeOfWedding, _ttoi(s_SMSInfo.hospitalmsgcheck2)); if (CHILD_VERSION) { pInstance->CalculateFilter_Child(); } else { pInstance->CalculateFilter_Wedding(); } // 获取数据信息; if (CDBInterface::GetInstance()->GetDBViewDindanclientRecord(ArrayOfDindanClient, g_strClientFilters) == FALSE) continue; if (CDBInterface::GetInstance()->GetTableClient2(ArrayOfClient2, g_strClient2Filters) == FALSE) continue; if (CDBInterface::GetInstance()->GetTableClient3(ArrayOfClient3, g_strClient3Filters) == FALSE) continue; if (CHILD_VERSION) { CDBInterface::GetInstance()->GetTableChildmsg(ArrayOfChildMsg); // 没有注册医院跟踪系统时,也会用到; CHandleClient2(&ArrayOfClient2, &ArrayOfChildMsg); CHandleClient3(&ArrayOfClient3, &ArrayOfChildMsg); CHandleDindanClient(&ArrayOfDindanClient, &ArrayOfChildMsg); if (g_bSoftWareReg) { CDBInterface::GetInstance()->GetTableHospitalclient(ArrayOfHospitalClient, g_strHospitalClientFilters); CHandleHospitalClient(&ArrayOfHospitalClient, &ArrayOfChildMsg); } } else { if (g_bSoftWareReg) { CDBInterface::GetInstance()->GetTableChildmsg(ArrayOfChildMsg); CDBInterface::GetInstance()->GetTableHospitalclient(ArrayOfHospitalClient, g_strHospitalClientFilters); WHandleClient2(&ArrayOfClient2, &ArrayOfChildMsg); WHandleClient3(&ArrayOfClient3, &ArrayOfChildMsg); WHandleDindanClient(&ArrayOfDindanClient, &ArrayOfChildMsg); WHandleHospitalClient(&ArrayOfHospitalClient, &ArrayOfChildMsg); } else { WHandleClient2(&ArrayOfClient2); WHandleClient3(&ArrayOfClient3); WHandleDindanClient(&ArrayOfDindanClient); } } }// while (WaitForSingleObject(pInstance->m_hGenerateEvent, 60000L) == WAIT_TIMEOUT); return 0L; } void CSMSHandle::GenerateToSendreg( IN CONST CString &strName, IN CONST CString &strSex, IN CONST CString &strPhone, IN CString &strContent, IN CONST CString &strMsgtype) { CString strFilter; // 同一手机同一天发两种类型的短信内容比较少,暂时可以不判断。 // 但需要保存该msgtype字段,客户端仍要处理这个字段。 strFilter.Format(_T("[phones]='%s' and [isautosend]='1' and [msgtype] = '%s'"), strPhone, strMsgtype ); if (CDBInterface::GetInstance()->GetSelectCount(_T("sendreg"), strFilter) != 0) return; int nPos = 0; if (CHILD_VERSION) { nPos = strContent.Find(_T("xxx小朋友")); if (nPos != -1) strContent.Replace(_T("xxx小朋友"), strName + _T("小朋友")); } else { nPos = strContent.Find(_T("xxx先生/女士")); if (nPos != -1) { if (strSex == _T("男")) strContent.Replace(_T("xxx先生/女士"), strName + _T("先生")); else if (strSex == _T("女")) strContent.Replace(_T("xxx先生/女士"), strName + _T("女士")); } } #if 0 // 如果模板里没有xxx小朋友,不在短信前加上宝宝姓名; if (nPos == -1) strContent = strName + strContent; #endif //if (-1 != CheckPhoneType(strPhone) && !CheckBadWords(strContent) && !strName.IsEmpty()) if (-1 != CheckPhoneType(strPhone) && !CheckBadWords(strContent)) { strFilter.Format(INSERTSENDREG, strMsgtype, strPhone, strContent, CTime::GetCurrentTime().Format("%Y%m%d%H%M%S"), GetTextMsgCount(strContent), _T("0"), _T("0"), _T("1"), _T("系统自动发送")); CDBInterface::GetInstance()->Execute(strFilter); } } BOOL CSMSHandle::IsValidDate(CONST CString &strDate, BOOL bThisyear /*=TREU*/) { if (strDate.IsEmpty()) return FALSE; // 判断日期合法性; static int nYear = 0; static int nMonth = 0; static int nDay = 0; nYear = nMonth = nDay = 0; if (bThisyear) nYear = CTime::GetCurrentTime().GetYear(); else nYear = _ttoi(strDate.Left(4));; nMonth = _ttoi(strDate.Mid(5, 2)); nDay = _ttoi(strDate.Mid(8, 2)); CONST static INT nNormalMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; CONST static INT nLeapMonth[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; if ((nDay <= 0) || (nDay > 31) || (nMonth <= 0) || (nMonth > 12)) return FALSE; if ((nYear % 400 == 0) || (nYear % 4 == 0 && nYear % 100 != 0)) { if (nDay > nLeapMonth[nMonth - 1]) return FALSE; } else { if (nDay > nNormalMonth[nMonth - 1]) return FALSE; } return TRUE; } BOOL CSMSHandle::VerifyCheck1(CONST CString &strMsgtype, CONST CString &strName, CONST CString &strSex, CONST CString &strPhone, CString strBirthday, CONST CString &strCheck) { // 1.判断日期有无效; if (FALSE == IsValidDate(strBirthday)) return FALSE; // 2.将(农历)出生日期转为今年公历生日; if (strCheck == _T("1")) strBirthday = LuanrToSolarDate(CTime::GetCurrentTime().GetYear(), _ttoi(strBirthday.Mid(5, 2)), _ttoi(strBirthday.Mid(8, 2))); else strBirthday.Format(_T("%04d-%02d-%02d"), CTime::GetCurrentTime().GetYear(), _ttoi(strBirthday.Mid(5, 2)), _ttoi(strBirthday.Mid(8, 2))); if ( strBirthday == _T("1900-01-01")) return FALSE; static CString strToday; // 今天; strToday = CTime::GetCurrentTime().Format("%Y-%m-%d"); static CString strLastFewday; // 今年生日-msgdays1; COleDateTimeSpan Span(_ttoi(s_SMSInfo.msgDays1), 0, 0, 0); // 3.计算出离今年生日 前msgdays1 天的日期; COleDateTime Solar; Solar.SetDateTime(_ttoi(strBirthday.Left(4)), _ttoi(strBirthday.Mid(5, 2)), _ttoi(strBirthday.Mid(8, 2)), 0, 0, 0); Solar -= Span; strLastFewday.Format(_T("%04d-%02d-%02d"), Solar.GetYear(), Solar.GetMonth(), Solar.GetDay()); // 4.判断是否到达发送时间;今年生日 > 今日 >= 今年生日-msgdays1 CString strContent = s_SMSInfo.msgContent1; if (strToday >= strLastFewday && strToday <= strBirthday) GenerateToSendreg(strName, strSex, strPhone, strContent, strMsgtype); return TRUE; } BOOL CSMSHandle::VerifyCheck2(CONST CString &strMsgtype, CONST CString &strName, CONST CString &strSex, CONST CString &strPhone, CString strBirthday, CONST CString &strCheck) { static CString strLastFewday; if (CHILD_VERSION) // 宝宝出生百天前n天的短信; { // 1.判断日期有无效; if (FALSE == IsValidDate(strBirthday, FALSE)) return FALSE; // 2.将宝宝农历的出生日期转为公历日期; if (strCheck == _T("1")) strBirthday = LuanrToSolarDate(_ttoi(strBirthday.Left(4)), _ttoi(strBirthday.Mid(5, 2)), _ttoi(strBirthday.Mid(8, 2))); if ( strBirthday == _T("1900-01-01")) return FALSE; // 3.计算宝宝出生百天后的日期; COleDateTime Solar; COleDateTimeSpan Span(100, 0, 0, 0); Solar.SetDateTime(_ttoi(strBirthday.Left(4)), _ttoi(strBirthday.Mid(5, 2)), _ttoi(strBirthday.Mid(8, 2)), 0, 0, 0); Solar += Span; strBirthday.Format(_T("%04d-%02d-%02d"), Solar.GetYear(), Solar.GetMonth(), Solar.GetDay()); // 4.计算宝宝出生百天后的前n天日期strLastFewday; Span.SetDateTimeSpan(_ttoi(s_SMSInfo.msgDays2), 0, 0, 0); Solar.SetDateTime(_ttoi(strBirthday.Left(4)), _ttoi(strBirthday.Mid(5, 2)), _ttoi(strBirthday.Mid(8, 2)), 0, 0, 0); Solar -= Span; strLastFewday.Format(_T("%04d-%02d-%02d"), Solar.GetYear(), Solar.GetMonth(), Solar.GetDay()); } else // 结婚纪念日前n天的短信; { // 1.判断日期有无效; if (FALSE == IsValidDate(strBirthday)) return FALSE; // 2.如果是今年结婚的,退出; CString strTemp = strBirthday; if (strCheck == _T("1")) strTemp = LuanrToSolarDate(_ttoi(strBirthday.Left(4)), _ttoi(strBirthday.Mid(5, 2)), _ttoi(strBirthday.Mid(8, 2))); if ( _ttoi(strTemp.Left(4)) >= CTime::GetCurrentTime().GetYear()) return FALSE; // 3.将纪念日转为今年纪念日期; if (strCheck == _T("1")) strBirthday = LuanrToSolarDate(CTime::GetCurrentTime().GetYear(), _ttoi(strBirthday.Mid(5, 2)), _ttoi(strBirthday.Mid(8, 2))); else strBirthday.Format(_T("%04d-%02d-%02d"), CTime::GetCurrentTime().GetYear(), _ttoi(strBirthday.Mid(5, 2)), _ttoi(strBirthday.Mid(8, 2))); if ( strBirthday == _T("1900-01-01")) return FALSE; // 4.计算纪念日前n天的日期; COleDateTime Solar; COleDateTimeSpan Span(_ttoi(s_SMSInfo.msgDays2), 0, 0, 0); Solar.SetDateTime(_ttoi(strBirthday.Left(4)), _ttoi(strBirthday.Mid(5, 2)), _ttoi(strBirthday.Mid(8, 2)), 0, 0, 0); Solar -= Span; strLastFewday.Format(_T("%04d-%02d-%02d"), Solar.GetYear(), Solar.GetMonth(), Solar.GetDay()); } static CString strToday; // 今天; strToday = CTime::GetCurrentTime().Format("%Y-%m-%d"); // end.判断是否到达发送时间;百天或纪念日 > 今日 >= 今年生日-msgdays2 CString strContent = s_SMSInfo.msgContent2; if (strToday >= strLastFewday && strToday <= strBirthday) GenerateToSendreg(strName, strSex, strPhone, strContent, strMsgtype); return TRUE; } BOOL CSMSHandle::VerifyCheck15(CONST CString &strMsgtype, CONST CString &strName, CONST CString &strSex, CONST CString &strPhone, CString strWiddingDay, CONST CString &strCheck) { // 1.判断日期有效性; if (FALSE == IsValidDate(strWiddingDay, FALSE)) return FALSE; static CString strToday; // 今天; strToday = CTime::GetCurrentTime().Format("%Y-%m-%d"); // 2.将结婚日期转为公历; if (strCheck == _T("1")) strWiddingDay = LuanrToSolarDate(_ttoi(strWiddingDay.Left(4)), _ttoi(strWiddingDay.Mid(5, 2)), _ttoi(strWiddingDay.Mid(8, 2))); if ( strWiddingDay == _T("1900-01-01")) return FALSE; // 3.判断是否到达发送时间;结婚日期==今天; CString strContent = s_SMSInfo.msgContent15; if (strToday == strWiddingDay) GenerateToSendreg(strName, strSex, strPhone, strContent, strMsgtype); return TRUE; } BOOL CSMSHandle::VerifyHospitalCheck1(CONST CString &strMsgtype, CONST CString &strName, CONST CString &strDays, CONST CString &strPhone, CString strContent, CString strBirthday, CONST CString &strCheck) { // 1.判断宝宝出生日期的有效性;; if (FALSE == IsValidDate(strBirthday, FALSE)) return FALSE; // 2.将出生日期转为公历; if (strCheck == _T("1")) strBirthday = LuanrToSolarDate(_ttoi(strBirthday.Left(4)), _ttoi(strBirthday.Mid(5, 2)), _ttoi(strBirthday.Mid(8, 2))); if ( strBirthday == _T("1900-01-01")) return FALSE; static CString strToday; // 今天; strToday = CTime::GetCurrentTime().Format("%Y-%m-%d"); // 3.计算出"出生满n天"的日期; COleDateTime Solar; //COleDateTimeSpan Span(_ttoi(strDays), 0, 0, 0); // 2015.03.27 满n天= n天后; COleDateTimeSpan Span(_ttoi(strDays) - 1, 0, 0, 0); // 2015.03.27 满n天= 歪一下意思为第n天; Solar.SetDateTime(_ttoi(strBirthday.Left(4)), _ttoi(strBirthday.Mid(5, 2)), _ttoi(strBirthday.Mid(8, 2)), 0, 0, 0); Solar += Span; strBirthday.Format(_T("%04d-%02d-%02d"), Solar.GetYear(), Solar.GetMonth(), Solar.GetDay()); // 4.判断是否到达发送时间;今日 == "出生满n天"的日期 if (strToday == strBirthday) GenerateToSendreg(strName, _T(""), strPhone, strContent, strMsgtype); return TRUE; } BOOL CSMSHandle::VerifyHospitalCheck2(CONST CString &strMsgtype, CONST CString &strName, CONST CString &strDays, CONST CString &strPhone, CString strContent, CString strOrderDate, CString strPregnancyDate) { // 1.判断来单日期的有效性; if (FALSE == IsValidDate(strOrderDate, FALSE)) return FALSE; static CString strToday; // 今天; strToday = CTime::GetCurrentTime().Format("%Y-%m-%d"); // 2.计算出孕妇的怀孕日期; 怀孕日期 = 来单日期 - 已怀孕天数; COleDateTime Solar; COleDateTimeSpan Span(_ttoi(strPregnancyDate), 0, 0, 0); Solar.SetDateTime(_ttoi(strOrderDate.Left(4)), _ttoi(strOrderDate.Mid(5, 2)), _ttoi(strOrderDate.Mid(8, 2)), 0, 0, 0); Solar -= Span; strPregnancyDate.Format(_T("%04d-%02d-%02d"), Solar.GetYear(), Solar.GetMonth(), Solar.GetDay()); // 3.计算出怀孕满n天的日期; 怀满n天的日期 = 怀孕日期+n天; Span.SetDateTimeSpan(_ttoi(strDays), 0, 0, 0); Solar.SetDateTime(_ttoi(strPregnancyDate.Left(4)), _ttoi(strPregnancyDate.Mid(5, 2)), _ttoi(strPregnancyDate.Mid(8, 2)), 0, 0, 0); Solar += Span; strPregnancyDate.Format(_T("%04d-%02d-%02d"), Solar.GetYear(), Solar.GetMonth(), Solar.GetDay()); // 4.判断是否到达发送时间;今日 == "怀孕满n天"的日期 if (strToday == strPregnancyDate) GenerateToSendreg(strName, _T(""), strPhone, strContent, strMsgtype); return TRUE; } // 意向客户表; VOID CSMSHandle::CHandleClient2(CArray *pArrayOfClien2, CArray *pArrayOfChildMsg) { // 儿童版本:生日前n天、百天前n天、满x天; INT_PTR nSize = pArrayOfClien2->GetSize(); for (INT_PTR i = 0; i < nSize; i++) { CStringArray &strArray = pArrayOfClien2->ElementAt(i); // 生日前n天; if (s_SMSInfo.msgCheck1 == _T("1")) // VerifyCheck1(姓名,性别,手机,生日,是否农历); VerifyCheck1(_T("1"), strArray.ElementAt(1), strArray.ElementAt(2), strArray.ElementAt(3), strArray.ElementAt(4), strArray.ElementAt(6)); // 百天前n天; if (s_SMSInfo.msgCheck2 == _T("1")) // VerifyCheck2(姓名,性别,手机,生日,是否农历); VerifyCheck2(_T("2"), strArray.ElementAt(1), strArray.ElementAt(2), strArray.ElementAt(3), strArray.ElementAt(4), strArray.ElementAt(6)); #if JEFF_TEST_OFF // 儿童满x天; if (s_SMSInfo.hospitalmsgcheck1 == _T("1") && g_bSoftWareReg) { if (pArrayOfChildMsg == NULL) continue; INT_PTR nSize1 = pArrayOfChildMsg->GetSize(); for (INT_PTR j = 0; j < nSize1; j++) { CStringArray &saChildMsg = pArrayOfChildMsg->ElementAt(j); // 是否自动发送 + 是否是儿童短信(0,1为儿童, 2为孕妇); if (saChildMsg.ElementAt(0) == _T("0") || saChildMsg.ElementAt(3) == _T("2")) continue; CString strMsgType = _T(""); strMsgType.Format(_T("%d"), 10000 + _ttoi(saChildMsg.ElementAt(1))); VerifyHospitalCheck1( strMsgType, strArray.ElementAt(1), // 宝宝姓名; saChildMsg.ElementAt(1), // 满n天; strArray.ElementAt(3), // 家长手机; saChildMsg.ElementAt(2), // 短信模板; strArray.ElementAt(4), // 宝宝生日; strArray.ElementAt(6) // 生日是否农历; ); } } #endif #if JEFF_TEST_ON // 儿童满x天; if (pArrayOfChildMsg && pArrayOfChildMsg->GetSize()) { if (pArrayOfChildMsg == NULL) continue; INT_PTR nSize1 = pArrayOfChildMsg->GetSize(); for (INT_PTR j = 0; j < nSize1; j++) { CStringArray &saChildMsg = pArrayOfChildMsg->ElementAt(j); // 是否自动发送 + 是否是儿童短信(0); if (saChildMsg.ElementAt(0) == _T("1") && saChildMsg.ElementAt(3) == _T("0")) { CString strMsgType = _T(""); strMsgType.Format(_T("%d"), 10000 + _ttoi(saChildMsg.ElementAt(1))); VerifyHospitalCheck1( strMsgType, strArray.ElementAt(1), // 宝宝姓名; saChildMsg.ElementAt(1), // 满n天; strArray.ElementAt(3), // 家长手机; saChildMsg.ElementAt(2), // 短信模板; strArray.ElementAt(4), // 宝宝生日; strArray.ElementAt(6) // 生日是否农历; ); } } } #endif Sleep(0); } } // 老客户表; VOID CSMSHandle::CHandleClient3(CArray *pArrayOfClien3, CArray *pArrayOfChildMsg) { // 儿童版本:生日前n天、百天前n天、满x天; INT_PTR nSize = pArrayOfClien3->GetSize(); for (INT_PTR i = 0; i < nSize; i++) { CStringArray &strArray = pArrayOfClien3->ElementAt(i); // 生日前n天; if (s_SMSInfo.msgCheck1 == _T("1")) // VerifyCheck1(姓名,性别,手机,生日,是否农历); VerifyCheck1(_T("1"), strArray.ElementAt(2), _T(""), strArray.ElementAt(4), strArray.ElementAt(5), strArray.ElementAt(8)); // 百天前n天 或 纪念日前n天; if (s_SMSInfo.msgCheck2 == _T("1")) // VerifyCheck2(姓名,性别,手机,生日,是否农历); VerifyCheck2(_T("2"), strArray.ElementAt(2), _T(""), strArray.ElementAt(4), strArray.ElementAt(5), strArray.ElementAt(8)); #if JEFF_TEST_OFF // 儿童满x天; if (s_SMSInfo.hospitalmsgcheck1 == _T("1") && g_bSoftWareReg) { if (pArrayOfChildMsg == NULL) continue; INT_PTR nSize1 = pArrayOfChildMsg->GetSize(); for (INT_PTR j = 0; j < nSize1; j++) { CStringArray &saChilMsg = pArrayOfChildMsg->ElementAt(j); // 是否自动发送 + 是否是儿童短信(0,1为儿童, 2为孕妇); if (saChilMsg.ElementAt(0) == _T("0") || saChilMsg.ElementAt(3) == _T("2")) continue; CString strMsgType = _T(""); strMsgType.Format(_T("%d"), 10000 + _ttoi(saChilMsg.ElementAt(1))); VerifyHospitalCheck1( strMsgType, strArray.ElementAt(2), // 宝宝姓名; saChilMsg.ElementAt(1), // 满n天; strArray.ElementAt(4), // 家长手机; saChilMsg.ElementAt(2), // 短信模板; strArray.ElementAt(5), // 宝宝生日; strArray.ElementAt(8) // 生日是否农历; ); } } #endif #if JEFF_TEST_ON // 儿童满x天; if (pArrayOfChildMsg && pArrayOfChildMsg->GetSize()) { INT_PTR nSize1 = pArrayOfChildMsg->GetSize(); for (INT_PTR j = 0; j < nSize1; j++) { CStringArray &saChilMsg = pArrayOfChildMsg->ElementAt(j); // 是否自动发送 + 是否是儿童短信(0,1为儿童, 2为孕妇); if (saChilMsg.ElementAt(0) == _T("1") && saChilMsg.ElementAt(3) == _T("0")) { CString strMsgType = _T(""); strMsgType.Format(_T("%d"), 10000 + _ttoi(saChilMsg.ElementAt(1))); VerifyHospitalCheck1( strMsgType, strArray.ElementAt(2), // 宝宝姓名; saChilMsg.ElementAt(1), // 满n天; strArray.ElementAt(4), // 家长手机; saChilMsg.ElementAt(2), // 短信模板; strArray.ElementAt(5), // 宝宝生日; strArray.ElementAt(8) // 生日是否农历; ); } } } #endif Sleep(0); } } // 订单客户表; VOID CSMSHandle::CHandleDindanClient(CArray *pArrayOfDindanClient, CArray *pArrayOfChildMsg) { // 儿童版本:生日前n天、百天前n天、满x天; INT_PTR nSize = pArrayOfDindanClient->GetSize(); for (INT_PTR i = 0; i < nSize; i++) { CStringArray &strArray = pArrayOfDindanClient->ElementAt(i); // 生日前n天; if (s_SMSInfo.msgCheck1 == _T("1")) // VerifyCheck1(姓名,性别,手机,生日,是否农历); VerifyCheck1(_T("1"), strArray.ElementAt(1), _T(""), strArray.ElementAt(2), strArray.ElementAt(3), strArray.ElementAt(4)); // 百天前n天 或 纪念日前n天; if (s_SMSInfo.msgCheck2 == _T("1")) // VerifyCheck2(姓名,性别,手机,生日,是否农历); VerifyCheck2(_T("2"), strArray.ElementAt(1), _T(""), strArray.ElementAt(2), strArray.ElementAt(3), strArray.ElementAt(4)); #if JEFF_TEST_OFF // 儿童满x天; if (s_SMSInfo.hospitalmsgcheck1 == _T("1") && g_bSoftWareReg) { if (pArrayOfChildMsg == NULL) continue; INT_PTR nSize1 = pArrayOfChildMsg->GetSize(); for (INT_PTR j = 0; j < nSize1; j++) { CStringArray &saChilMsg = pArrayOfChildMsg->ElementAt(j); // 是否自动发送 + 是否是儿童短信(0,1为儿童, 2为孕妇); if (saChilMsg.ElementAt(0) == _T("0") || saChilMsg.ElementAt(3) == _T("2")) continue; CString strMsgType = _T(""); strMsgType.Format(_T("%d"), 10000 + _ttoi(saChilMsg.ElementAt(1))); VerifyHospitalCheck1( strMsgType, strArray.ElementAt(1), // 宝宝姓名; saChilMsg.ElementAt(1), // 满n天; ; strArray.ElementAt(2), // 家长手机; saChilMsg.ElementAt(2), // 短信模板; strArray.ElementAt(3), // 宝宝生日; strArray.ElementAt(4) // 生日是否农历; ); } } #endif #if JEFF_TEST_ON // 儿童满x天; if (pArrayOfChildMsg && pArrayOfChildMsg->GetSize()) { INT_PTR nSize1 = pArrayOfChildMsg->GetSize(); for (INT_PTR j = 0; j < nSize1; j++) { CStringArray &saChilMsg = pArrayOfChildMsg->ElementAt(j); // 是否自动发送 + 是否是儿童短信(0,1为儿童, 2为孕妇); if (saChilMsg.ElementAt(0) == _T("1") && saChilMsg.ElementAt(3) == _T("0")) { CString strMsgType = _T(""); strMsgType.Format(_T("%d"), 10000 + _ttoi(saChilMsg.ElementAt(1))); VerifyHospitalCheck1( strMsgType, strArray.ElementAt(1), // 宝宝姓名; saChilMsg.ElementAt(1), // 满n天; strArray.ElementAt(2), // 家长手机; saChilMsg.ElementAt(2), // 短信模板; strArray.ElementAt(3), // 宝宝生日; strArray.ElementAt(4) // 生日是否农历; ); } } } #endif Sleep(0); } } // 医院意向客户表; VOID CSMSHandle::CHandleHospitalClient(CArray *pArrayOfHospitalClient, CArray *pArrayOfChildMsg) { // 儿童版本:生日前n天、百天前n天、满x天; INT_PTR nSize = pArrayOfHospitalClient->GetSize(); for (INT_PTR i = 0; i < nSize; i++) { CStringArray &strArray = pArrayOfHospitalClient->ElementAt(i); #if JEFF_TEST_OFF // 若日期类型是宝宝生日; if (strArray.ElementAt(5) == _T("0")) { // 生日前n天; if (s_SMSInfo.msgCheck1 == _T("1")) // VerifyCheck1(姓名,性别,手机,生日,是否农历); VerifyCheck1(_T("1"), strArray.ElementAt(2), _T(""), strArray.ElementAt(10), strArray.ElementAt(6), strArray.ElementAt(4)); // 百天前n天; if (s_SMSInfo.msgCheck2 == _T("1")) // VerifyCheck2(姓名,性别,手机,生日,是否农历); VerifyCheck2(_T("2"), strArray.ElementAt(2), _T(""), strArray.ElementAt(10), strArray.ElementAt(6), strArray.ElementAt(4)); } #endif INT_PTR nSize1 = pArrayOfChildMsg->GetSize(); for (INT_PTR j = 0; j < nSize1; j++) { CStringArray &saChildMsg = pArrayOfChildMsg->ElementAt(j); if (saChildMsg.ElementAt(0) == _T("0")) continue; // 是否自动发送; // 儿童满x天;是否是儿童短信(0,1为儿童, 2为孕妇); if (s_SMSInfo.hospitalmsgcheck1 == _T("1") && saChildMsg.ElementAt(3) == _T("1") && strArray.ElementAt(5) == _T("0")) { CString strMsgType = _T(""); strMsgType.Format(_T("%d"), 10000 + _ttoi(saChildMsg.ElementAt(1))); VerifyHospitalCheck1( strMsgType, strArray.ElementAt(2), // 宝宝姓名; saChildMsg.ElementAt(1), // 满n天; strArray.ElementAt(10), // 家长手机; saChildMsg.ElementAt(2), // 短信模板; strArray.ElementAt(6), // 宝宝生日; strArray.ElementAt(4) // 生日是否农历; ); } // 孕妇满x天; if (s_SMSInfo.hospitalmsgcheck2 == _T("1") && saChildMsg.ElementAt(3) == _T("2") && strArray.ElementAt(5) == _T("1")) { CString strMsgType = _T(""); strMsgType.Format(_T("%d"), 20000 + _ttoi(saChildMsg.ElementAt(1))); VerifyHospitalCheck2( strMsgType, strArray.ElementAt(1), // 宝宝姓名; saChildMsg.ElementAt(1), // 满n天; strArray.ElementAt(10), // 家长手机; saChildMsg.ElementAt(2), // 短信模板; strArray.ElementAt(8), // 宝宝生日; strArray.ElementAt(7) // 生日是否农历; ); } } Sleep(0); } } //---------------------------------------------------------------------------------------------------------------------- // 婚纱版本; // 意向客户表; VOID CSMSHandle::WHandleClient2(CArray *pArrayOfClien2, CArray *pArrayOfChildMsg) { // 婚纱版本:生日前n天; INT_PTR nSize = pArrayOfClien2->GetSize(); for (INT_PTR i = 0; i < nSize; i++) { CStringArray &strArray = pArrayOfClien2->ElementAt(i); // 生日前n天; if (s_SMSInfo.msgCheck1 == _T("1")) // VerifyCheck1(姓名,性别,手机,生日,是否农历); VerifyCheck1(_T("1"), strArray.ElementAt(1), strArray.ElementAt(2), strArray.ElementAt(3), strArray.ElementAt(4), strArray.ElementAt(6)); Sleep(0); } } // 老客户表; VOID CSMSHandle::WHandleClient3(CArray *pArrayOfClien3, CArray *pArrayOfChildMsg) { // 婚纱版本:生日前n天、纪念日前n天、结婚当天; INT_PTR nSize = pArrayOfClien3->GetSize(); for (INT_PTR i = 0; i < nSize; i++) { CStringArray &strArray = pArrayOfClien3->ElementAt(i); // 生日前n天; if (s_SMSInfo.msgCheck1 == _T("1")) { // VerifyCheck1(姓名,性别,手机,生日,是否农历); VerifyCheck1(_T("1"), strArray.ElementAt(1), _T("男"), strArray.ElementAt(3), strArray.ElementAt(5), strArray.ElementAt(10)); VerifyCheck1(_T("1"), strArray.ElementAt(2), _T("女"), strArray.ElementAt(4), strArray.ElementAt(6), strArray.ElementAt(11)); } // 纪念日前n天; if (s_SMSInfo.msgCheck2 == _T("1")) { // VerifyCheck2(姓名,性别,手机,生日,是否农历); VerifyCheck2(_T("2"), strArray.ElementAt(1), _T("男"), strArray.ElementAt(3), strArray.ElementAt(7), strArray.ElementAt(12)); VerifyCheck2(_T("2"), strArray.ElementAt(2), _T("女"), strArray.ElementAt(4), strArray.ElementAt(7), strArray.ElementAt(12)); } // 结婚当天; if (s_SMSInfo.msgCheck15 == _T("1")) { // VerifyCheck15(名称,性别,手机,婚期,是否农历); VerifyCheck15(_T("15"), strArray.ElementAt(1), _T("男"), strArray.ElementAt(3), strArray.ElementAt(7), strArray.ElementAt(12)); VerifyCheck15(_T("15"), strArray.ElementAt(2), _T("女"), strArray.ElementAt(4), strArray.ElementAt(7), strArray.ElementAt(12)); } Sleep(0); } } // 订单客户表; VOID CSMSHandle::WHandleDindanClient(CArray *pArrayOfDindanClient, CArray *pArrayOfChildMsg) { // 婚纱版本:生日前n天、纪念日前n天、结婚当天; INT_PTR nSize = pArrayOfDindanClient->GetSize(); for (INT_PTR i = 0; i < nSize; i++) { CStringArray &strArray = pArrayOfDindanClient->ElementAt(i); // 生日前n天; if (s_SMSInfo.msgCheck1 == _T("1")) { // VerifyCheck1(姓名,性别,手机,生日,是否农历); VerifyCheck1(_T("1"), strArray.ElementAt(0), _T("男"), strArray.ElementAt(2), strArray.ElementAt(4), strArray.ElementAt(7)); VerifyCheck1(_T("1"), strArray.ElementAt(1), _T("女"), strArray.ElementAt(3), strArray.ElementAt(5), strArray.ElementAt(8)); } // 纪念日前n天; if (s_SMSInfo.msgCheck2 == _T("1")) { // VerifyCheck2(姓名,性别,手机,生日,是否农历); VerifyCheck2(_T("2"), strArray.ElementAt(0), _T("男"), strArray.ElementAt(2), strArray.ElementAt(6), strArray.ElementAt(9)); VerifyCheck2(_T("2"), strArray.ElementAt(1), _T("女"), strArray.ElementAt(3), strArray.ElementAt(6), strArray.ElementAt(9)); } // 结婚当天; if (s_SMSInfo.msgCheck15 == _T("1")) { // VerifyCheck15(名称,性别,手机,婚期,是否农历); VerifyCheck15(_T("15"), strArray.ElementAt(0), _T("男"), strArray.ElementAt(2), strArray.ElementAt(6), strArray.ElementAt(9)); VerifyCheck15(_T("15"), strArray.ElementAt(1), _T("女"), strArray.ElementAt(3), strArray.ElementAt(6), strArray.ElementAt(9)); } Sleep(0); } } // 医院意向客户表; VOID CSMSHandle::WHandleHospitalClient(CArray *pArrayOfHospitalClient, CArray *pArrayOfChildMsg) { // 婚纱版本:怀孕满n天; INT_PTR nSize = pArrayOfHospitalClient->GetSize(); for (INT_PTR i = 0; i < nSize; i++) { CStringArray &strArray = pArrayOfHospitalClient->ElementAt(i); INT_PTR nSize1 = pArrayOfChildMsg->GetSize(); for (INT_PTR j = 0; j < nSize1; j++) { CStringArray &saChildMsg = pArrayOfChildMsg->ElementAt(j); if (saChildMsg.ElementAt(0) == _T("0")) continue; // 是否自动发送; // 儿童满x天;是否是儿童短信(0,1为儿童, 2为孕妇); if (s_SMSInfo.hospitalmsgcheck1 == _T("1") && saChildMsg.ElementAt(3) != _T("2") && strArray.ElementAt(5) == _T("0")) { CString strMsgType = _T(""); strMsgType.Format(_T("%d"), 10000 + _ttoi(saChildMsg.ElementAt(1))); VerifyHospitalCheck1( strMsgType, strArray.ElementAt(2), // 宝宝姓名; saChildMsg.ElementAt(1), // 满n天; strArray.ElementAt(10), // 家长手机; saChildMsg.ElementAt(2), // 短信模板; strArray.ElementAt(6), // 宝宝生日; strArray.ElementAt(4) // 生日是否农历; ); } // 孕妇满x天; if (s_SMSInfo.hospitalmsgcheck2 == _T("1") && saChildMsg.ElementAt(3) == _T("2") && strArray.ElementAt(5) == _T("1")) { CString strMsgType = _T(""); strMsgType.Format(_T("%d"), 20000 + _ttoi(saChildMsg.ElementAt(1))); VerifyHospitalCheck2( strMsgType, strArray.ElementAt(1), // 孕妇姓名; saChildMsg.ElementAt(1), // 满n天; strArray.ElementAt(10), // 孕妇手机; saChildMsg.ElementAt(2), // 短信模块; strArray.ElementAt(8), // 订单日期; strArray.ElementAt(7) // 已怀孕天数; ); } } Sleep(0); } }