// TabDlg.cpp : implementation file
//

#include "stdafx.h"
#include "smsmanager.h"
#include "TabDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CTabDlg dialog
#include "MainFrm.h"
#include "ProcessSocket.h"

CTabDlg::CTabDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTabDlg::IDD, pParent)
	, m_bJCB(FALSE)
{
	//{{AFX_DATA_INIT(CTabDlg)
	m_lCorp = -1;
	m_tBegin = COleDateTime::GetCurrentTime();
	m_tEnd = COleDateTime::GetCurrentTime();
	m_lMobileType = -1;
	m_bOld = FALSE;
	m_lAgent = -1;
	//}}AFX_DATA_INIT
	m_bInit = false;
	m_bRefresh = false;

	m_lQueryAgentID =0;
	m_bQueryAll = false;
	m_lAllSend = 0; 
	m_lAllRecv = 0;
	m_lCurCorpID=0;
	m_lQueryCurCorpID = 0;

	lSmsCount=0;
	lSmsCountIndex=0;
	lSendCount=0;
	lSendCountIndex=0;
	lReportSucessCount=0;
	lReportSucessCountIndex=0;
	lReportFailCount=0;
	lReportFailCountIndex=0;
	lFailPerIndex=0;

	lMmsSmsCount=0;
	lMmsSmsCountIndex=0;
	lMmsSendCount=0;
	lMmsSendCountIndex=0;
	lMmsReportSucessCount=0;
	lMmsReportSucessCountIndex=0;
	lMmsReportFailCount=0;
	lMmsReportFailCountIndex=0;
	lMmsFailPerIndex=0;

	lOldIndex=0;
	lAddIndex=0;
	lUsedIndex=0;
	lMmsOldIndex=0;
	lMmsAddIndex=0;
	lMmsUsedIndex=0;
}


void CTabDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTabDlg)
	DDX_Control(pDX, IDC_TAB_AGENTID, m_E_AgentID);
	DDX_Control(pDX, IDC_TAB_AGENT, m_L_Agent);
	DDX_Control(pDX, IDC_TAB_CORPID, m_E_CorpID);
	DDX_Control(pDX, IDC_TAB_CORP, m_L_Corp);
	DDX_Control(pDX, IDC_TAB_S1, m_S_S1);
	DDX_Control(pDX, IDC_TAB_LIST, m_wndList);
	DDX_CBIndex(pDX, IDC_TAB_CORP, m_lCorp);
	DDX_DateTimeCtrl(pDX, IDC_TAB_TBEGIN, m_tBegin);
	DDX_DateTimeCtrl(pDX, IDC_TAB_TEND, m_tEnd);
	DDX_CBIndex(pDX, IDC_TAB_AGENT, m_lAgent);
	//}}AFX_DATA_MAP
	DDX_Check(pDX, IDC_TAB_JCB, m_bJCB);
}


BEGIN_MESSAGE_MAP(CTabDlg, CDialog)
	//{{AFX_MSG_MAP(CTabDlg)
	ON_WM_SIZE()
	ON_BN_CLICKED(IDC_TAB_QUERY, OnTabQuery)
	ON_BN_CLICKED(IDC_TAB_OLD, OnTabOld)
	ON_BN_CLICKED(IDC_TAB_QUERY2, OnTabQuery2)
	ON_NOTIFY(NM_RCLICK, IDC_TAB_LIST, OnRclickTabList)
	ON_BN_CLICKED(IDC_TAB_QUERY3, OnTabQuery3)
	ON_BN_CLICKED(IDC_TAB_QUERY4, OnTabQuery4)
	//}}AFX_MSG_MAP
	ON_COMMAND(MENU_TAB_COPY   , On_User_Copy )
	ON_COMMAND(MENU_TAB_COPYEX , On_User_CopyEx )

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTabDlg message handlers

BOOL CTabDlg::ReShow(BOOL bRefresh)
{
	ShowWindow( SW_SHOW );
	if ( bRefresh || !m_bRefresh )
	{
		RefreshInfo();
	}
	return true;
}

BOOL CTabDlg::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_TAB) );
	m_wndList.SubClassWindow2();
	if ( m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_ADD,false) )
	{
		m_wndList.SetHeadings(_T("���,50; ��ҵID,60;��ҵ����,120;��������,100;�����ύ��,100;���Ż�ִ�ɹ�,100;���Ż�ִʧ��,100;����ʧ����,100;��������,100;�����ύ��,100;���Ż�ִ�ɹ�,100;���Ż�ִʧ��,100;����ʧ����,100;"));
	}
	else
	{
		m_wndList.SetHeadings(_T("���,50; ��ҵID,60;��ҵ����,120;��������,100;��������,100;"));
	}
	//m_wndList.SetHeadings(_T("���,50; ��������,100;��������,100;�Ʒ�����,100;"));
	m_wndList.SetGridLines(true);
	m_wndList.SetImageList(&m_Image,LVSIL_SMALL);

	m_bInit = true;

