SmsManager/K_KHCard.cpp
2025-01-14 10:46:18 +08:00

495 lines
13 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// K_KHCard.cpp : implementation file
//
#include "stdafx.h"
#include "smsmanager.h"
#include "K_KHCard.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CK_KHCard dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_KHCard_Add.h"
#include "DLG_KHCard_Agent.h"
#include "DLG_KHCard_Pro.h"
CK_KHCard::CK_KHCard(CWnd* pParent /*=NULL*/)
: CDialog(CK_KHCard::IDD, pParent)
{
//{{AFX_DATA_INIT(CK_KHCard)
m_lBegin = 0;
m_lEnd = 0;
//}}AFX_DATA_INIT
m_bInit = false;
m_bRefresh = false;
}
void CK_KHCard::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CK_KHCard)
DDX_Control(pDX, IDC_KHCARD_S1, m_S_S1);
DDX_Control(pDX, IDC_KHCARD_AGENT, m_L_Agent);
DDX_Control(pDX, IDC_KHCARD_LIST, m_wndList);
DDX_Text(pDX, IDC_KHCARD_BEGIN, m_lBegin);
DDX_Text(pDX, IDC_KHCARD_END, m_lEnd);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CK_KHCard, CDialog)
//{{AFX_MSG_MAP(CK_KHCard)
ON_WM_SIZE()
ON_NOTIFY(NM_DBLCLK, IDC_KHCARD_LIST, OnDblclkKhcardList)
ON_NOTIFY(NM_RCLICK, IDC_KHCARD_LIST, OnRclickKhcardList)
ON_NOTIFY(LVN_KEYDOWN, IDC_KHCARD_LIST, OnKeydownKhcardList)
ON_BN_CLICKED(IDC_KHCARD_QUERY, OnKhcardQuery)
//}}AFX_MSG_MAP
ON_COMMAND( MENU_KHCARD_ADD , On_KHCard_Add )
ON_COMMAND( MENU_KHCARD_AGENT , On_KHCard_Agent )
ON_COMMAND( MENU_KHCARD_PRO , On_KHCard_Pro )
ON_COMMAND( MENU_KHCARD_EXPORT , On_KHCard_Export )
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CK_KHCard message handlers
BOOL CK_KHCard::RefreshInfo()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_FILT) )
{
return false;
}
if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_SEE) )
{
return false;
}
return m_pMainFrame->SendFrame(SMSFUNC_AGENT_NAME,NULL,0);
}
void CK_KHCard::Close()
{
//Çå³ý¶ÓÁÐÖеÄÄÚÈÝ
while (!m_Agent.IsEmpty())
{
ANS_Agent_NameData * pData = m_Agent.GetHead();
m_Agent.RemoveHead();
delete pData;
}
}
BOOL CK_KHCard::ReHide()
{
ShowWindow( SW_HIDE );
return true;
}
BOOL CK_KHCard::ReShow(BOOL bRefresh)
{
ShowWindow( SW_SHOW );
if ( bRefresh || !m_bRefresh )
{
RefreshInfo();
}
return true;
}
BOOL CK_KHCard::OnInitDialog()
{
CDialog::OnInitDialog();
//È¡µÃ¹²ÓòÎÊý
//CMainFrame * pFrame = static_cast <CMainFrame *>((CMainFrame *)AfxGetMainWnd());
this->GetParent()->GetParentFrame();
m_pMainFrame = (CMainFrame *)this->GetParent()->GetParentFrame();
m_pSocket = &m_pMainFrame->m_Socket;
//³õʼ»¯List
m_Image.Create(16,16,ILC_COLOR16|ILC_MASK,5,5);
m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_AGENT) );
m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_AGENT_DISABLE) );
m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_LOCK) ); m_wndList.SubClassWindow2();
m_wndList.SetHeadings(_T("ÐòºÅ,40; ¿¨ ºÅ,80; ÃÜ Âë,120; ÃæÖµ,100; ´úÀíÉÌ,60; ÆôÓÃʱ¼ä,150; ÆôÓÃIP,150; ֪ͨÆðµã,80;±»½ûÓÃ,60;"));
m_wndList.SetGridLines(true);
m_wndList.SetImageList(&m_Image,LVSIL_SMALL);
m_bInit = true;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CK_KHCard::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if ( m_bInit )
{
CRect rect;
m_S_S1.GetWindowRect(&rect);
m_wndList.MoveWindow( 0 , 0+rect.Height()+5 , cx,cy-rect.Height()-5);
}
}
BOOL CK_KHCard::ProcessSocket(Socket_Head *pHead)
{
//È¡´úÀíÉÌÃû×Ö
if (pHead->lFuncType == SMSFUNC_AGENT_NAME)
{
m_bRefresh = true; //ÒѾ­Ë¢Ð¹ý
ANS_Agent_Name * pAgent = (ANS_Agent_Name *)pHead->pFrame;
ANS_Agent_NameData * pData = (ANS_Agent_NameData *)(pHead->pFrame+sizeof(ANS_Agent_Name));
m_L_Agent.ResetContent(); //ɾ³ýÔ­ÒÑÓÐµÄÆóÒµ
m_L_Agent.AddString( _T("ËùÓдúÀíÉÌ") );
this->Close(); //¹Ø±ÕÔ­¶ÓÁÐ
for ( int i=0;i<pAgent->lCount;i++ )
{
ANS_Agent_NameData * pNewData = new ANS_Agent_NameData;
*pNewData = *pData;
POSITION pos = m_Agent.AddTail(pNewData);
long lItem = m_L_Agent.AddString( pData->szAgentName );
m_L_Agent.SetItemData( lItem , (DWORD)pos);
pData ++;
}
m_L_Agent.SetCurSel(0);
return true;
}
if ( pHead->lFuncType == SMSFUNC_KHCARD_ADD )
{
ANS_KHCard_Add * pAdd = (ANS_KHCard_Add *)pHead->pFrame;
CString str;
str.Format( _T("Éú³É¿ª»§¿¨³É¹¦£¬¹²Éú³É%d¸ö£¬ºÅ¶ÎΪ%d-%d"),pAdd->lCount,pAdd->lABegin,pAdd->lAEnd );
MessageBox(str,_T("¿ª»§¿¨"),MB_ICONINFORMATION );
return true;
}
if ( pHead->lFuncType == SMSFUNC_KHCARD_SEE )
{
ANS_KHCard_See * pSee = (ANS_KHCard_See *)pHead->pFrame;
ANS_KHCard_SeeData * pData = (ANS_KHCard_SeeData *)(pHead->pFrame+sizeof(ANS_KHCard_See));
m_wndList.ShowWindow( SW_HIDE );
m_wndList.DeleteAllItems();
TCHAR szBuf[32];
//m_wndList.SetHeadings(_T("ÐòºÅ,40; ¿¨ ºÅ,80; ÃÜ Âë,120; ´úÀíÉÌ,120; ÆôÓÃʱ¼ä,120; ÆôÓÃIP,100;"));
for ( int i=0 ; i< pSee->lCount ; i++ )
{
m_wndList.InsertItem( i , _itot(i+1,szBuf,10),pData->lStatus);
m_wndList.SetItemText(i,1,pData->szCardNum );
m_wndList.SetItemText(i,2,pData->szPasswd );
_stprintf(szBuf ,_T("%d.00"), pData->lPrice );
m_wndList.SetItemText(i,3,szBuf);
_stprintf(szBuf ,_T("%d"), pData->lAgentID );
m_wndList.SetItemText(i,4,szBuf);
_stprintf(szBuf , _T("%04d.%02d.%02d %02d:%02d") , pData->tUse.wYear,pData->tUse.wMonth,pData->tUse.wDay,pData->tUse.wHour,pData->tUse.wMinute );
m_wndList.SetItemText(i,5,szBuf );
m_wndList.SetItemText(i,6,pData->szUseIP );
_stprintf(szBuf , _T("%8d") , pData->lFiltStep );
m_wndList.SetItemText(i,7,szBuf );
if ( !(pData->lPurview & PURVIEW_LOGIN) )
m_wndList.SetItemText(i,8,_T(" ÊÇ") );
m_wndList.SetItemData(i,pData->lUserID );
pData++;
}
m_wndList.ShowWindow( SW_SHOW );
return true;
}
if ( pHead->lFuncType == SMSFUNC_KHCARD_AGENT )
{
ANS_KHCard_Agent * pAgent = (ANS_KHCard_Agent *)pHead->pFrame;
ANS_KHCard_AgentData * pData = (ANS_KHCard_AgentData *)(pHead->pFrame+sizeof(ANS_KHCard_Agent));
CString str;
str.Format( _T("%d") , pAgent->lAgentID );
for ( int i=0 ; i<pAgent->lCount ; i++ )
{
m_wndList.SetItemText( pData->lItem ,4, str );
pData ++;
}
return true;
}
if ( pHead->lFuncType == SMSFUNC_KHCARD_PRO )
{
ANS_KHCard_Pro * pPro = (ANS_KHCard_Pro *)pHead->pFrame;
if ( pPro->bOK )
{
TCHAR szBuf[32]={0};
if ( pPro->lFiltStep<=0 )
_stprintf(szBuf , _T("%8d") , 200 ); //ĬÈϹýÂËÆðµãΪ200
else
_stprintf(szBuf , _T("%8d") , pPro->lFiltStep );
m_wndList.SetItemText(pPro->lItem,7,szBuf );
if ( !pPro->bEnable )
m_wndList.SetItemText(pPro->lItem,8,_T(" ÊÇ") );
else
m_wndList.SetItemText(pPro->lItem,8,_T("") );
}
}
return false;
}
long CK_KHCard::GetCurrentSelected()
{
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
if ( pos )
{
return m_wndList.GetNextSelectedItem(pos);
}
return -1;
}
void CK_KHCard::OnDblclkKhcardList(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CK_KHCard::OnRclickKhcardList(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
ShowRMenu();
}
void CK_KHCard::OnKeydownKhcardList(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CK_KHCard::ShowRMenu()
{
if (!m_pMainFrame->GetUserPurview(PURVIEW_FILT,false)) //ûÓв鿴ȨÏÞ
return ;
if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_SEE,false) )
{
return;
}
CMenu menu;
menu.CreatePopupMenu();
BOOL bLock = false;
long lItem = this->GetCurrentSelected();
if ( lItem >= 0 )
bLock = isLockItem( lItem , false ); //È¡µÃÊÇ·ñÕýÔÚËø¶¨
//Ìí¼Ó
menu.AppendMenu(MF_STRING , MENU_KHCARD_ADD, _T(" Ìí ¼Ó ") );
//ÐÞ¸Ä
if ( lItem >=0 && !bLock)
{
menu.AppendMenu(MF_STRING , MENU_KHCARD_AGENT, _T(" ¸ü¸Ä´úÀíÉÌ") );
menu.AppendMenu(MF_STRING , MENU_KHCARD_PRO, _T(" ¸ü¸ÄÊôÐÔ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_KHCARD_AGENT , _T(" ¸ü¸Ä´úÀíÉÌ") );
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_KHCARD_PRO , _T(" ¸ü¸ÄÊôÐÔ") );
}
menu.AppendMenu(MF_SEPARATOR );
menu.AppendMenu(MF_STRING , MENU_KHCARD_EXPORT, _T(" µ¼ ³ö ") );
//ÏÔʾ²Ëµ¥
POINT pt ;
::GetCursorPos( &pt );
//this->ClientToScreen( &pt);
menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
menu.DestroyMenu();
}
BOOL CK_KHCard::isLockItem(long lItem, BOOL bShowWarning)
{
BOOL b = (m_wndList.GetIconIndex(lItem) == 2);
if ( b && bShowWarning )
{
MessageBox( _T("Õý¼±»Ëø¶¨£¬ÇëµÈ´ý·þÎñÆ÷·µ»ØºóÔÙ²Ù×÷!") , _T("Ëø¶¨ÖÐ") , MB_ICONINFORMATION );
}
return b;
}
void CK_KHCard::SetLockItem(long lItem, BOOL bLock)
{
if ( bLock )
m_wndList.SetIconIndex( lItem , 2 );
else
m_wndList.SetIconIndex( lItem , 0 );
}
void CK_KHCard::On_KHCard_Add()
{
DLG_KHCard_Add dlg(this);
dlg.SetParam(&m_Agent);
if ( dlg.DoModal()==IDOK )
{
REQ_KHCard_Add * pAdd= new REQ_KHCard_Add;
pAdd->lAgentID = dlg.m_lAgentID;
pAdd->lCount = dlg.m_lCount;
pAdd->lPrice = dlg.m_lPrice;
pAdd->lSMSCount= dlg.m_lSMSCount;
m_pMainFrame->SendFrame(SMSFUNC_HT_ADD,(BYTE *)pAdd,sizeof(REQ_KHCard_Add));
}
}
void CK_KHCard::On_KHCard_Export()
{
//È¡±£´æÎļþÃû
static TCHAR BASED_CODE szFilter[] = _T("TXT Files (*.txt)|*.txt||");
CFileDialog dlg(false,_T("txt"),NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);
if (dlg.DoModal() != IDOK)
return ;
CString strName = dlg.GetPathName();
CFile file;
if ( !file.Open( strName , CFile::modeCreate|CFile::modeWrite ) )
{
MessageBox( _T("´ò¿ªÎļþ´íÎó£¬Çë¼ì²é!") , _T("´íÎó") , MB_ICONWARNING );
return ;
}
long lCount = m_wndList.GetItemCount();
CString strTemp;
CString strWrite;
for ( int i=0 ; i<lCount ; i++ )
{
strTemp = m_wndList.GetItemText(i,1);
strWrite = strTemp+_T(",");
strTemp = m_wndList.GetItemText(i,2);
strWrite += strTemp;
strWrite += _T("\r\n");
file.Write( strWrite , strWrite.GetLength());
}
file.Close();
MessageBox( _T("µ¼³öÎļþ³É¹¦£¡") );
}
void CK_KHCard::On_KHCard_Agent()
{
//ȡѡÖÐÐèÒªÐ޸ĵÄÊýÁ¿
long lSelCount = m_wndList.GetSelectedCount();
ANS_KHCard_AgentData * pModify = new ANS_KHCard_AgentData[lSelCount];
memset(pModify,0,sizeof(ANS_KHCard_AgentData)*lSelCount);
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
long lIndex=0;
while(pos)
{
pModify[lIndex].lItem =m_wndList.GetNextSelectedItem(pos);
if ( m_wndList.GetIconIndex(pModify[lIndex].lItem) == 0 ) //δÆôÓõIJÅÄÜÐÞ¸Ä
{
pModify[lIndex].lCardID=m_wndList.GetItemData(pModify[lIndex].lItem);
lIndex++;
}
}
DLG_KHCard_Agent dlg(this);
dlg.SetParam(&m_Agent,lIndex);
if ( dlg.DoModal()==IDOK )
{
long lSize = sizeof(REQ_KHCard_Agent)+sizeof(ANS_KHCard_AgentData)*lIndex;
BYTE * pData = new BYTE[lSize];
memset(pData,0,lSize);
REQ_KHCard_Agent * pAgent=(REQ_KHCard_Agent *)pData;
ANS_KHCard_AgentData * pSend = (ANS_KHCard_AgentData *)(pData+sizeof(REQ_KHCard_Agent));
pAgent->lCount = lIndex;
pAgent->lAgentID = dlg.m_lAgentID;
memcpy( pSend , pModify , sizeof(ANS_KHCard_AgentData)*lIndex);
m_pMainFrame->SendFrame(SMSFUNC_KHCARD_AGENT,(BYTE *)pData,lSize);
}
delete pModify;
}
void CK_KHCard::On_KHCard_Pro()
{
long lItem = GetCurrentSelected();
if ( lItem <0 )
return ;
CString str;
str = m_wndList.GetItemText( lItem , 7 );
long lFiltStep = _ttol(str);
str = m_wndList.GetItemText( lItem , 8 );
BOOL bEnable = str==_T(" ÊÇ")?false:true;
DLG_KHCard_Pro dlg(this);
dlg.SetParam(lFiltStep,bEnable);
if ( dlg.DoModal()==IDOK )
{
REQ_KHCard_Pro * pPro = new REQ_KHCard_Pro;
memset(pPro,0,sizeof(REQ_KHCard_Pro));
pPro->lCardID = m_wndList.GetItemData(lItem);
pPro->lItem = lItem;
pPro->lFiltStep=dlg.m_lFiltStep;
pPro->bEnable=dlg.m_lEnable;
m_pMainFrame->SendFrame(SMSFUNC_KHCARD_PRO,(BYTE *)pPro,sizeof(REQ_KHCard_Pro));
}
}
void CK_KHCard::OnKhcardQuery()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_SEE) )
{
return ;
}
if ( !UpdateData(true))
return ;
if ( m_lEnd>0 || m_lBegin>0 )
{
if ( m_lEnd < 80000000 )
m_lEnd += 80000000;
if ( m_lBegin < 80000000 )
m_lBegin += 80000000;
UpdateData(false);
if ( m_lEnd<m_lBegin )
{
MessageBox( _T("²éѯµÄÆðʼºÅÂë²»ÄÜ´óÓÚ½áÊøºÅÂ룡") , _T("´íÎó") , MB_ICONWARNING );
return ;
}
}
else
{
m_lEnd=0;
m_lBegin=0;
}
REQ_KHCard_See * pSee= new REQ_KHCard_See;
long lAgent = m_L_Agent.GetCurSel();
if ( lAgent == 0 ) //Ñ¡ÁËËùÓÐÆóÒµ
{
pSee->lAgentID = -1;
}
else
{
POSITION pos = (POSITION)m_L_Agent.GetItemData(lAgent);
POSITION pos2 = pos;
ANS_Agent_NameData * pData = m_Agent.GetNext( pos );
if (pData)
{
pSee->lAgentID = pData->lAgentID;
}
else
{
return;
}
}
pSee->lABegin = m_lBegin;;
pSee->lAEnd = m_lEnd;
m_pMainFrame->SendFrame(SMSFUNC_KHCARD_SEE,(BYTE *)pSee,sizeof(REQ_KHCard_See));
}