📄 mainfrm.cpp
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "NoteSendSystem.h"
#include "MainFrm.h"
#include "AccountManager.h"
#include "OrderManager.h"
#include "LogManager.h"
#include "MyTreeView.h"
#include "MyFormView.h"
#include "NoteSendSystemView.h"
#include "ComSet.h"
#include "MyListView.h"
#include "AdoRecordSet.h"
extern CNoteSendSystemApp theApp;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_COMMAND(IDM_ACCOUNT_MANAGER, OnAccountManager)
ON_COMMAND(IDM_LOG_MANAGER, OnLogManager)
ON_COMMAND(IDM_ORDER_MANAGER, OnOrderManager)
ON_WM_CLOSE()
ON_COMMAND(IDM_COM_SET, OnComSet)
ON_COMMAND(IDM_CONNECT, OnConnect)
ON_COMMAND(IDM_DISCONNECT, OnDisconnect)
ON_COMMAND(IDM_SEND, OnSend)
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_CONNECTSTR,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
m_strPort = "COM1";
connect_state = 0;
m_pSmsManager = new SmsManager;
}
CMainFrame::~CMainFrame()
{
CNoteSendSystemApp *pApp = (CNoteSendSystemApp *)AfxGetApp();
pApp->m_pConnection.m_connect.Release();
delete m_pSmsManager;
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
cs.style&=~FWS_ADDTOTITLE;
//这里还有个要处理的是要加上用户名
CString buf;
CString str;
CNoteSendSystemApp *pApp = (CNoteSendSystemApp *)AfxGetApp();
if (pApp->CulUserAuth == 0)
{
str = "管理员";
}
else
{
str = "普通用户";
}
buf.Format("短信群发系统 - [%s -- %s]", pApp->CulUser, str);
SetTitle(buf);
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
//DEL void CMainFrame::ReadConfig()
//DEL {
//DEL FILE *fp_opt;
//DEL int i,j;
//DEL char *p, *value;
//DEL char buf[256];
//DEL char *temp[] = {
//DEL " ",
//DEL "dbname",
//DEL "username",
//DEL "password",
//DEL 0
//DEL };
//DEL memset(buf, 0, 256);
//DEL //打开系统信息配置文件
//DEL fp_opt = fopen("dbconfig.txt", "r");
//DEL if(fp_opt == NULL)
//DEL {
//DEL MessageBox("打开配置文件失败","提示");
//DEL return;
//DEL }
//DEL while(fgets(buf, 256, fp_opt) != NULL)
//DEL {
//DEL if((buf[0] == '#') || strlen(buf) == 0 )
//DEL {
//DEL continue;
//DEL }
//DEL i=0;
//DEL p = strtok(buf,"=");
//DEL if(p == NULL)
//DEL {
//DEL continue;
//DEL }
//DEL for (j=1; j<4; j++)
//DEL {
//DEL if (strncmp(p, temp[j],strlen(temp[j]))==0)
//DEL {
//DEL i = j;
//DEL break;
//DEL }
//DEL }
//DEL value = strtok(0, "=");
//DEL if ((value == NULL) || (!isascii(value[0])))
//DEL {
//DEL continue;
//DEL }
//DEL switch (i)
//DEL {
//DEL case 1:
//DEL m_dbname = value;
//DEL break;
//DEL case 2:
//DEL m_user= value;
//DEL break;
//DEL case 3:
//DEL m_password = value;
//DEL break;
//DEL }
//DEL memset(buf, 0, 256);
//DEL }
//DEL fclose(fp_opt);
//DEL }
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
//读取配置文件
// ReadConfig();
//连接数据库
//分割窗口
m_sp1_wnd.CreateStatic(this, 1, 2);
m_sp1_wnd.CreateView(0,0, RUNTIME_CLASS(CMyTreeView), CSize(120, 300), pContext);
m_sp2_wnd.CreateStatic(&m_sp1_wnd, 2, 1, WS_CHILD | WS_VISIBLE, m_sp1_wnd.IdFromRowCol(0,1));
m_sp2_wnd.CreateView(0, 0, RUNTIME_CLASS(CMyListView), CSize(150, 235), pContext);
m_sp2_wnd.CreateView(1, 0, RUNTIME_CLASS(CMyFormView), CSize(80, 150), pContext);
m_pMyListView = (CMyListView *)m_sp2_wnd.GetPane(0, 0);
TRACE("OnCreateClient >>> m_sp2_wnd = %x\n", &m_sp2_wnd);
return TRUE;
}
//帐户管理
void CMainFrame::OnAccountManager()
{
CAccountManager accmanager;
accmanager.DoModal();
CNoteSendSystemApp *pApp = (CNoteSendSystemApp *)AfxGetApp();
pApp->AccountInfoVect.clear();
}
//日志管理
void CMainFrame::OnLogManager()
{
CLogManager logmanager;
logmanager.DoModal();
}
//订单管理
void CMainFrame::OnOrderManager()
{
COrderManager ordermanager;
ordermanager.DoModal();
}
void CMainFrame::OnClose()
{
m_pSmsManager->CloseComm();
CFrameWnd::OnClose();
}
//端口设置
void CMainFrame::OnComSet()
{
CComSet comset;
comset.DoModal();
}
//连接端口,创建一个新进程
void CMainFrame::OnConnect()
{
if (connect_state == 1)
{
MessageBox("还未断开连接,不能重复连接", "提示");
return;
}
//首先打开端口
CNoteSendSystemApp * pApp = (CNoteSendSystemApp *)AfxGetApp();
char* port = new char[10];
m_strPort = pApp->CulPort;
strcpy(port, (LPCTSTR)m_strPort);
if (!m_pSmsManager->OpenComm(port))
{
delete port;
if (AfxMessageBox("打开端口失败,是否要设置", MB_YESNO) == IDYES)
{
CComSet comset;
comset.DoModal();
}
else
{
return;
}
}
else
{
if (!gsmInit(this))
{
MessageBox("初始化GSM状态失败,请确认短信猫是否连接正确", "提示");
return;
}
//首先创建一个新线程
m_pWordThread = new WorkThread(this);
m_pWordThread->init(this);
delete port;
MessageBox("连接成功", "提示");
//设置状态栏提示已经连接
m_wndStatusBar.SetPaneText (1, "连接成功", TRUE);
connect_state = 1;
//设置定时器,要连接上后才可以
//1号定时器主要做接收
SetTimer(1, 10000, NULL);
//2号定时器做发送
SetTimer(2, 10000, NULL);
}
}
void CMainFrame::OnDisconnect()
{
if (connect_state == 0)
{
MessageBox("还未连接,不能断开连接", "提示");
return;
}
if (m_pSmsManager->CloseComm())
{
MessageBox("已断开连接", "提示");
//设置状态栏
m_wndStatusBar.SetPaneText (1, "断开连接", TRUE);
connect_state = 0;
}
else
{
MessageBox("断开连接失败", "提示");
}
}
void CMainFrame::OnSend()
{
CMyFormView *myform = (CMyFormView *)m_sp2_wnd.GetPane(1, 0);
myform->OnSend();
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
CNoteSendSystemApp *pApp = (CNoteSendSystemApp *)AfxGetApp();
CMainFrame * pMainFrame = (CMainFrame *)AfxGetMainWnd();
//接收
if(nIDEvent == 1)
{
SM_PARAM SmParam;
CString strTime;
CString strNumber;
CString strContent;
// 取接收到的短消息
if(m_pWordThread->GetFromRecvQueue(&SmParam))
{
// 取短消息信息
strNumber = SmParam.TPA;
strContent = SmParam.TP_UD;
strTime = "20" + CString(&SmParam.TP_SCTS[0],2)
+ "-" + CString(&SmParam.TP_SCTS[2],2)
+ "-" + CString(&SmParam.TP_SCTS[4],2)
+ " " + CString(&SmParam.TP_SCTS[6],2)
+ ":" + CString(&SmParam.TP_SCTS[8],2)
+ ":" + CString(&SmParam.TP_SCTS[10],2);
// 去掉号码前的"86"
if(strNumber.Left(2) == "86") strNumber = strNumber.Mid(2);
CString str;
CMyFormView * pMyFromView = (CMyFormView *)pMainFrame->m_sp2_wnd.GetPane(1, 0);
str.Format("你有新的短消息... [号码:%s][内容:%s]", strNumber, strContent);
pMyFromView->m_sendrecvmsg.Empty();
pMyFromView->m_sendrecvmsg = str; ;
pMyFromView->UpdateData(FALSE);
CMyListView *myListView = (CMyListView *)m_sp2_wnd.GetPane(0, 0);
CListCtrl& ListCtrl = myListView->GetListCtrl();
// 最多保留200条
int nItemCount = ListCtrl.GetItemCount();
if(nItemCount >= 200)
{
ListCtrl.DeleteItem(0);
nItemCount--;
}
//MessageBox(strNumber);
//MessageBox(strContent);
ListCtrl.InsertItem(nItemCount, strNumber);
ListCtrl.SetItemText(nItemCount, 1, strTime);
ListCtrl.SetItemText(nItemCount, 2, strContent);
ListCtrl.SetItemText(nItemCount, 3, "接收成功");
//保存到接收队列
pApp->m_pConnection.SaveRecvMsg(strNumber, strContent, strTime);
// ListCtrl.EnsureVisible(nItemCount, FALSE);
}
}
//发送
else if (nIDEvent == 2)
{
//读取订单表
ReadOrderList();
COleDateTime CulTime;
COleDateTime EndTime;
CString StrCulTime;
CString StrEndTime;
int len;
CulTime = COleDateTime::GetCurrentTime();
StrCulTime = CulTime.Format("%Y%m%d%H%M%S");
len = pApp->OrderListVect.size();
for (int i=0; i<len; i++)
{
EndTime = pApp->OrderListVect[i].end_date;
StrEndTime = EndTime.Format("%Y%m%d%H%M%S");
int cultime;
int endtime;
cultime = atoi(StrCulTime);
endtime = atoi(StrEndTime);
if (cultime - endtime > 11)
{
continue;
}
//判断是否是当前时间
if (cultime - endtime >= 0 && cultime - endtime < 10)// 29 30
{
int order_id;
int no_count;
CString strSmsc;
CString strNumber;
CString strContent;
CString str;
order_id = pApp->OrderListVect[i].order_id;
strContent = pApp->OrderListVect[i].content;
strSmsc = pApp->CulPhone;
//读取号码表
ReadNoList(order_id);
m_pWordThread->GetOrderId(order_id);
no_count = pApp->PhoneNoVect.size();
if (no_count == 0)
{
CString buf;
buf.Format("订单%d没有导入号码,不能发送", order_id);
MessageBox(buf, "提示");
return;
}
CMyFormView * pMyFromView = (CMyFormView *)pMainFrame->m_sp2_wnd.GetPane(1, 0);
pMyFromView->m_sendrecvmsg.Empty();
pMyFromView->m_sendrecvmsg = "正在导入定单表至发送队列......";
pMyFromView->UpdateData(FALSE);
for (i=0; i<no_count; i++)
{
strNumber = pApp->PhoneNoVect[i].phone_no;
//放到发送短消息队列
AddSendMsgToMegQueue(strSmsc, strNumber, strContent);
strNumber.Empty();
}
break;
}
}
pApp->OrderListVect.clear();
pApp->PhoneNoVect.clear();
}
CFrameWnd::OnTimer(nIDEvent);
}
void CMainFrame::ReadOrderList()
{
CString command;
CAdoRecordSet record;
OrderList list;
command.Format("select * from Orders");
//
CNoteSendSystemApp *pApp = (CNoteSendSystemApp *)AfxGetApp();
//读取订单表
pApp->m_pConnection.GetRecordSet(command, record);
while (!record.IsEof())
{
record.GetValue("ID", list.order_id);
record.GetValue("OrderStart", list.start_date);
record.GetValue("OrderEnd", list.end_date);
record.GetValue("Content", list.content);
pApp->OrderListVect.push_back(list);
record.MoveNext();
}
}
void CMainFrame::AddSendMsgToMegQueue(CString &strSmsc,CString &strNumber, CString &strContent)
{
SM_PARAM SmParam;
memset(&SmParam, 0, sizeof(SM_PARAM));
if(strSmsc[0] == '+') strSmsc = strSmsc.Mid(1);
if(strNumber[0] == '+') strNumber = strNumber.Mid(1);
if(strSmsc.Left(2) != "86") strSmsc = "86" + strSmsc;
if(strNumber.Left(2) != "86") strNumber = "86" + strNumber;
strcpy(SmParam.SCA, strSmsc);
strcpy(SmParam.TPA, strNumber);
strcpy(SmParam.TP_UD, strContent);
SmParam.TP_PID = 0;
SmParam.TP_DCS = GSM_UCS2;
CMainFrame * pMainFrame = (CMainFrame *)AfxGetMainWnd();
// 加到发送队列
m_pWordThread->PutToSendQueue(&SmParam);
}
void CMainFrame::ReadNoList(int &orderID)
{
CString command;
CAdoRecordSet record;
PhoneNo list;
command.Format("select * from PhoneNumber where OrderID='%d'", orderID);
CNoteSendSystemApp *pApp = (CNoteSendSystemApp *)AfxGetApp();
//读取订单表
pApp->m_pConnection.GetRecordSet(command, record);
while (!record.IsEof())
{
record.GetValue("Number", list.phone_no);
pApp->PhoneNoVect.push_back(list);
record.MoveNext();
}
}
//void CMainFrame::ShowSendMsg(SM_PARAM &SmParam, int &SendState, CMainFrame pMainFrame)
void CMainFrame::ShowSendMsg(SM_PARAM &SmParam, int &SendState)
{
CString strTime;
CString strNumber;
CString strContent;
CString strState;
CTime time;
CListCtrl& ListCtrl = m_pMyListView->GetListCtrl();
strNumber = SmParam.TPA;
strContent = SmParam.TP_UD;
time = CTime::GetCurrentTime();
strTime = time.Format("%Y-%m-%d %H:%M:%S");
if (SendState == 1)
{
strState = "发送成功";
}
else
{
strState = "发送失败";
}
int nItemCount = ListCtrl.GetItemCount();
if(nItemCount >= 200)
{
ListCtrl.DeleteItem(0);
nItemCount--;
}
if(strNumber.Left(2) == "86") strNumber = strNumber.Mid(2);
ListCtrl.InsertItem(nItemCount, strNumber);
ListCtrl.SetItemText(nItemCount, 1, strTime);
ListCtrl.SetItemText(nItemCount, 2, strContent);
ListCtrl.SetItemText(nItemCount, 3, "接收成功");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -