// DLG_Bill.cpp : implementation file // #include "stdafx.h" #include "smsmanager.h" #include "DLG_Bill.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // DLG_Bill dialog #include "MainFrm.h" #include "ProcessSocket.h" DLG_Bill::DLG_Bill(CWnd* pParent /*=NULL*/) : CDialog(DLG_Bill::IDD, pParent) { //{{AFX_DATA_INIT(DLG_Bill) m_tBegin = COleDateTime::GetCurrentTime(); m_tEnd = COleDateTime::GetCurrentTime(); m_lUser = -1; //}}AFX_DATA_INIT m_pCUser = (CC_User*)pParent; memset(&m_User,0,sizeof(m_User)); m_bQueryAll = false; } void DLG_Bill::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(DLG_Bill) DDX_Control(pDX, IDC_BILL_USERID, m_E_UserID); DDX_Control(pDX, IDC_BILL_USER, m_L_User); DDX_Control(pDX, IDC_BILL_LIST, m_wndList); DDX_DateTimeCtrl(pDX, IDC_BILL_TBEGIN, m_tBegin); DDX_DateTimeCtrl(pDX, IDC_BILL_TEND, m_tEnd); DDX_CBIndex(pDX, IDC_BILL_USER, m_lUser); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(DLG_Bill, CDialog) //{{AFX_MSG_MAP(DLG_Bill) ON_BN_CLICKED(IDC_BILL_QUERY, OnBillQuery) ON_NOTIFY(NM_RCLICK, IDC_BILL_LIST, OnRclickBillList) ON_BN_CLICKED(IDC_BILL_QUERY2, OnBillQuery2) //}}AFX_MSG_MAP ON_COMMAND(MENU_BILL_COPY , On_User_Copy) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // DLG_Bill message handlers BOOL DLG_Bill::OnInitDialog() { CDialog::OnInitDialog(); //初始化List m_Image.Create(16,16,ILC_COLOR16|ILC_MASK,5,5); // m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_SMSDF) ); m_wndList.SubClassWindow2(); m_wndList.SetHeadings(_T("序号,50;用户名称,200; 短信数量,100;彩信数量,100;")); m_wndList.SetGridLines(true); m_wndList.SetImageList(&m_Image,LVSIL_SMALL); COleDateTime t = COleDateTime::GetCurrentTime(); COleDateTimeSpan tSpan2(3,0,0,0); t = t-tSpan2; m_tBegin.SetDate( t.GetYear(),t.GetMonth(),1 ); //起始 m_tEnd.SetDate( t.GetYear(),t.GetMonth(),t.GetDay() );//结束 UpdateData(false); //添加用户 CString str; m_L_User.AddString(_T("所有用户")); m_L_User.SetItemData(0,-1); int iSel=0; POSITION pos = m_pCUser->m_User.GetHeadPosition(); POSITION pos2; while (pos) { pos2 = pos; ANS_Corp_UserData * pData = m_pCUser->m_User.GetNext( pos ); if ( pData ) { str.Format( _T("%s-%s") , pData->szLoginName , pData->szName ); long lItem = m_L_User.AddString( str ); m_L_User.SetItemData( lItem , (DWORD)pos2); if ( pData->lUserID == m_User.lUserID ) iSel = lItem; } } if ( m_L_User.GetCount()>0 ) m_L_User.SetCurSel(iSel); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void DLG_Bill::SetParam(ANS_Corp_UserData user) { m_User = user; } BOOL DLG_Bill::ProcessSocket(Socket_Head_Add *pHead, BYTE *pFrame) { if ( pHead->lFuncType == SMSFUNC_BILL4 ) { ANS_Bill4 * pBill = (ANS_Bill4 *)pFrame; ANS_BillData4 * pData = (ANS_BillData4 *)(pFrame+sizeof(ANS_Bill4)); TCHAR Buf[64]={0}; long lCount; //_T("序号,50;企业ID,80;企业名称,150; 发送数量,100;接收数量,100;")); lCount = m_wndList.GetItemCount(); m_wndList.InsertItem( lCount , _itot(lCount+1,Buf,10),0); //序号 _stprintf(Buf, _T("%s-%s") , m_strLoginName , m_strCurName ); m_wndList.SetItemText(lCount,1,Buf); long lSendCount=0; long lSendMmsCount=0; /* for ( int i=0;ilCount;i++) { if ( i==0 ) lSendCount += pData->lSendCount; if ( i==1 ) lSendMmsCount += pData->lSendCount; pData++; } */ lSendCount = pData->lSendCount; if ( pBill->lCount>1 ) lSendMmsCount = pData[1].lSendCount; m_lAllSend +=lSendCount; m_lAllMmsSend +=lSendMmsCount; m_wndList.SetItemText( lCount ,2 , _itot(lSendCount,Buf,10)); //数量 m_wndList.SetItemText( lCount ,3 , _itot(lSendMmsCount,Buf,10)); //数量 if ( m_bQueryAll ) QueryNext(); return true; } return false; } void DLG_Bill::OnBillQuery() { if ( !UpdateData(true) ) return ; if ( m_tEnd < m_tBegin ) { MessageBox( _T("查询结束日期不能小于起始日期,请改正!") , _T("错误") , MB_ICONWARNING ); return ; } COleDateTime tNow = COleDateTime::GetCurrentTime(); COleDateTimeSpan tSpan2(3,0,0,0); /* if ( tNow - m_tEnd < tSpan2 ) { MessageBox( _T("因为状态报告回复时间有延迟,帐单只能查询到前三天的!") ,_T("提示"), MB_ICONWARNING); return ; } */ #ifndef _DEBUG if ( COleDateTime::GetCurrentTime() - m_tBegin > COleDateTimeSpan(400,0,0,0) ) { MessageBox( _T("查询日期跨度不能大于3个月,请改正!") , _T("错误") , MB_ICONWARNING ); return ; } if ( m_tEnd - m_tBegin > COleDateTimeSpan(400,0,0,0) ) { MessageBox( _T("查询日期跨度不能大于3个月,请改正!") , _T("错误") , MB_ICONWARNING ); return ; } #endif long lCorpID=0; long lUserID=0; POSITION pos = (POSITION)m_L_User.GetItemData(m_lUser); if ( (long)pos == -1 ) //查询所有企业 { m_wndList.DeleteAllColumns(); m_wndList.SetHeadings(_T("序号,50;用户名称,200; 短信数量,100;彩信数量,100;")); m_wndList.DeleteAllItems(); m_bQueryAll = true; m_lAllSend = 0; m_lAllMmsSend = 0; QueryNext(); } else { m_wndList.DeleteAllColumns(); m_wndList.SetHeadings(_T("序号,50;用户名称,200; 短信数量,100;彩信数量,100;")); m_wndList.DeleteAllItems(); m_bQueryAll = false; ANS_Corp_UserData * pData = m_pCUser->m_User.GetNext( pos ); if (pData) { lCorpID = pData->lCorpID; lUserID = pData->lUserID; m_strCurName = pData->szName; m_strLoginName= pData->szLoginName; } else { return; } REQ_Bill4 * pBill = new REQ_Bill4;memset(pBill,0,sizeof(REQ_Bill4)); pBill->lCorpID = lCorpID; //企业ID pBill->lUserID = lUserID; //查询用户ID m_tBegin.GetAsSystemTime( pBill->tBegin ); m_tEnd.GetAsSystemTime( pBill->tEnd ); pBill->bJCB=false; //不查结存表 this->m_pCUser->m_pMainFrame->SendFrame(SMSFUNC_BILL4,(BYTE*)pBill,sizeof(REQ_Bill4)); } return ; } void DLG_Bill::OnRclickBillList(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; ShowRMenu(); } void DLG_Bill::ShowRMenu() { CMenu menu; menu.CreatePopupMenu(); //复制 menu.AppendMenu(MF_STRING , MENU_BILL_COPY, _T(" 复 制 ") ); //显示菜单 POINT pt ; ::GetCursorPos( &pt ); //this->ClientToScreen( &pt); menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL); menu.DestroyMenu(); } void DLG_Bill::On_User_Copy() { m_wndList.CopyToClipboard(); } void DLG_Bill::OnBillQuery2() { CString strTemp; CString strFind; m_E_UserID.GetWindowText(strFind); if ( strFind.GetLength()<=0 ) return ; long lSel = m_L_User.GetCurSel(); long lCount = m_L_User.GetCount(); for ( int i=lSel+1 ; i=0 ) { m_L_User.SetCurSel(i); return ; } } for ( i=0 ; i=0 ) { m_L_User.SetCurSel(i); return ; } } } void DLG_Bill::QueryNext() { long lCur=m_L_User.GetCurSel(); if ( lCur>=m_L_User.GetCount()-1 ) //查询完毕 { TCHAR Buf[32]={0}; long lCount = m_wndList.GetItemCount(); m_wndList.InsertItem( lCount , _itot(lCount+1,Buf,10),0); //序号 _tcscpy(Buf , _T("合 计")); m_wndList.SetItemText(lCount,1,Buf); m_wndList.SetItemText( lCount ,2 , _itot(m_lAllSend,Buf,10)); //数量 m_wndList.SetItemText( lCount ,3 , _itot(m_lAllMmsSend,Buf,10)); //数量 return; } lCur++; m_L_User.SetCurSel(lCur); long lCorpID=0; long lUserID=0; POSITION pos = (POSITION)m_L_User.GetItemData(lCur); ANS_Corp_UserData * pData = m_pCUser->m_User.GetNext( pos ); if (pData) { lCorpID = pData->lCorpID; lUserID = pData->lUserID; m_lCurCorpID = pData->lCorpID; m_strCurName = pData->szName; m_strLoginName= pData->szLoginName; } else { return; } REQ_Bill4 * pBill = new REQ_Bill4;memset(pBill,0,sizeof(REQ_Bill4)); pBill->lCorpID = lCorpID; //企业ID pBill->lUserID = lUserID; //查询用户ID m_tBegin.GetAsSystemTime( pBill->tBegin ); m_tEnd.GetAsSystemTime( pBill->tEnd ); pBill->bJCB=false; //不查结存表 this->m_pCUser->m_pMainFrame->SendFrame(SMSFUNC_BILL4,(BYTE*)pBill,sizeof(REQ_Bill4)); }