/*
	//Ĭ��ȡ���µ�����
	SYSTEMTIME t; ::GetLocalTime(&t);
	t.wDay = 1;//��1����
	t.wMonth = t.wMonth-1;
	if ( t.wMonth <=0 )
	{
		t.wMonth = 12;
		t.wYear  = t.wYear-1;
	}
	m_tBegin.SetDate( t.wYear,t.wMonth,t.wDay );  //��ʼ
	if ( t.wMonth == 1 ||
		 t.wMonth == 3 ||
		 t.wMonth == 5 ||
		 t.wMonth == 7 ||
		 t.wMonth == 8 ||
		 t.wMonth == 10 ||
		 t.wMonth == 12 )
	{
		 t.wDay = 31;
	}
	else
		if (t.wMonth == 2 )
			t.wDay = 28;
		else
			t.wDay = 30;
	m_tEnd.SetDate( t.wYear,t.wMonth,t.wDay );//����
*/
	SYSTEMTIME t; ::GetLocalTime(&t);
	m_tBegin.SetDate( t.wYear,t.wMonth,1 );  //��ʼ
	m_tEnd.SetDate( t.wYear,t.wMonth,t.wDay );//����

#ifdef SMSCENTER_NX
	COleDateTime t2 = COleDateTime::GetCurrentTime();
	COleDateTimeSpan tSpan2(1,0,0,0);
	t2 = t2-tSpan2;
	m_tEnd.SetDate( t2.GetYear(),t2.GetMonth(),t2.GetDay() );//����
#endif

	m_lMobileType = 0;  //Ĭ�ϲ鿴�����ֻ�����

#ifdef  SMSCENTER_ADC
	GetDlgItem(IDC_TAB_QUERY4)->ShowWindow(SW_SHOW);
#endif
#ifdef SMSCENTER_NX
	GetDlgItem(IDC_TAB_AGENT_S)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_TAB_AGENT)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_TAB_AGENTID)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_TAB_QUERY3)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_TAB_JCB)->ShowWindow(SW_HIDE);
#endif
	UpdateData(false);
		
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CTabDlg::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 CTabDlg::ReHide()
{
	ShowWindow( SW_HIDE );
	return true;
}

BOOL CTabDlg::RefreshInfo()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_TAB) )
	{
		return false;
	}
	m_pMainFrame->SendFrame(SMSFUNC_CORP_NAME,NULL,0);
	m_pMainFrame->SendFrame(SMSFUNC_AGENT_NAME,NULL,0);   //ȡ������Ϣ

	return true;
}

