SendMsgLogDlg.cpp 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. // SendMsgLogDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "lyfzSMSApp.h"
  5. #include "SendMsgLogDlg.h"
  6. #include "DataManager.h"
  7. // CSendMsgLogDlg 对话框
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #endif
  11. DWORD WINAPI ThreadFun(LPVOID lparam);
  12. IMPLEMENT_DYNAMIC(CSendMsgLogDlg, CDialog)
  13. CSendMsgLogDlg::CSendMsgLogDlg(CWnd* pParent /*=NULL*/)
  14. : CDialog(CSendMsgLogDlg::IDD, pParent)
  15. {
  16. m_strAccount = _T(""); //帐号
  17. m_strPassWord = _T(""); //密码
  18. m_pSMSHandle = NULL; //短信处理
  19. }
  20. CSendMsgLogDlg::~CSendMsgLogDlg()
  21. {
  22. m_pSMSHandle = NULL;
  23. }
  24. void CSendMsgLogDlg::DoDataExchange(CDataExchange* pDX)
  25. {
  26. CDialog::DoDataExchange(pDX);
  27. DDX_Control(pDX, IDC_SendMsgLog_List, m_MsgLogList);
  28. }
  29. BEGIN_MESSAGE_MAP(CSendMsgLogDlg, CDialog)
  30. ON_BN_CLICKED(IDC_Refresh_Btn, &CSendMsgLogDlg::OnBnClickedRefreshBtn)
  31. ON_BN_CLICKED(IDC_SMS_RESEND, &CSendMsgLogDlg::OnBnClickedSmsResend)
  32. ON_NOTIFY(NM_CLICK, IDC_SendMsgLog_List, &CSendMsgLogDlg::OnNMClickSendmsglogList)
  33. ON_BN_CLICKED(IDC_DELLOG_BTN, &CSendMsgLogDlg::OnBnClickedDellogBtn)
  34. END_MESSAGE_MAP()
  35. BOOL CSendMsgLogDlg::OnInitDialog()
  36. {
  37. CDialog::OnInitDialog();
  38. m_MsgLogList.InsertColumn(0,_T("帐号"));
  39. m_MsgLogList.SetColumnWidth(0,58);
  40. m_MsgLogList.InsertColumn(1,_T("手机号码"));
  41. m_MsgLogList.SetColumnWidth(1,100);
  42. m_MsgLogList.InsertColumn(2,_T("内容"));
  43. m_MsgLogList.SetColumnWidth(2,100);
  44. m_MsgLogList.InsertColumn(3,_T("时间"));
  45. m_MsgLogList.SetColumnWidth(3,100);
  46. m_MsgLogList.InsertColumn(4,_T("次数"));
  47. m_MsgLogList.SetColumnWidth(4,100);
  48. m_MsgLogList.InsertColumn(5,_T("记录"));
  49. m_MsgLogList.SetColumnWidth(5,100);
  50. m_MsgLogList.InsertColumn(6,_T("状态"));
  51. m_MsgLogList.SetColumnWidth(6,100);
  52. m_MsgLogList.InsertColumn(7,_T("Sid"));
  53. m_MsgLogList.SetColumnWidth(7,100);
  54. m_MsgLogList.InsertColumn(8,_T("ID"));
  55. m_MsgLogList.SetColumnWidth(8,100);
  56. m_MsgLogList.SetExtendedStyle(m_MsgLogList.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
  57. //查询所有记录
  58. if(SelectAllLogs() == -1)
  59. return FALSE;
  60. return TRUE;
  61. }
  62. // CSendMsgLogDlg 消息处理程序
  63. int CSendMsgLogDlg::SelectAllLogs()
  64. {
  65. CArray<CStringArray, CStringArray> arr;
  66. CString strTableName = _T("sendreg");
  67. //account,phones,content,timestamp,msgcount,log,status,autoid
  68. std::vector<CString> vFields;
  69. vFields.push_back(_T("account"));
  70. vFields.push_back(_T("phones"));
  71. vFields.push_back(_T("content"));
  72. vFields.push_back(_T("timestamp"));
  73. vFields.push_back(_T("msgcount"));
  74. vFields.push_back(_T("log"));
  75. vFields.push_back(_T("status"));
  76. vFields.push_back(_T("Sid"));
  77. vFields.push_back(_T("autoid"));
  78. CDataManager::GetInstance()->Select(arr, strTableName, vFields);
  79. if(arr.GetSize() == 0)
  80. {
  81. MessageBox(_T("没有记录可查询"));
  82. return -1;
  83. }
  84. for(int i=0; i<arr.GetSize(); i++)
  85. {
  86. int nRow = 0;
  87. for(int j=0; j<arr.ElementAt(i).GetSize(); j++)
  88. {
  89. if(j == 0)
  90. nRow = m_MsgLogList.InsertItem(i, arr.ElementAt(i).ElementAt(j));
  91. else
  92. m_MsgLogList.SetItemText(nRow, j, arr.ElementAt(i).ElementAt(j)); //插入列
  93. }
  94. }
  95. return 0;
  96. }
  97. //刷新
  98. void CSendMsgLogDlg::OnBnClickedRefreshBtn()
  99. {
  100. // TODO: 在此添加控件通知处理程序代码
  101. //查询所有记录
  102. m_MsgLogList.DeleteAllItems();
  103. SelectAllLogs();
  104. }
  105. //短信重发
  106. void CSendMsgLogDlg::OnBnClickedSmsResend()
  107. {
  108. // TODO: 在此添加控件通知处理程序代码
  109. if(m_strAccount == _T(""))
  110. {
  111. MessageBox(_T("请输入登录的帐户"));
  112. return;
  113. }
  114. if(!CheckNumFormat(m_strAccount))
  115. {
  116. MessageBox(_T("帐号只能是数字"));
  117. return;
  118. }
  119. if(m_strPassWord == _T(""))
  120. {
  121. MessageBox(_T("请输入登录的密码"));
  122. return;
  123. }
  124. DWORD dwThreadID = 0;
  125. HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFun, this, 0, &dwThreadID);
  126. CloseHandle(hThread);
  127. }
  128. //重发
  129. void CSendMsgLogDlg::ReSend(CString& strAccount, CString& strPassWord, CString& strContent, CString& strPhoneNums)
  130. {
  131. if(m_pSMSHandle == NULL)
  132. {
  133. MessageBox(_T("短信发送失败"));
  134. return;
  135. }
  136. if(strContent == _T(""))
  137. {
  138. MessageBox(_T("还没有编辑信息"));
  139. return;
  140. }
  141. if(strPhoneNums == _T(""))
  142. {
  143. MessageBox(_T("请编辑要发送的号码"));
  144. return;
  145. }
  146. //添加新记录 列名:account,phones,content,timestamp,msgcount,log,status,Sid,autoid(自动编号)
  147. CString strTableName = _T("sendreg");
  148. int nCurrSendCount = 0;
  149. CString strfiles = _T("account,phones,content,[timestamp],msgcount,log,status,Sid");
  150. CString strStampTime = CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S"));
  151. CString strValues = _T("");
  152. strValues = _T("'") + strAccount + _T("','") + strPhoneNums + _T("','") + strContent + _T("','") + strStampTime + _T("','0','0/1','0','0'");
  153. if(CDataManager::GetInstance()->Insert(strTableName, strValues, strfiles) == -1)
  154. {
  155. MessageBox(_T("添加记录失败"));
  156. return;
  157. }
  158. //查找第一行数据
  159. CArray<CStringArray, CStringArray> arr;
  160. std::vector<CString> vFields;
  161. vFields.push_back(_T("autoid"));
  162. CString strstrSelLineCount = _T("top 1");
  163. if(CDataManager::GetInstance()->Select(arr, strTableName, vFields, _T(""), strstrSelLineCount, _T("autoid desc")) == -1)
  164. {
  165. MessageBox(_T("查询记录失败"));
  166. return;
  167. }
  168. if(arr.GetSize() == 0)
  169. return;
  170. //发送信息
  171. //获取帐号余额
  172. if(m_pSMSHandle->SendSMToSever(g_szSMSServer, g_dwTCPSMSPort, strAccount, strPassWord, strPhoneNums, strContent, strStampTime, arr.ElementAt(0).ElementAt(0)) == 0)
  173. MessageBox(_T("发送成功!"));
  174. }
  175. void CSendMsgLogDlg::OnNMClickSendmsglogList(NMHDR *pNMHDR, LRESULT *pResult)
  176. {
  177. LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
  178. // TODO: 在此添加控件通知处理程序代码
  179. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  180. if(pNMListView->iItem != -1)
  181. {
  182. //单击行列pNMListView->iItem, pNMListView->iSubItem
  183. m_MsgLogList.GetItemText(pNMListView->iItem, 1);
  184. }
  185. *pResult = 0;
  186. }
  187. void CSendMsgLogDlg::SendSMS()
  188. {
  189. int nCount = m_MsgLogList.GetItemCount();
  190. for(int i = 0; i<nCount; i++)
  191. {
  192. if( m_MsgLogList.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED)
  193. {
  194. CString strContent = m_MsgLogList.GetItemText(i, 2);
  195. CString strPhoneNums = m_MsgLogList.GetItemText(i, 1);
  196. ReSend(m_strAccount, m_strPassWord, strContent, strPhoneNums);
  197. Sleep(10);
  198. }
  199. }
  200. }
  201. DWORD WINAPI ThreadFun(LPVOID lparam)
  202. {
  203. CSendMsgLogDlg* p = (CSendMsgLogDlg*)lparam;
  204. p->SendSMS();
  205. return 0;
  206. }
  207. //删除记录
  208. void CSendMsgLogDlg::OnBnClickedDellogBtn()
  209. {
  210. // TODO: 在此添加控件通知处理程序代码
  211. CString strTableName = _T("sendreg");
  212. int nCount = m_MsgLogList.GetItemCount();
  213. for(int i = nCount-1; i >= 0; i--)
  214. {
  215. if( m_MsgLogList.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED)
  216. {
  217. CString strLogID = _T("");
  218. strLogID = _T("autoid=") + m_MsgLogList.GetItemText(i, 8);
  219. if(CDataManager::GetInstance()->Delete(strTableName, strLogID) == -1)
  220. {
  221. MessageBox(_T("删除失败"));
  222. continue;
  223. }
  224. m_MsgLogList.DeleteItem(i);
  225. }
  226. }
  227. UpdateData(FALSE);
  228. }