⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sendlogquery.cpp

📁 使用短信猫可以实现短信的群发
💻 CPP
字号:
// SendLogQuery.cpp : implementation file
//

#include "stdafx.h"
#include "sms.h"
#include "SendLogQuery.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSendLogQuery dialog


CSendLogQuery::CSendLogQuery(CWnd* pParent /*=NULL*/)
	: CDialog(CSendLogQuery::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSendLogQuery)
	m_IsPhoneNumber = FALSE;
	m_IsOrderForm = FALSE;
	m_IsSendDate = FALSE;
	m_IsSendState = FALSE;
	m_SendDate = COleDateTime::GetCurrentTime();
	m_SendState = _T("");
	m_PhoneNumber = _T("");
	m_OrderFormNumber = _T("");
	//}}AFX_DATA_INIT
}


void CSendLogQuery::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSendLogQuery)
	DDX_Control(pDX, IDC_SEND_STATE, m_SendStateCtrl);
	DDX_Check(pDX, IDC_PHONE_NUMBER_CHECK, m_IsPhoneNumber);
	DDX_Check(pDX, IDC_ORDER_FORM_CHECK, m_IsOrderForm);
	DDX_Check(pDX, IDC_SEND_DATE_CHECK, m_IsSendDate);
	DDX_Check(pDX, IDC_SEND_STATE_CHECK, m_IsSendState);
	DDX_DateTimeCtrl(pDX, IDC_SEND_DATE, m_SendDate);
	DDX_CBString(pDX, IDC_SEND_STATE, m_SendState);
	DDX_Text(pDX, IDC_PHONE_NUMBER, m_PhoneNumber);
	DDX_Text(pDX, IDC_ORDER_FORM_NUMBER, m_OrderFormNumber);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSendLogQuery, CDialog)
	//{{AFX_MSG_MAP(CSendLogQuery)
	ON_BN_CLICKED(IDC_ORDER_FORM_CHECK, OnOrderFormCheck)
	ON_BN_CLICKED(IDC_PHONE_NUMBER_CHECK, OnPhoneNumberCheck)
	ON_BN_CLICKED(IDC_SEND_DATE_CHECK, OnSendDateCheck)
	ON_BN_CLICKED(IDC_SEND_STATE_CHECK, OnSendStateCheck)
	ON_BN_CLICKED(IDC_Search, OnSearch)
	ON_BN_CLICKED(IDC_EXPORT, OnExport)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSendLogQuery message handlers

void CSendLogQuery::OnOrderFormCheck() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	GetDlgItem(IDC_ORDER_FORM_NUMBER)->EnableWindow(m_IsOrderForm); //选中订单号选项
	
}

void CSendLogQuery::OnPhoneNumberCheck() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	GetDlgItem(IDC_PHONE_NUMBER)->EnableWindow(m_IsPhoneNumber); //选中手机号选项
	
}

void CSendLogQuery::OnSendDateCheck() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	GetDlgItem(IDC_SEND_DATE)->EnableWindow(m_IsSendDate); //选中发送日期选项
	
}

void CSendLogQuery::OnSendStateCheck() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	GetDlgItem(IDC_SEND_STATE)->EnableWindow(m_IsSendState); //选中发送状态选项
	
}