BOOL CTabDlg::ProcessSocket(Socket_Head *pHead)
{
	CString strTemp;
	//ȡ������Ϣ
	if (pHead->lFuncType == SMSFUNC_CORP_NAME)
	{
		m_bRefresh = true;  //�Ѿ�ˢ�¹�
		ANS_Corp_Name     * pCorp = (ANS_Corp_Name *)pHead->pFrame;
		ANS_Corp_NameData * pData = (ANS_Corp_NameData *)(pHead->pFrame+sizeof(ANS_Corp_Name));
		m_L_Corp.ResetContent();  //ɾ��ԭ���е���ҵ
		m_L_Corp.AddString( _T("������ҵ") );
		this->Close_Corp();              //�ر�ԭ����
		for ( int i=0;i<pCorp->lCount;i++ )
		{
			ANS_Corp_NameData * pNewData = new ANS_Corp_NameData;
			*pNewData = *pData;
			POSITION pos = m_Corp.AddTail(pNewData);
			strTemp.Format( _T("%d-%s"),pData->lCorpID,pData->szCorpName);
			long lItem = m_L_Corp.AddString( strTemp );
			m_L_Corp.SetItemData( lItem , (DWORD_PTR)pos);
			pData ++;
		}
		m_L_Corp.SetCurSel(0);
		return true;
	}
	
	//ȡ��������Ϣ
	if (pHead->lFuncType == SMSFUNC_AGENT_NAME)
	{
		ANS_Agent_Name     * pAgent = (ANS_Agent_Name *)pHead->pFrame;
		ANS_Agent_NameData * pData = (ANS_Agent_NameData *)(pHead->pFrame+sizeof(ANS_Agent_Name));
		this->Close_Agent();
		m_L_Agent.ResetContent();
		long lItem;
		CString strTemp;
		POSITION pos;
		lItem = m_L_Agent.AddString( _T("�������") );
		m_L_Agent.SetItemData( lItem , (DWORD_PTR)-10);
		lItem = m_L_Agent.AddString( _T("�����û�") );
		m_L_Agent.SetItemData( lItem , (DWORD_PTR)-11);
		lItem = m_L_Agent.AddString( _T("�����û�") );
		m_L_Agent.SetItemData( lItem , (DWORD_PTR)-12);
		for ( int i=0;i<pAgent->lCount;i++ )
		{
			ANS_Agent_NameData * pNewData = new ANS_Agent_NameData;
			*pNewData = *pData;
			pos = m_Agent.AddTail(pNewData);

			strTemp.Format( _T("%d-%s"),pNewData->lAgentID,pNewData->szAgentName);
			lItem = m_L_Agent.AddString( strTemp );
			//m_L_Agent.SetItemData( lItem , (DWORD_PTR)pos);
			m_L_Agent.SetItemData( lItem , (DWORD_PTR)pNewData->lAgentID);

			pData ++;
		}
		m_L_Agent.SetCurSel(0);
		return true;
	}
	if ( pHead->lFuncType == SMSFUNC_TAB )
	{
		ANS_Tab     * pTab  = (ANS_Tab *)pHead->pFrame;
		ANS_TabData * pData = (ANS_TabData *)(pHead->pFrame+sizeof(ANS_Tab));
		if ( m_bQueryAll )
		{
			TCHAR Buf[32];
			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("%d") , m_lCurCorpID);
			m_wndList.SetItemText(lCount,1,Buf);
			m_wndList.SetItemText(lCount,2,m_strCurName);
			
			long lSendCount=0;
			long lRecvCount=0;
			for ( int i=0;i<pTab->lCount;i++)
			{
				switch( pData->lSmsType )
				{
				case SMSTYPE_RECV:
					lRecvCount += pData->lCount;
					break;
				default:
					lSendCount += pData->lSFCount;
					break;
				}
				pData++;
			}
			m_lAllSend   +=lSendCount;
			m_lAllRecv   +=lRecvCount;
			
			m_wndList.SetItemText( lCount ,3 , _itot(lSendCount,Buf,10));  //����
			m_wndList.SetItemText( lCount ,4 , _itot(lRecvCount,Buf,10));  //����
			QueryNext();
		}
		else
		{
			TCHAR Buf[32];
			long lCount;
			long lSmsCount = 0;
			long lSmsSFCount=0;
			for ( int i=0;i<pTab->lCount;i++)
			{
				lCount = m_wndList.GetItemCount();
				m_wndList.InsertItem( lCount , _itot(i+1,Buf,10),0);  //���
				_tcscpy( Buf , _T("δ֪") );
				switch( pData->lSmsType )
				{
				case SMSTYPE_SEND:
					_tcscpy(Buf , _T("�� ��") );
					break;
				case SMSTYPE_ZF:
					_tcscpy(Buf , _T("ת ��") );
					break;
				case SMSTYPE_ALARM:
					_tcscpy(Buf , _T("�ճ�����") );
					break;
				case SMSTYPE_EMAIL:
					_tcscpy(Buf , _T("�����ʲ�") );
					break;
				case SMSTYPE_RECV:
					_tcscpy(Buf , _T("�� ��") );
					break;
				case SMSTYPE_SP:
					_tcscpy(Buf , _T("���ֶ���") );
					break;
				case SMSTYPE_SWT:
					_tcscpy(Buf , _T("��������ͨ") );
					break;
#ifdef SMSCENTER_ADC
				case SMSTYPE_ADC:
					_tcscpy(Buf , _T("ADCҵ��") );
					break;
#endif
				}
				m_wndList.SetItemText( lCount ,1 , Buf );            //����
				m_wndList.SetItemText( lCount ,2 , _itot(pData->lCount,Buf,10));  //����
				m_wndList.SetItemText( lCount ,3 , _itot(pData->lSFCount,Buf,10));  //����
				lSmsCount += pData->lCount;
				lSmsSFCount += pData->lSFCount;
				pData++;
			}
			lCount = m_wndList.GetItemCount();
			m_wndList.InsertItem( lCount , _T(""),0);  //�ϼ�
			m_wndList.SetItemText( lCount,1, _T("�� ��"));  //�ϼ�
			m_wndList.SetItemText( lCount,2, _itot(lSmsCount,Buf,10));  //�ϼ�
			m_wndList.SetItemText( lCount,3, _itot(lSmsSFCount,Buf,10));  //�ϼ�
		}
		return true;
	}
	if ( pHead->lFuncType == SMSFUNC_ADCHTHS )
	{
		ANS_ADCHTHS     * pTab  = (ANS_ADCHTHS *)pHead->pFrame;
		ANS_ADCHTHSData * pData = (ANS_ADCHTHSData *)(pHead->pFrame+sizeof(ANS_ADCHTHS));
		TCHAR Buf[32];
		CString str;
		for ( int i=0;i<pTab->lCount;i++)
		{
			//_T("���,50; ��ҵ����,120;ҵ��Ա����,80;����������,120;��������;120;"));
			//(_T("���,50; ��ҵ����,250;ҵ��Ա����,80;����������,180;��������,120;��ͨ,60;��������,120;��ͨ����,120;"));

			m_wndList.InsertItem( i , _itot(i+1,Buf,10),0);  //���
			str.Format( _T("%d - %s") , pData->lCorpID , pData->szCorpName );
			m_wndList.SetItemText(i,1,str);
			m_wndList.SetItemText(i,2,pData->szYWYName);
			m_wndList.SetItemText(i,3,pData->szAgentName);
			str.Format( _T("%04d.%02d.%02d") , pData->tHSTime.wYear,pData->tHSTime.wMonth,pData->tHSTime.wDay );
			m_wndList.SetItemText(i,4,str);
			if ( pData->szStatus[0] == '1' )
				m_wndList.SetItemText(i,5,_T(" ��"));
			else
				m_wndList.SetItemText(i,5,_T(" ��"));
			str.Format( _T("%04d.%02d.%02d") , pData->tRegTime.wYear,pData->tRegTime.wMonth,pData->tRegTime.wDay );
			m_wndList.SetItemText(i,6,str);
			str.Format( _T("%04d.%02d.%02d") , pData->tKTTime.wYear,pData->tKTTime.wMonth,pData->tKTTime.wDay );
			m_wndList.SetItemText(i,7,str);



			pData ++;
		}

		return true;
	}

	
	return false;
}

void CTabDlg::Close()
{
	Close_Corp();
	Close_Agent();
}

void CTabDlg::OnTabQuery() 
{
	UpdateData(true);
	if ( m_tEnd < m_tBegin )
	{
		MessageBox( _T("��ѯ�������ڲ���С����ʼ���ڣ������!") , _T("����") , MB_ICONWARNING );
		return ;
	}
	if ( m_tBegin>COleDateTime::GetCurrentTime() )
	{
		MessageBox( _T("��ѯ��ʼ���ڲ��ܴ��ڵ�ǰ���ڣ������!") , _T("����") , MB_ICONWARNING );
		return ;
	}

	lSmsCount=0;
	lSmsCountIndex=0;
	lSendCount=0;
	lSendCountIndex=0;
	lReportSucessCount=0;
	lReportSucessCountIndex=0;
	lReportFailCount=0;
	lReportFailCountIndex=0;
	lFailPerIndex=0;

	lMmsSmsCount=0;
	lMmsSmsCountIndex=0;
	lMmsSendCount=0;
	lMmsSendCountIndex=0;
	lMmsReportSucessCount=0;
	lMmsReportSucessCountIndex=0;
	lMmsReportFailCount=0;
	lMmsReportFailCountIndex=0;
	lMmsFailPerIndex=0;

	lOldIndex=0;
	lAddIndex=0;
	lUsedIndex=0;
	lMmsOldIndex=0;
	lMmsAddIndex=0;
	lMmsUsedIndex=0;

	m_tBegin.GetAsSystemTime(m_tQueryBegin);
	m_tEnd.GetAsSystemTime(m_tQueryEnd);
	m_tQueryEnd.wHour=23;
	m_tQueryEnd.wMinute=59;
	m_tQueryEnd.wSecond=59;
	m_bQueryJCB = m_bJCB;


	if ( m_lAgent == 0 ) //ѡ�������д�����
	{
		m_bQueryAll = false;
		m_wndList.DeleteAllItems();
		m_wndList.DeleteAllColumns();
		CString strHead = _T("���,50;��ҵID,60;��ҵ����,120; ��������,100;�����ύ��,100;���Ż�ִ�ɹ�,100;���Ż�ִʧ��,100;����ʧ����,100;��������,100;�����ύ��,100;���Ż�ִ�ɹ�,100;���Ż�ִʧ��,100;����ʧ����,100;");
		if ( m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_ADD,false) )
		{
			strHead = _T("���,50;��ҵID,60;��ҵ����,120; ��������,100;�����ύ��,100;���Ż�ִ�ɹ�,100;���Ż�ִʧ��,100;����ʧ����,100;��������,100;�����ύ��,100;���Ż�ִ�ɹ�,100;���Ż�ִʧ��,100;����ʧ����,100;");
		}
		else
		{
			strHead = _T("���,50; ��ҵ����,120;��������,100;��������,100;");
		}
		long lCorpID = -1;
		if ( m_lCorp <= 0 )  //ѡ��������ҵ
		{
			lCorpID = -1;
		}
		else
		{
			POSITION pos = (POSITION)m_L_Corp.GetItemData(m_lCorp);
			POSITION pos2 = pos;
			ANS_Corp_NameData * pData = m_Corp.GetNext( pos );
			if (pData)
			{
				lCorpID = pData->lCorpID;
			}
			else
			{
				return;
			}
		}
		BOOL bJCB=false;
		if ( this->m_bJCB && lCorpID>0)
		{
			strHead = strHead + _T("�������ڽ��,100;���ű�������,100;���ű��ڽ��,100;�������ڽ��,100;���ű�������,100;���ű��ڽ��,100;");
			bJCB = true;
		}
		m_wndList.SetHeadings(strHead);
		//pTab->lMobileType = m_lMobileType-1;  //�ֻ�����
		//pTab->bOld = m_bOld;            //�Ƿ��ѯ������
#ifdef SMSCENTER_NX
		if (lCorpID <= 0)
		{
			m_bQueryAll = true;
			m_lAllSend = 0;
			m_lAllRecv = 0;
			m_lCurCorpID = 0;
			m_lQueryCurCorpID = 0;
			m_strCurName = _T("");
			QueryNext();
			return;
		}
#endif

		REQ_Bill4 * pBill = new REQ_Bill4;memset(pBill,0,sizeof(REQ_Bill4));
		pBill->lUserID = -1;                //��ѯ�û�ID

		m_tBegin.GetAsSystemTime(pBill->tBegin);
		m_tEnd.GetAsSystemTime(pBill->tEnd);
		pBill->lCorpID = lCorpID;
		pBill->tEnd.wHour=23;
		pBill->tEnd.wMinute=59;
		pBill->tEnd.wSecond=59;
		pBill->bJCB = bJCB;             //��ѯ����
		m_pMainFrame->SendFrame(SMSFUNC_BILL4,(BYTE*)pBill,sizeof(REQ_Bill4));
	}
	else
	{
		m_wndList.DeleteAllItems();
		m_wndList.DeleteAllColumns();
		CString strHead = _T("���,50; ��ҵID,60;��ҵ����,120;��������,100;�����ύ��,100;���Ż�ִ�ɹ�,100;���Ż�ִʧ��,100;����ʧ����,100;��������,100;�����ύ��,100;���Ż�ִ�ɹ�,100;���Ż�ִʧ��,100;����ʧ����,100;");
		if ( m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_ADD,false) )
		{
			strHead = _T("���,50; ��ҵID,60;��ҵ����,120;��������,100;�����ύ��,100;���Ż�ִ�ɹ�,100;���Ż�ִʧ��,100;����ʧ����,100;��������,100;�����ύ��,100;���Ż�ִ�ɹ�,100;���Ż�ִʧ��,100;����ʧ����,100;");
		}
		else
		{
			strHead = _T("���,50; ��ҵID,60;��ҵ����,120;��������,100;��������,100;");
		}
		if ( this->m_bJCB)
			strHead = strHead + _T("�������ڽ��,100;���ű�������,100;���ű��ڽ��,100;�������ڽ��,100;���ű�������,100;���ű��ڽ��,100;");
		m_wndList.SetHeadings(strHead);

		m_lQueryAgentID = m_L_Agent.GetItemData(m_lAgent);
		m_bQueryAll = true;
		m_lAllSend = 0;
		m_lAllRecv = 0;
		m_lCurCorpID=0;
		m_lQueryCurCorpID=0;
		m_strCurName = _T("");

		QueryNext();
	}
	return ;
}

void CTabDlg::OnTabOld() 
{
	if ( m_B_Old.GetCheck() )
	{
		GetDlgItem(IDC_TAB_MOBILETYPE)->EnableWindow(true);
	}
	else
	{
		GetDlgItem(IDC_TAB_MOBILETYPE)->EnableWindow(false);
	}
	
}

void CTabDlg::OnTabQuery2() 
{
	CString strTemp;
	CString strFind;
	m_E_CorpID.GetWindowText(strFind);
	if ( strFind.GetLength()<=0 )
		return ;
	long lSel   = m_L_Corp.GetCurSel();
	long lCount = m_L_Corp.GetCount();
	for ( int i=lSel+1 ; i<lCount ; i++ )
	{
		m_L_Corp.GetLBText(i,strTemp);
		if ( strTemp.Find(strFind)>=0 )
		{
			m_L_Corp.SetCurSel(i);
			return ;
		}
	}
	for ( i=0 ; i<lSel ; i++ )
	{
		m_L_Corp.GetLBText(i,strTemp);
		if ( strTemp.Find(strFind)>=0 )
		{
			m_L_Corp.SetCurSel(i);
			return ;
		}
	}
}

void CTabDlg::OnRclickTabList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;

	ShowRMenu();
}

void CTabDlg::ShowRMenu()
{
	if (!m_pMainFrame->GetUserPurview(PURVIEW_TAB,false))  //û�в鿴Ȩ��
		return ;

	CMenu menu;
	menu.CreatePopupMenu();
	//����
	menu.AppendMenu(MF_STRING     , MENU_TAB_COPY, _T(" ����_���� ") );
	menu.AppendMenu(MF_STRING     , MENU_TAB_COPYEX, _T(" ����_�ʵ� ") );

	//��ʾ�˵�
	POINT pt ;
	::GetCursorPos( &pt );
	//this->ClientToScreen( &pt);
	menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
	menu.DestroyMenu();
}

void CTabDlg::On_User_Copy()
{
	m_wndList.CopyToClipboard();
	return ;
}

void CTabDlg::On_User_CopyEx()
{
	CString     strTab;
	SYSTEMTIME t;::GetLocalTime(&t);
	long lCount=m_wndList.GetItemCount();
	for ( int i=0 ; i<lCount ; i++ )
	{
		CString strCorpID,strCorpName,strSmsCount,strSend,strReportSucess,strReportFail,strMmsSmsCount,strMmsSend,strMmsReportSucess,strMmsReportFail,strOld,strAdd,strUsed,strMmsOld,strMmsAdd,strMmsUsed;
		strCorpID = m_wndList.GetItemText(i,1);
		strCorpName = m_wndList.GetItemText(i,2);
		if ( _ttol(strCorpID) <100000 )  //��ҵID���ԣ�����һ��
			continue;
		if ( lSmsCountIndex>0 )
			strSmsCount = m_wndList.GetItemText(i,lSmsCountIndex);
		if ( lMmsSmsCountIndex>0 )
			strMmsSmsCount = m_wndList.GetItemText(i,lMmsSmsCountIndex);
		BOOL bJCB = false;
		if ( lOldIndex>0 )
		{
			bJCB = true;
			strOld = m_wndList.GetItemText(i,lOldIndex);
		}
		if ( lAddIndex>0 )
			strAdd = m_wndList.GetItemText(i,lAddIndex);
		if ( lUsedIndex>0 )
			strUsed = m_wndList.GetItemText(i,lUsedIndex);
		if ( lMmsOldIndex>0 )
			strMmsOld = m_wndList.GetItemText(i,lMmsOldIndex);
		if ( lMmsAddIndex>0 )
			strMmsAdd = m_wndList.GetItemText(i,lMmsAddIndex);
		if ( lMmsUsedIndex>0 )
			strMmsUsed = m_wndList.GetItemText(i,lMmsUsedIndex);

		CString strTemp,strTemp2;
		CString strHead;
		CString strJCB;
#ifdef MOBSET_OEM
		strHead += _T("\r\n\r\n                ҵ���ʵ�\r\n\r\n\r\n");
#else
		strHead += _T("\r\n\r\n                ������ҵ���ʵ�\r\n\r\n\r\n");
#endif
		strTemp.Format( _T("    ��ҵID:%s\r\n") , strCorpID );
		strHead += strTemp;
		strTemp.Format( _T("    ��ҵ����:%s\r\n") , strCorpName);
		strHead += strTemp;
		strTemp.Format( _T("    �ʵ�ʱ��:%04d��%02d��%02d�� -- %04d��%02d��%02d��\r\n"),m_tQueryBegin.wYear,m_tQueryBegin.wMonth,m_tQueryBegin.wDay,m_tQueryEnd.wYear,m_tQueryEnd.wMonth,m_tQueryEnd.wDay);
		strHead += strTemp;
		strTemp.Format( _T("    ��ѯʱ��:%04d��%02d��%02d�� %02d:%02d\r\n\r\n\r\n") , t.wYear,t.wMonth,t.wDay,t.wHour,t.wMinute );
		strHead += strTemp;
		long lSmsCount = 0;
		long lSmsSFCount = 0;
		strTab=strTab + strHead+_T("     ҵ������           ҵ������");
		if ( bJCB )
		{
			strTab+= _T("        ���ڽ��        ��������        ���ڽ��");
		}
		strTab += _T("\r\n");
		strTab+=_T("    ==================================");
		if ( bJCB )
		{
			strTab+= _T("===========================================");
		}
		strTab += _T("\r\n");
		for ( int i=0;i<2;i++)
		{
			if ( i==0 )
			{
				strTemp2.Format( _T("%8s") , _T("����") );
				strTemp= strTemp2;
				strTemp2.Format( _T("%21s") , strSmsCount );
				strTemp+= strTemp2;
				if ( bJCB )
				{
					strTemp2.Format( _T("%16s") , strOld );
					strTemp+= strTemp2;
					strTemp2.Format( _T("%16s") , strAdd );
					strTemp+= strTemp2;
					strTemp2.Format( _T("%16s") , strUsed );
					strTemp+= strTemp2;
				}
				strTemp+=_T("\r\n");
			}
			if ( i==1 )
			{
				strTemp2.Format( _T("%8s") , _T("����") );
				strTemp= strTemp2;
				strTemp2.Format( _T("%21s") , strMmsSmsCount );
				strTemp+= strTemp2;
				if ( bJCB )
				{
					strTemp2.Format( _T("%16s") , strMmsOld );
					strTemp+= strTemp2;
					strTemp2.Format( _T("%16s") , strMmsAdd );
					strTemp+= strTemp2;
					strTemp2.Format( _T("%16s") , strMmsUsed );
					strTemp+= strTemp2;
				}
				strTemp+=_T("\r\n");
			}
			strTab += strTemp;
		}
		strTab+=_T("    ----------------------------------");
		if ( bJCB )
		{
			strTab+=_T("-------------------------------------------");
		}
		strTab +=_T("\r\n\r\n\r\n");
	}

	HGLOBAL hglbCopy;
	LPTSTR  lptstrCopy; 
    if (!OpenClipboard()) 
        return ;
    EmptyClipboard();

	hglbCopy = GlobalAlloc(GMEM_MOVEABLE, (strTab.GetLength()+1)*sizeof(TCHAR));
	if (hglbCopy == NULL) 
	{ 
		CloseClipboard(); 
		return ; 
	} 
	lptstrCopy = (TCHAR *)GlobalLock(hglbCopy); 
	_tcscpy(lptstrCopy,strTab);
	GlobalUnlock(hglbCopy); 
#ifdef _UNICODE
	::SetClipboardData(CF_UNICODETEXT, hglbCopy);
#else
	::SetClipboardData(CF_TEXT, hglbCopy);
#endif

	CloseClipboard(); 

	return ;
}

void CTabDlg::Close_Agent()
{
	//������������
	while (!m_Agent.IsEmpty())
	{
		ANS_Agent_NameData * pAgent = m_Agent.GetHead();
		m_Agent.RemoveHead();
		delete pAgent;
	}
}

void CTabDlg::Close_Corp()
{
	//������������
	while (!m_Corp.IsEmpty())
	{
		ANS_Corp_NameData * pData = m_Corp.GetHead();
		m_Corp.RemoveHead();
		delete pData;
	}
}

void CTabDlg::QueryNext()
{
	if ( m_lQueryCurCorpID>=m_L_Corp.GetCount()-1 )  //��ѯ���
	{
		long lItem=m_wndList.GetItemCount();
		m_wndList.InsertItem(lItem,_T(""),0);
		m_wndList.InsertItem(lItem,_T("�ϼ�"),0);
		CString str;
		str.Format(_T("%d") , lSmsCount );
		m_wndList.SetItemText(lItem,lSmsCountIndex,str);

		str.Format(_T("%d") , lMmsSmsCount );
		m_wndList.SetItemText(lItem,lMmsSmsCountIndex,str);

		return;
	}
	m_lQueryCurCorpID ++ ; 
	m_L_Corp.SetCurSel(m_lQueryCurCorpID);

	POSITION pos = (POSITION)m_L_Corp.GetItemData(m_lQueryCurCorpID);
	POSITION pos2 = pos;
	ANS_Corp_NameData * pData = m_Corp.GetNext( pos );
	if (pData)
	{
#ifndef SMSCENTER_NX
		if ( (m_lQueryAgentID == -11 &&  pData->lAgentID<=0 ) ||
			 (m_lQueryAgentID == -12 &&  pData->lAgentID>0 ) ||
			 (pData->lAgentID == m_lQueryAgentID ))
#else
		if (true)
#endif
		{
			REQ_Bill4 * pBill = new REQ_Bill4;memset(pBill,0,sizeof(REQ_Bill4));
			pBill->lUserID = -1;                //��ѯ�û�ID

			pBill->tBegin = m_tQueryBegin;
			pBill->tEnd = m_tQueryEnd;
			pBill->bJCB = m_bQueryJCB;

			pBill->lCorpID = pData->lCorpID;
			m_lCurCorpID  = pData->lCorpID;
			m_strCurName  = pData->szCorpName;
			m_pMainFrame->SendFrame(SMSFUNC_BILL4,(BYTE*)pBill,sizeof(REQ_Bill4));
		}
		else
		{
			QueryNext();
		}
	}
	else
	{
		return;
	}

}

void CTabDlg::OnTabQuery3() 
{
	CString strTemp;
	CString strFind;
	m_E_AgentID.GetWindowText(strFind);
	if ( strFind.GetLength()<=0 )
		return ;
	long lSel   = m_L_Agent.GetCurSel();
	long lCount = m_L_Agent.GetCount();
	for ( int i=lSel+1 ; i<lCount ; i++ )
	{
		m_L_Agent.GetLBText(i,strTemp);
		if ( strTemp.Find(strFind)>=0 )
		{
			m_L_Agent.SetCurSel(i);
			//OnSelchangeUserAgent();
			return ;
		}
	}
	for ( i=0 ; i<lSel ; i++ )
	{
		m_L_Agent.GetLBText(i,strTemp);
		if ( strTemp.Find(strFind)>=0 )
		{
			m_L_Agent.SetCurSel(i);
			//OnSelchangeUserAgent();
			return ;
		}
	}	
}

void CTabDlg::OnTabQuery4() 
{
	UpdateData(true);
	if ( m_tEnd < m_tBegin )
	{
		MessageBox( _T("��ѯ�������ڲ���С����ʼ���ڣ������!") , _T("����") , MB_ICONWARNING );
		return ;
	}

	m_wndList.DeleteAllItems();
	m_wndList.DeleteAllColumns();
	m_wndList.SetHeadings(_T("���,50; ��ҵ����,250;ҵ��Ա����,80;����������,180;��������,120;��ͨ,60;��������,120;��ͨ����,120;"));


	REQ_ADCHTHS * pTab = new REQ_ADCHTHS;memset(pTab,0,sizeof(REQ_ADCHTHS));
	m_tBegin.GetAsSystemTime( pTab->tBegin );
	m_tEnd.GetAsSystemTime( pTab->tEnd );
	m_pMainFrame->SendFrame(SMSFUNC_ADCHTHS,(BYTE*)pTab,sizeof(REQ_ADCHTHS));

}

BOOL CTabDlg::ProcessSocket(Socket_Head_Add *pHead, BYTE *pFrame)
{
	CString str;
	if ( pHead->lFuncType == SMSFUNC_BILL4 )
	{
		ANS_Bill4     * pBill = (ANS_Bill4 *)pFrame;
		ANS_BillData4 * pData = (ANS_BillData4 *)(pFrame+sizeof(ANS_Bill4));

		if ( pBill->lCount ==2 )
		{
			long lItem = m_wndList.GetItemCount();
			str.Format(_T("%d") , lItem+1);
			m_wndList.InsertItem(lItem,str,0);
			long lTemp=1;
			str.Format(_T("%d") , pBill->lCorpID);
			m_wndList.SetItemText(lItem,lTemp++,str);
			m_wndList.SetItemText(lItem,lTemp++,pBill->szCorpName);
			str.Format(_T("%d") , pData[0].lSendCount );
			lSmsCount += pData[0].lSendCount;
			lSmsCountIndex = lTemp;
			m_wndList.SetItemText(lItem,lTemp++,str);
			if ( m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_ADD,false) )
			{
				str.Format(_T("%d") , pData[0].lSend );
				lSendCountIndex = lTemp;
				m_wndList.SetItemText(lItem,lTemp++,str);
				str.Format(_T("%d") , pData[0].lReportSucess );
				lReportSucessCountIndex = lTemp;
				m_wndList.SetItemText(lItem,lTemp++,str);
				str.Format(_T("%d") , pData[0].lReportFail );
				lReportFailCountIndex = lTemp;
				m_wndList.SetItemText(lItem,lTemp++,str);
				str=_T("0.0%");
				if ( pData[0].lReportFail >0 && pData[0].lSend>0 )
				{
					str.Format( _T("%.1f%%") , ((float)pData[0].lReportFail/(float)pData[0].lSend)*100.0f);
				}
				lFailPerIndex = lTemp;
				m_wndList.SetItemText(lItem,lTemp++,str);
			}
			str.Format(_T("%d") , pData[1].lSendCount );
			lMmsSmsCount += pData[1].lSendCount;
			lMmsSmsCountIndex = lTemp;
			m_wndList.SetItemText(lItem,lTemp++,str);
			if ( m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_ADD,false) )
			{
				str.Format(_T("%d") , pData[1].lSend );
				lMmsSendCountIndex = lTemp;
				m_wndList.SetItemText(lItem,lTemp++,str);
				str.Format(_T("%d") , pData[1].lReportSucess );
				lMmsReportSucessCountIndex = lTemp;
				m_wndList.SetItemText(lItem,lTemp++,str);
				str.Format(_T("%d") , pData[1].lReportFail );
				lMmsReportFailCountIndex = lTemp;
				m_wndList.SetItemText(lItem,lTemp++,str);
				str=_T("0.0%");
				if ( pData[1].lReportFail >0 && pData[1].lSend>0 )
				{
					str.Format( _T("%.1f%%") , ((float)pData[1].lReportFail/(float)pData[1].lSend)*100.0f);
				}
				lMmsFailPerIndex = lTemp;
				m_wndList.SetItemText(lItem,lTemp++,str);
			}
			if ( pBill->bJCB )
			{
				str.Format(_T("%d") , pData[0].jcb.lOldCount );
				lOldIndex = lTemp;
				m_wndList.SetItemText(lItem,lTemp++,str);
				str.Format(_T("%d") , pData[0].jcb.lAddCount );
				lAddIndex = lTemp;
				m_wndList.SetItemText(lItem,lTemp++,str);
				str.Format(_T("%d") , pData[0].jcb.lUseCount );
				lUsedIndex = lTemp;
				m_wndList.SetItemText(lItem,lTemp++,str);
				str.Format(_T("%d") , pData[1].jcb.lOldCount );
				lMmsOldIndex = lTemp;
				m_wndList.SetItemText(lItem,lTemp++,str);
				str.Format(_T("%d") , pData[1].jcb.lAddCount );
				lMmsAddIndex = lTemp;
				m_wndList.SetItemText(lItem,lTemp++,str);
				str.Format(_T("%d") , pData[1].jcb.lUseCount );
				lMmsUsedIndex = lTemp;
				m_wndList.SetItemText(lItem,lTemp++,str);
			}
		}
		if ( m_bQueryAll )
			QueryNext();
		return true;
	}
	return false;
}