BOOL CSendLogQuery::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	
	//////////////////////////////////////////////////////////////////////////
	//在初始化的时候不让下边这四个对话框处于可用状态
	GetDlgItem(IDC_PHONE_NUMBER)->EnableWindow(FALSE);
	GetDlgItem(IDC_ORDER_FORM_NUMBER)->EnableWindow(FALSE);
	GetDlgItem(IDC_SEND_DATE)->EnableWindow(FALSE);
	GetDlgItem(IDC_SEND_STATE)->EnableWindow(FALSE);
	
	m_SendStateCtrl.AddString("成功");
	m_SendStateCtrl.AddString("失败");

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CSendLogQuery::OnSearch() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	CString sql="SELECT * FROM sendlog WHERE ";
	CString temp;
	if(m_IsPhoneNumber)
	{
		//////////////////////////////////////////////////////////////////////////
		//对输入的手机号进行验证
		if(m_PhoneNumber.IsEmpty())
		{
			AfxMessageBox("请输入手机号码");
			return;
		}
		
		
		//判断手机号是否存在非数字字符的存在
		//判断号码的最大长度为24个字节,必须为数字或+号
		int i=0;
		BOOL isRight=TRUE;
		//判断是否以数字或+开头
		for(i=0;i<m_PhoneNumber.GetLength();i++)
		{
			if(! (isdigit(m_PhoneNumber[i]) || m_PhoneNumber[0]=='+' && i==0 ))
			{
				isRight=FALSE;
			}
		}		
		TRACE("号码为%s   %d",m_PhoneNumber,isRight);
		//在号码格式正确的基础上再判断号码的最大长度是否超过24
		if(!(isRight && m_PhoneNumber.GetLength()<=24))
		{
			AfxMessageBox("手机号码不能超过24位并且不能包含非数字字符");
			return;
		}
				
		//TRACE("%s\n",temp);
		
		//////////////////////////////////////////////////////////////////////////
		//将要发送的内容放入到发送队列
		//////////////////////////////////////////////////////////////////////////
				
		//要先对"+"进行处理,而不能先判断是否以"86"开头
		if("+"==m_PhoneNumber.Left(1))
		{
			m_PhoneNumber=m_PhoneNumber.Mid(1);
		}
		//如果手机号不以86就给他补个86进去
		if("86"!=m_PhoneNumber.Left(2))
		{
			m_PhoneNumber="86"+m_PhoneNumber;
		}

		temp.Empty();
		temp.Format("pnumber='%s' AND ",m_PhoneNumber);
		sql+=temp;
	}
	if(m_IsSendDate)
	{
		temp.Empty();
		CString strDate;
		strDate.Format("%d-%d-%d",m_SendDate.GetYear(),m_SendDate.GetMonth(),m_SendDate.GetDay());
		temp.Format("sendtime>=to_date('%d-%d','YYYY-MM-DD') AND \
			sendtime<to_date('%s','YYYY-MM-DD')+1 AND ",strDate,strDate);
		sql+=temp;
	}
	if(m_IsOrderForm)
	{
		temp.Empty();
		temp.Format("orderid=%s AND ",m_OrderFormNumber);
		sql+=temp;
	}
	if(m_IsSendState)
	{
		temp.Empty();
		int curSel;
		if(m_SendState=="成功")
		{
			curSel=1;
		}
		else
		{
			curSel=0;
		}
		temp.Format("state=%d AND ",curSel);
		sql+=temp;
	}
	sql+="1=1";
	TRACE("%s",sql);
	
	
	//////////////////////////////////////////////////////////////////////////
	///数据库操作
	CSMSApp * pCSMSApp=(CSMSApp *)AfxGetApp();//取得App类对象的指针
	CSMSADO &Ado=pCSMSApp->m_SMSAdo;
	
	//这里判断数据连接是否连接成功
	if(!Ado.IsConnection())
	{
		MessageBox("连接数据库出错\n请重新设置Oracle相关信息");
		return;
	}
	
	SQLRECORDSET rs=Ado.ExecuteWithRecordset(sql);
	
	
	if(rs==NULL)
	{
		return;
	}
	
	((CLogManager *)(GetParent()->GetParent()))->ShowSendLogSearchList(rs);
	m_PhoneNumber.Empty();
	m_OrderFormNumber.Empty();
	//m_SendDate.Empty();
	//m_SendState.Empty();
	//m_Authority.SetCurSel(1);
	UpdateData(FALSE);//将变量的内容更新到于之关加的窗口上

}

void CSendLogQuery::OnExport() 
{
	// TODO: Add your control notification handler code here

	CListCtrl & listCtrl=((CLogManager *)(GetParent()->GetParent()))->m_LogList;
	if(listCtrl.GetItemCount()<=0)
	{
		AfxMessageBox("没有发送日志内容需要导出");
		return;
	}
	CString strFilter="Txt 文件(*.txt)|*.txt||";
	CString fileName;
	//第一个参数是控制文件对话框是打开文件对话框还是保存文件对话框 TRUE是打开文件 FALSE是保存文件
	//第二个参数是默认文件扩展名
	//第三个参数是初始化文件名
	//第四个参数是标记
	//第五个参数是过滤的文件类型
	//第六个参数是指定该对话框的父窗口
	CFileDialog fileDialog(FALSE, _T("*.txt"), "SendLog", OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, strFilter, this);
	if(IDOK==fileDialog.DoModal())
	{
		//////////////////////////////////////////////////////////////////////////
		//将显示在List控件里的查询结果保存到文件
		fileName=fileDialog.GetFileName();
		
		CFile savefile(fileName, CFile::modeCreate|CFile::modeWrite);
		
		//////////////////////////////////////////////////////////////////////////
		//先将标题保存进文件中去
		CString textContent="ID\t订单ID\t对方手机号码\t短信发送时间\t\t发送状态\r\n";
		savefile.Write(textContent, textContent.GetLength());
		
		int i=0;
		CString temp;
		for(; i<listCtrl.GetItemCount(); ++i)
		{
			textContent.Empty();
			temp.Empty();
			temp = listCtrl.GetItemText(i, 0);
			textContent=temp+"\t";
			temp = listCtrl.GetItemText(i, 1);
			textContent+=temp+"\t";
			temp = listCtrl.GetItemText(i, 2);
			textContent+=temp+"\t";
			temp = listCtrl.GetItemText(i, 3);
			textContent+=temp+"\t";
			temp = listCtrl.GetItemText(i, 4);
			textContent+=temp+"\t";	
			textContent+="\r\n";
			savefile.Write(textContent, textContent.GetLength());
		}
		savefile.Close();		
		AfxMessageBox("导出到文件成功!");
	}
}

BOOL CSendLogQuery::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	if (pMsg->message == WM_KEYDOWN)
	{	
		if (pMsg->wParam == VK_RETURN)	return TRUE;
		if (pMsg->wParam == VK_ESCAPE)	return TRUE;
	} 
	return CDialog::PreTranslateMessage(pMsg);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -