// FSmsJS.cpp : implementation file
//

#include "stdafx.h"
#include "CorpSms.h"
#include "FSmsJS.h"

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

/////////////////////////////////////////////////////////////////////////////
// CFSmsJS dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_RecvSms.h"
#include "DLG_SmsLogSee.h"
#include "DLG_SMSJS_Export.h"
#include "DLG_TypeSetup.h"

#ifdef SUPPERGSM
#include "..\public\SendThread\SendThread.h"
#endif

#include "DLG_Find_RecvSms.h"

CFSmsJS::CFSmsJS(CWnd* pParent /*=NULL*/)
	: CDialog(CFSmsJS::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFSmsJS)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT

	m_bInit = false;
	m_bRefresh = false;

	memset(&m_Setup,0,sizeof(m_Setup));
#ifdef SUPPERGSM
	m_pSendThread = NULL;
#endif
	m_bOneGetSim = true;
	m_lMobileRecvCount = 0;
	m_pMenuType = NULL;
	m_lMenuTypeCount = 0;
	m_bShowToday = true;
	m_bRecvFirst = true;
	m_lIconCount = 0;
}


void CFSmsJS::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFSmsJS)
	DDX_Control(pDX, IDC_SMSJS_LIST, m_wndList);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CFSmsJS, CDialog)
	//{{AFX_MSG_MAP(CFSmsJS)
	ON_WM_SIZE()
	ON_NOTIFY(LVN_KEYDOWN, IDC_SMSJS_LIST, OnKeydownSmsjsList)
	ON_NOTIFY(NM_RCLICK, IDC_SMSJS_LIST, OnRclickSmsjsList)
	ON_NOTIFY(NM_DBLCLK, IDC_SMSJS_LIST, OnDblclkSmsjsList)
	ON_WM_TIMER()
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
	ON_COMMAND( MENU_SMSJS_DEL  , On_User_Del )
	ON_COMMAND( MENU_SMSJS_SEE  , On_User_See )
	ON_COMMAND( MENU_SMSJS_SEND , On_User_Send )
	ON_COMMAND( MENU_SMSJS_ZF   , On_User_ZF )
	ON_COMMAND( MENU_SMSJS_EXPORT , On_User_Export )
	ON_COMMAND( MENU_SMSJS_REFRESH , On_User_Refresh )
	ON_COMMAND( MENU_SMSJS_FIND  , On_User_Find )
	ON_COMMAND( MENU_SMSJS_TYPESETUP , On_User_TypeSetup )
	ON_COMMAND(MENU_SMSJS_ALLREAD, On_User_AllRead)
#ifdef SUPPERGSM
	ON_MESSAGE( TW_INIT , On_TW_Init )   //�����̷߳��ص���Ϣ
	ON_MESSAGE( TW_SEND , On_TW_Send )
	ON_MESSAGE( TW_RECV , On_TW_Recv )
	ON_MESSAGE( TW_GETSIM , On_TW_GetSim )
	ON_MESSAGE( TW_CLEAR  , On_TW_Clear )
	ON_MESSAGE( TW_DELETE , On_TW_Delete )
#endif

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFSmsJS message handlers

BOOL CFSmsJS::OnInitDialog() 
{
USES_CONVERSION;
	CDialog::OnInitDialog();
	
	//ȡ�ù��ò���
	//CMainFrame * pFrame = static_cast <CMainFrame *>((CMainFrame *)AfxGetMainWnd());
	this->GetParent()->GetParentFrame();
	m_pMainFrame = (CMainFrame *)this->GetParent()->GetParentFrame();
	m_pSocket    = &m_pMainFrame->m_Socket;
	m_AdoRS.SetAdoConnection( &m_pMainFrame->m_adoConnection );
	m_AdoRS2.SetAdoConnection( &m_pMainFrame->m_adoConnection );
	//���ӵ��Ŷα�
	TCHAR szPath[512]={0};
	m_pMainFrame->GetCurrentPath( szPath );
	_tcscat( szPath , _T("SMSData.dat") );  //���ݿ��ļ���
	//������
	char szPasswd[64]={0};strcpy(szPasswd , ACCESS_PASSWD );
	char szKey[64]={0};strcpy( szKey , ACCESS_KEY );
	char szNew2[64]={0};long lOut=sizeof(szNew2);
	TCHAR szNew[64]={0};
	CDes des;
	des.Decrypt( szPasswd , strlen(szPasswd),szNew2,lOut,szKey,8);
#ifdef UNICODE
	_tcscpy(szNew,A2W(szNew2));
#else
	strcpy(szNew,szNew2);
#endif
	
	if ( !m_HDadoConnection.ConnectAccess(szPath,szNew ) ) //�������ݿ����,��Ҫ���´���
	{
		MessageBox( _T("ϵͳ�ļ���ʧ6�������°�װ!") , _T("��������") , MB_ICONWARNING );
		return false;
	}
	m_HDAdoRS.SetAdoConnection( &m_HDadoConnection );  //��������


	//��ʼ��List
	m_Image.Create(16,16,ILC_COLOR32|ILC_MASK,5,5);
	m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_SMS_UNREAD) );
	m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_SMS_READ) );
	m_wndList.SubClassWindow2();
#ifdef YQ_VER
	m_wndList.SetHeadings(_T("���,50;  ���ͺ���,120;������,100;���պ���,120;       ��������,280;����ʱ��,130;���ŷ���,100;�ֻ�������,120;"));
#else
#ifdef MOBSET_OEM_SNLD
	m_wndList.SetHeadings(_T("���,50;  ���ͺ���,120;������,80;���պ���,120;       ��������,200;����ʱ��,130;�dz�,80;�Ա�,50;  ����,90; ��˾,80;ְ��,80;�绰,80;����,80;Email,80;QQ,80;��ע,80;"));
#else
#ifdef MOBSET_OEM_BYSZY
	m_wndList.SetHeadings(_T("���,50;  ���ͺ���,120;������,100;���պ���,120;       ��������,280;����ʱ��,130;�ֻ�������,120;�����û���,120;"));
#else
	m_wndList.SetHeadings(_T("���,50;  ���ͺ���,120;������,100;���պ���,120;       ��������,280;����ʱ��,130;�ֻ�������,120;"));
#endif
#endif
	
#endif
	m_wndList.SetGridLines(true);
	m_wndList.SetImageList(&m_Image,LVSIL_SMALL);
	//m_wndList.SetBkColor( RGB(237,191,175) );
	//m_wndList.SetTextBkColor( RGB(237,191,175) );

	m_bInit = true;


	//SetTimer( 1 , 1000 , NULL );  //���������ֻ�����

	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CFSmsJS::ReHide()
{
	ShowWindow( SW_HIDE );
	return true;
}

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

BOOL CFSmsJS::RefreshInfo()
{
	m_wndList.ShowWindow( SW_HIDE );  //Ϊ�˼ӿ���ʾ�ٶ�

	m_bRefresh = true;
	m_wndList.DeleteAllItems();
	TCHAR szSelect[512]={0};
	if ( m_bShowToday )
	{
		//����ѯ�����
		SYSTEMTIME t;::GetLocalTime(&t);
		if ( m_pMainFrame->m_Setup.bSQLUse )
			_stprintf( szSelect , _T("select * from smsRecv where RecvTime>='%04d%02d%02d' %s order by RecvTime"),t.wYear,t.wMonth,t.wDay,m_strFindAdd );  //��ѯ�ѷ�����
		else
			_stprintf( szSelect , _T("select * from smsRecv where RecvTime>=#%04d-%02d-%02d# %s order by RecvTime"),t.wYear,t.wMonth,t.wDay,m_strFindAdd );  //��ѯ�ѷ�����
	}
	else
	{
		if ( m_strFindAdd.GetLength()>0 )
			_stprintf( szSelect , _T("select * from smsRecv where 1 %s order by RecvTime"),m_strFindAdd );  //��ѯ���ռ�¼
		else
			_stprintf( szSelect , _T("select * from smsRecv order by RecvTime") );  //��ѯ���ռ�¼
	}
	//_stprintf( szSelect , _T("select * from smsRecv") );  //��ѯ���ռ�¼
	BOOL b = m_AdoRS.Open( szSelect );
	COleDateTime tRecv;
	long lCount = m_AdoRS.GetRecordCount();
	if ( b && lCount )
	{
		m_AdoRS.MoveFirst();
		long iItem = 0;
		while( !m_AdoRS.IsEOF() )
		{
			long lRecvID;
			BOOL bRead;
			TCHAR szSendNum[128]={0};
			TCHAR szSender[32]={0};
			TCHAR szRecvNum[32]={0};
			TCHAR szMsg[180]={0};
			TCHAR szType1[64]={0};
			TCHAR szType2[32]={0};
			TCHAR szProvince[64]={0};
			TCHAR szCity[32]={0};

			m_AdoRS.GetCollect( _T("RecvID") , lRecvID );
			m_AdoRS.GetCollect( _T("Reader") , bRead );
			m_AdoRS.GetCollect( _T("SendNum") , szSendNum );
			m_AdoRS.GetCollect( _T("Sender")  , szSender );
			m_AdoRS.GetCollect( _T("RecvNum") , szRecvNum );
			m_AdoRS.GetCollect( _T("Msg")     , szMsg );
			m_AdoRS.GetCollect( _T("RecvTime"), tRecv );
			m_AdoRS.GetCollect( _T("Province") , szProvince );
			m_AdoRS.GetCollect( _T("City") , szCity );

#ifdef MOBSET_OEM_SNLD
			CString NickName;
			CString Sex;
			COleDateTime Birthday;
			CString Ltd;
			CString Job;
			CString Tel;
			CString Fax;
			CString Email;
			CString QQ;
			CString BZ;
			m_AdoRS.GetCollect( _T("NickName") , NickName );
			m_AdoRS.GetCollect( _T("Sex")      , Sex );
			m_AdoRS.GetCollect( _T("Birthday") , Birthday );
			m_AdoRS.GetCollect( _T("Ltd")      , Ltd );
			m_AdoRS.GetCollect( _T("Job")      , Job );
			m_AdoRS.GetCollect( _T("Tel")      , Tel );
			m_AdoRS.GetCollect( _T("Fax")      , Fax );
			m_AdoRS.GetCollect( _T("Email")    , Email );
			m_AdoRS.GetCollect( _T("QQ")       , QQ );
			m_AdoRS.GetCollect( _T("BZ")       , BZ );
#endif
#ifdef MOBSET_OEM_BYSZY
			CString Local;
			m_AdoRS.GetCollect( _T("LocalGroup")    , Local );
#endif
			//
			//m_wndList.SetHeadings(_T("���,50;  ���ͺ���,100;���պ���,80;       ��������,280;����ʱ��,120;"));
			//m_wndList.SetHeadings(_T("���,50;  ���ͺ���,150;���պ���,120;       ��������,280;����ʱ��,130;���ŷ���,100;�ֻ�������,120;"));
			m_wndList.InsertItem( 0 , _itot( iItem+1,szSelect,10) , bRead );  //�Ѷ���δ��ͼ�겻һ��
			m_wndList.SetItemData( 0,lRecvID );
#ifdef MOBSET_OEM_SNLD
			//m_wndList.SetHeadings(_T("���,50;  ���ͺ���,120;������,80;���պ���,120;       ��������,200;����ʱ��,130;�dz�,80;�Ա�,50; ��˾,80;ְ��,80;�绰,80;����,80;Email,80;QQ,80;��ע,80;"));
			m_wndList.SetItemText(0,1,szSendNum);
			m_wndList.SetItemText(0,2,szSender);
			m_wndList.SetItemText(0,3,szRecvNum);
			m_wndList.SetItemText(0,4,szMsg);
			if ( tRecv.GetStatus() == COleDateTime::valid )
			{
				_stprintf( szMsg , _T("%04d.%02d.%02d %02d:%02d") , tRecv.GetYear(),tRecv.GetMonth(),tRecv.GetDay(),tRecv.GetHour(),tRecv.GetMinute() );
				m_wndList.SetItemText(0,5,szMsg);
			}
			m_wndList.SetItemText(0,6,NickName);
			m_wndList.SetItemText(0,7,Sex);
			if ( Birthday.GetStatus() == COleDateTime::valid )
			{
				_stprintf( szMsg , _T("%04d.%02d.%02d") ,Birthday.GetYear(), Birthday.GetMonth(),Birthday.GetDay() );
				m_wndList.SetItemText(0,8,szMsg);
			}
			m_wndList.SetItemText(0,9,Ltd);
			m_wndList.SetItemText(0,10,Job);
			m_wndList.SetItemText(0,11,Tel);
			m_wndList.SetItemText(0,12,Fax);
			m_wndList.SetItemText(0,13,Email);
			m_wndList.SetItemText(0,14,QQ);
			m_wndList.SetItemText(0,15,BZ);
#else
			m_wndList.SetItemText(0,1,szSendNum);
			m_wndList.SetItemText(0,2,szSender);
			m_wndList.SetItemText(0,3,szRecvNum);
			m_wndList.SetItemText(0,4,szMsg);
			if ( tRecv.GetStatus() == COleDateTime::valid )
			{
				_stprintf( szMsg , _T("%04d.%02d.%02d %02d:%02d") , tRecv.GetYear(),tRecv.GetMonth(),tRecv.GetDay(),tRecv.GetHour(),tRecv.GetMinute() );
				m_wndList.SetItemText(0,5,szMsg);
			}

			if ( _tcslen(szCity)>0 )
			{
				_tcscat( szProvince , _T("-") );
				_tcscat( szProvince , szCity );
			}
#ifdef YQ_VER
			m_AdoRS.GetCollect( _T("Type1") , szType1 );
			m_AdoRS.GetCollect( _T("Type2") , szType2 );
			if ( _tcslen(szType2)>0 )
			{
				_tcscat( szType1 , _T("-") );
				_tcscat( szType1 , szType2 );
			}
			m_wndList.SetItemText(0,6,szType1);
			m_wndList.SetItemText(0,7,szProvince);
#else
			m_wndList.SetItemText(0,6,szProvince);
#endif
#ifdef MOBSET_OEM_BYSZY
			m_wndList.SetItemText(0,7,Local);
#endif
#endif

			iItem++;
			m_AdoRS.MoveNext();
		}
	}
	m_wndList.ShowWindow( SW_SHOW );  //Ϊ�˼ӿ���ʾ�ٶ�
	RecvSms();  //ȡ�µĶ�������
	FlashIcon(true,false);  //����ͼ��
	return true;
}

void CFSmsJS::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	
	if ( m_bInit )
	{
		m_wndList.MoveWindow( 0 , 0 , cx,cy);
	}
}

long CFSmsJS::GetCurrentSelected()
{
	POSITION pos = m_wndList.GetFirstSelectedItemPosition();
	if ( pos )
	{
		return m_wndList.GetNextSelectedItem(pos);
	}
	return -1;
}

void CFSmsJS::OnKeydownSmsjsList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
	*pResult = 0;

	if ( pLVKeyDow->wVKey == VK_DELETE )
	{
		On_User_Del();
	}
	if ( pLVKeyDow->wVKey == VK_SPACE)
	{
		On_User_See();
	}
	if ( pLVKeyDow->wVKey == 'S' || pLVKeyDow->wVKey == 's')
	{
		On_User_Send();
	}
	if ( pLVKeyDow->wVKey == 'Z' || pLVKeyDow->wVKey == 'z')
	{
		On_User_ZF();
	}
	if ( pLVKeyDow->wVKey == 'R' || pLVKeyDow->wVKey == 'r')
	{
		On_User_Refresh();
	}
	if ( pLVKeyDow->wVKey == 'F' || pLVKeyDow->wVKey == 'f')
	{
		On_User_Find();
	}
	if ( pLVKeyDow->wVKey == 'A' || pLVKeyDow->wVKey == 'a')
	{
		m_wndList.SelectAllItems();
	}
}

void CFSmsJS::RecvSms()
{
	//û��Ȩ��
	if ( !m_pMainFrame->GetUserPurview( PURVIEW_RECVG , false ) &&
		 !m_pMainFrame->GetUserPurview( PURVIEW_RECVP , false ) )
		 return ;

	REQ_Recv2 * pRecv = new REQ_Recv2;
	pRecv->lCorpID = m_pMainFrame->m_lCorpID;
	pRecv->lUserID = m_pMainFrame->m_lUserID;
	m_pMainFrame->SendFrame( SMSFUNC_RECV2 , (BYTE*)pRecv , sizeof(REQ_Recv2));
}

BOOL CFSmsJS::ProcessSocket(Socket_Head *pHead)
{
	//�յ�����
	if (pHead->lFuncType == SMSFUNC_RECV)
	{
		ANS_Recv  *     pRecv = (ANS_Recv *)pHead->pFrame;
		ANS_RecvData *  pData = (ANS_RecvData *)(pHead->pFrame+sizeof(ANS_Recv));
		m_wndList.ShowWindow( SW_HIDE ); //Ϊ�˼ӿ���ʾ�ٶ�
		//���ӵ����ݿ���
		for ( int i = 0;i<pRecv->lCount;i++)
		{
			ANS_RecvData2 sms={0};
			sms.lLogID = pData->lLogID;
			_tcscpy(sms.szRecvNum , pData->szRecvNum );
			_tcscpy(sms.szSendNum , pData->szSendNum );
			_tcscpy(sms.szMsg , pData->szMsg );
			sms.tRecv = pData->tRecv;
			RecvNewSms(sms,i<3?true:false);
			pData++;  //��ʾ��һ��
		}
		m_wndList.ShowWindow( SW_SHOW ); //Ϊ�˼ӿ���ʾ�ٶ�

		if ( m_bRecvFirst && pRecv->lCount <= 0 && !m_pMainFrame->m_Setup.bSmsNoTip)  //û�յ��µĶ���
		{
			m_bRecvFirst = false;
			CString str;
			str = _T("select count(*) as abc from smsrecv where Reader=0 or Reader is NULL");
			if ( m_AdoRS.Open(str) && m_AdoRS.GetRecordCount()>0 )
			{
				long lRead=0;
				m_AdoRS.MoveFirst();
				m_AdoRS.GetCollect(_T("abc"),lRead);
				m_AdoRS.Close();
				if ( lRead>0 )
				{
					SMS_Recv2 sms2={0};
					//_stprintf( sms2.szMsg , _T("����%d�������!"),lRead );
					//_tcscpy( sms2.szSender , _T("����������") );
					_stprintf( sms2.szTime , _T("����%d�������!"),lRead );
					DLG_RecvSms * dlg = new DLG_RecvSms;
					dlg->Create(IDD_RECVSMS , this);
					//dlg->SetPara( &sms2,_T("����������") );
					dlg->SetPara( &sms2,_T("���������") );
					dlg->ShowWindow( SW_SHOW);
					this->SetFocus();
				}
			}
		}

		return true;
	}
	//�յ�����
	if (pHead->lFuncType == SMSFUNC_RECV2)
	{
		ANS_Recv2  *     pRecv = (ANS_Recv2 *)pHead->pFrame;
		ANS_RecvData2 *  pData = (ANS_RecvData2 *)(pHead->pFrame+sizeof(ANS_Recv2));
		m_wndList.ShowWindow( SW_HIDE ); //Ϊ�˼ӿ���ʾ�ٶ�
		//���ӵ����ݿ���
		for ( int i = 0;i<pRecv->lCount;i++)
		{
			RecvNewSms(*pData,i<3?true:false);
			pData++;  //��ʾ��һ��
		}
		m_wndList.ShowWindow( SW_SHOW ); //Ϊ�˼ӿ���ʾ�ٶ�

		if ( m_bRecvFirst && pRecv->lCount <= 0 && !m_pMainFrame->m_Setup.bSmsNoTip)  //û�յ��µĶ���
		{
			m_bRecvFirst = false;
			CString str;
			str = _T("select count(*) as abc from smsrecv where Reader=0  or Reader is NULL");
			if ( m_AdoRS.Open(str) && m_AdoRS.GetRecordCount()>0 )
			{
				long lRead=0;
				m_AdoRS.MoveFirst();
				m_AdoRS.GetCollect(_T("abc"),lRead);
				m_AdoRS.Close();
				if ( lRead>0 )
				{
					SMS_Recv2 sms2={0};
					//_stprintf( sms2.szMsg , _T("����%d�������!"),lRead );
					//_tcscpy( sms2.szSender , _T("����������") );
					_stprintf( sms2.szTime , _T("����%d�������!"),lRead );
					DLG_RecvSms * dlg = new DLG_RecvSms;
					dlg->Create(IDD_RECVSMS , this);
					dlg->SetPara( &sms2,_T("���������") );
					//dlg->SetPara( &sms2,"����������" );
					dlg->ShowWindow( SW_SHOW);
					this->SetFocus();
				}
			}
		}

		return true;
	}
	return false;
}


void CFSmsJS::On_User_AllRead()
{
	CString strSelect;
	strSelect = _T("update smsrecv set Reader=1 where Reader<>1");
	m_AdoRS.Open(strSelect);
	On_User_Refresh();
}

void CFSmsJS::On_User_See()
{
	long lItem = GetCurrentSelected();
	if ( lItem <0 )
		return ;
	SMS_See sms = GetSms(lItem);
	CString strSendNum = sms.szSender;
	if ( _tcslen(sms.szSender2) )
	{
		_tcscat(sms.szSender,_T("-") );
		_tcscat(sms.szSender,sms.szSender2);
	}
	ReadSms(lItem);   //״̬��Ϊ�Ѷ�
	DLG_SmsLogSee dlg(this);
	sms.lType = SMS_SEE_TYPE_RECV;
	dlg.SetParam(sms);
	dlg.SetReadSms(true);
	if ( dlg.DoModal() == 300 )  //���������ظ�
	{
		if ( m_pMainFrame->m_pFuncView->On_User_List_Add() ) //�½��б�
		{
			//��������
			m_pMainFrame->m_pFuncView->m_DLGSend.List_SetMsg( _T("") );  //������
			//���Ӻ���
			//��������
			long lCount = 1;
			long lSize = sizeof(Send_User)*lCount;
			BYTE *pS = new BYTE[lSize];
			memset( pS , 0 , lSize );
			Send_User * pUser = (Send_User * )pS;
			_tcscpy(pUser->szName , sms.szSender2 );
			_tcscpy(pUser->szMobile , strSendNum );
			m_pMainFrame->m_pFuncView->On_User_List_AddUser(lCount,(Send_User*)pS);
			delete pS;
		}
	}
}
void CFSmsJS::On_User_Send()
{
	long lItem = GetCurrentSelected();
	if ( lItem <0 )
		return ;

	ReadSms(lItem);   //״̬��Ϊ�Ѷ�

	if ( m_pMainFrame->m_pFuncView->On_User_List_Add() ) //�½��б�
	{
		//���Ӻ���
		long lCount = m_wndList.GetSelectedCount();
		if ( lCount <= 0 )
			return ;
		//��������
		long lSize = sizeof(Send_User)*lCount;
		BYTE *pS = new BYTE[lSize];
		memset( pS , 0 , lSize );
		Send_User * pUser = (Send_User * )pS;
		
		TCHAR szSelect[128]={0};
		POSITION pos = m_wndList.GetFirstSelectedItemPosition();
		while ( pos )
		{
			long lItem = m_wndList.GetNextSelectedItem( pos );
			long lRecvID = m_wndList.GetItemData( lItem );
			if ( lRecvID > 0 )
			{
				_stprintf( szSelect , _T("select * from smsrecv where RecvID=%d"), lRecvID );
				BOOL b = m_AdoRS.Open( szSelect );
				if ( b && m_AdoRS.GetRecordCount() )
				{
					m_AdoRS.MoveFirst();
					m_AdoRS.GetCollect( _T("Sender")     , pUser->szName);
					m_AdoRS.GetCollect( _T("SendNum")    , pUser->szMobile);
				}
			}
			pUser ++;
		}
		m_pMainFrame->m_pFuncView->On_User_List_AddUser(lCount,(Send_User*)pS);
		delete pS;
	}
}
void CFSmsJS::On_User_ZF()
{
	long lItem = GetCurrentSelected();
	if ( lItem <0 )
		return ;

	ReadSms(lItem);   //״̬��Ϊ�Ѷ�

	SMS_See sms = GetSms(lItem);

	if ( m_pMainFrame->m_pFuncView->On_User_List_Add() ) //�½��б�
	{
		//��������
		m_pMainFrame->m_pFuncView->m_DLGSend.List_SetMsg( sms.szMsg );  //������
	}
}
void CFSmsJS::On_User_Del()
{
	long lCount = m_wndList.GetSelectedCount();
	long *lDel = new long[lCount+2];
	POSITION pos = m_wndList.GetFirstSelectedItemPosition();
	long i = 0;
	while(pos)
	{
		lDel[i]= m_wndList.GetNextSelectedItem(pos);
		i ++;
	}
	long lRecvID = 0;
	TCHAR szSelect[128];
	//��תɾ��
	m_wndList.ShowWindow( SW_HIDE );  //�ӿ���ʾ���ٶ�
	for ( i = lCount ; i>0 ; i-- )
	{
		lRecvID = m_wndList.GetItemData( lDel[i-1] );
		_stprintf( szSelect , _T("delete from smsrecv where RecvID=%d ") , lRecvID );
		BOOL b = m_AdoRS.Open( szSelect );
		if ( b && m_AdoRS.GetRecordCount() )
		{
			m_wndList.DeleteItem(lDel[i-1]);  //���б���ɾ��
		}
	}
	m_wndList.ShowWindow( SW_SHOW );  //�ӿ���ʾ���ٶ�
	delete lDel;
}
void CFSmsJS::On_User_Export()
{
	DLG_SMSJS_Export dlg(this);
	dlg.SetParam(&m_AdoRS2,&m_wndList);
	dlg.DoModal();
}
void CFSmsJS::On_User_Refresh()
{
	RefreshInfo();
}

void CFSmsJS::On_User_Find()
{
	CString strTemp;
	DLG_Find_RecvSms dlg(this);
	dlg.SetParam(!m_bShowToday);
	if ( dlg.DoModal() == IDOK )
	{
		m_strFindAdd = _T("");
		if ( !m_bShowToday )
		{
			strTemp.Format( _T(" AND RecvTime>=#%04d-%02d-%02d# AND RecvTime<=#%04d-%02d-%02d 23:59:59#"),dlg.m_TBegin.GetYear(),dlg.m_TBegin.GetMonth(),dlg.m_TBegin.GetDay(),dlg.m_TEnd.GetYear(),dlg.m_TEnd.GetMonth(),dlg.m_TEnd.GetDay());
			m_strFindAdd = strTemp;
		}
		if ( dlg.m_strSendNum.GetLength()>0 )
		{
			strTemp.Format( _T(" AND SendNum like '%%%s%%'"),dlg.m_strSendNum );
			m_strFindAdd += strTemp;
		}
		if ( dlg.m_strRecvNum.GetLength()>0 )
		{
			strTemp.Format( _T(" AND RecvNum like '%%%s%%'"),dlg.m_strRecvNum );
			m_strFindAdd += strTemp;
		}
		if ( dlg.m_strMsg.GetLength()>0 )
		{
			strTemp.Format( _T(" AND Msg like '%%%s%%'"),dlg.m_strMsg );
			m_strFindAdd += strTemp;
		}
		On_User_Refresh();

		m_strFindAdd = _T("");  //ˢ�º󣬲�ѯ����
	}
}

void CFSmsJS::On_User_TypeSetup()
{
	DLG_TypeSetup dlg(this);
	dlg.SetParam( &m_AdoRS2 );
	dlg.DoModal();
}

void CFSmsJS::OnRclickSmsjsList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;
	ShowRMenu();
}

void CFSmsJS::OnDblclkSmsjsList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;
	On_User_See();
}

void CFSmsJS::ShowRMenu()
{
	CMenu menu;
	menu.CreatePopupMenu();
	BOOL bLock = false;
	long lItem = this->GetCurrentSelected();
#ifdef YQ_VER
	CMenu MenuType;
	MenuType.CreatePopupMenu();
	if ( lItem >= 0 )
	{
		//���ɴ����ռ�
		long lCount=0;
		if ( m_AdoRS2.Open( _T("RecvType") , adCmdTable ) )
		{
			lCount = m_AdoRS2.GetRecordCount();
			m_AdoRS2.Close();
		}
		if ( m_pMenuType )
			delete m_pMenuType;
		m_pMenuType = new Menu_Type[lCount];
		memset(m_pMenuType , 0 , sizeof(Menu_Type)*lCount );
		m_lMenuTypeCount = 0;
		
		CMenu * pMenu = NULL;
		
		//����Menu����
		
		if ( m_AdoRS2.Open( _T("select * from RecvType where Type=1") ) && m_AdoRS2.GetRecordCount()>0 )
		{
			long lMenuCount=m_AdoRS2.GetRecordCount();
			pMenu = new CMenu[lMenuCount];
			lMenuCount=0;
			m_AdoRS2.MoveFirst();
			while( !m_AdoRS2.IsEOF() )
			{
				long lID;
				CString strName;
				m_AdoRS2.GetCollect( _T("ID") , lID );
				m_AdoRS2.GetCollect( _T("Name") , strName );
				//�ȼ����û������
				CString str;
				str.Format( _T("select * from RecvType Where Type=2 and ID2=%d") , lID );
				if ( m_AdoRS.Open(str) && m_AdoRS.GetRecordCount()>0 )
				{
					pMenu[lMenuCount].CreatePopupMenu();
					MenuType.AppendMenu( MF_STRING|MF_POPUP,(UINT)pMenu[lMenuCount].GetSafeHmenu(), strName );
					m_AdoRS.MoveFirst();
					while(!m_AdoRS.IsEOF() )
					{
						CString strName2;
						m_AdoRS.GetCollect( _T("Name") , strName2 );
						pMenu[lMenuCount].AppendMenu( MF_STRING     , MENU_SMSJS_TYPESETUP+m_lMenuTypeCount+1 , strName2 );
						_tcscpy( m_pMenuType[m_lMenuTypeCount].szType1 , strName );
						_tcscpy( m_pMenuType[m_lMenuTypeCount].szType2 , strName2 );
						m_lMenuTypeCount ++;
						m_AdoRS.MoveNext();
					}
					m_AdoRS.Close();
					lMenuCount ++;
				}
				else
				{
					MenuType.AppendMenu( MF_STRING,MENU_SMSJS_TYPESETUP+m_lMenuTypeCount+1, strName );
					_tcscpy( m_pMenuType[m_lMenuTypeCount].szType1 , strName );
					m_lMenuTypeCount ++;
				}
				m_AdoRS2.MoveNext();
			}
			m_AdoRS2.Close();
		}
		MenuType.AppendMenu(MF_SEPARATOR );
	}
	MenuType.AppendMenu(MF_STRING     , MENU_SMSJS_TYPESETUP  , _T(" ������� ") );
#endif

	if ( lItem >= 0 )
	{
		menu.AppendMenu(MF_STRING     , MENU_SMSJS_SEE  , _T(" �� �� ") );
		menu.AppendMenu(MF_STRING     , MENU_SMSJS_SEND , _T(" �� �� ") );
		menu.AppendMenu(MF_STRING     , MENU_SMSJS_ZF   , _T(" ת �� ") );
		menu.AppendMenu(MF_STRING     , MENU_SMSJS_DEL  , _T(" ɾ �� ") );
	}
	else
	{
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_SMSJS_SEE , _T(" �� �� ") );
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_SMSJS_SEND, _T(" �� �� ") );
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_SMSJS_ZF, _T(" ת �� ") );
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_SMSJS_DEL , _T(" ɾ �� ") );
	}
#ifdef YQ_VER
	menu.AppendMenu(MF_SEPARATOR );
	menu.AppendMenu(MF_STRING|MF_POPUP,(UINT)MenuType.GetSafeHmenu(), _T(" �� �� ") );
#endif
	menu.AppendMenu(MF_SEPARATOR );
	//ˢ��
	menu.AppendMenu(MF_STRING     , MENU_SMSJS_EXPORT, _T(" ����... ") );
	//ˢ��
	menu.AppendMenu(MF_STRING     , MENU_SMSJS_FIND , _T(" ����... ") );
	menu.AppendMenu(MF_SEPARATOR );
	menu.AppendMenu(MF_STRING, MENU_SMSJS_ALLREAD, _T(" ȫ����Ϊ�Ѷ� "));
	menu.AppendMenu(MF_SEPARATOR);
	//ˢ��
	menu.AppendMenu(MF_STRING     , MENU_SMSJS_REFRESH, _T(" ˢ �� ") );
	//��ʾ�˵�
	POINT pt ;
	::GetCursorPos( &pt );
	//this->ClientToScreen( &pt);
	menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
	menu.DestroyMenu();
}

SMS_See CFSmsJS::GetSms(long lItem,BOOL bID)
{
	SMS_See sms={0};

	long lRecvID = 0;
	if ( bID )
		lRecvID = lItem;
	else
		lRecvID = m_wndList.GetItemData(lItem);
	CString strSelect;
	COleDateTime t;
	strSelect.Format( _T("select * from smsrecv where RecvID=%d") , lRecvID );
	if ( m_AdoRS.Open( strSelect ) && m_AdoRS.GetRecordCount() )
	{
		m_AdoRS.MoveFirst();
		m_AdoRS.GetCollect( _T("Sender")  , sms.szSender2 );
		m_AdoRS.GetCollect( _T("SendNum") , sms.szSender );
		m_AdoRS.GetCollect( _T("RecvNum") , sms.szRecver );
		m_AdoRS.GetCollect( _T("Msg")     , sms.szMsg );
		m_AdoRS.GetCollect( _T("RecvTime"), t );t.GetAsSystemTime(sms.tRecv);
		sms.tSend = sms.tRecv;
		_tcscpy( sms.szStatus , _T("�� ��") );
	}
	return sms;
}

void CFSmsJS::ReadSms(long lItem)
{
	long lRecvID = m_wndList.GetItemData(lItem);
	if ( lRecvID > 0 )
	{
		CString strSelect;
		strSelect.Format( _T("update smsrecv set Reader=1 where RecvID=%d") , lRecvID );
		if ( m_AdoRS.Open( strSelect ) && m_AdoRS.GetRecordCount() )
		{
			m_wndList.SetIconIndex( lItem , 1 ); //��ʾ�Ѷ�ͼ��
		}
	}
}

void CFSmsJS::OnTimer(UINT_PTR nIDEvent)
{
	CDialog::OnTimer(nIDEvent);
#ifdef SUPPERGSM
	if ( nIDEvent == 1 )
	{
		KillTimer(1);
		if ( m_pSendThread )
		{
			m_pSendThread->Com_Exit();
			SMS_Init * pSms = new SMS_Init;
			if (m_Setup.lPort == 0)
				pSms->lConnectType = CONNECT_IRDA;
			else
				pSms->lConnectType = CONNECT_CABLE;
			pSms->lIndex       = 0;
			pSms->lMobType     = m_Setup.lMobileType;
			pSms->lPort        = m_Setup.lPort;
			pSms->lBuadrate    = m_Setup.lBaudrate;
			pSms->lTimeOut     = COM_TIMOUT;
			pSms->pWnd         = (CWnd *)this;
			m_pSendThread->PostThreadMessage( TH_INIT , (WPARAM)pSms , 0 );
			m_pMainFrame->SetStatMsg( _T("���ڼ���ֻ�...") );
		}
		return ;
	}
#endif
	if ( nIDEvent == 3 )
	{
		KillTimer(nIDEvent);

		//��ͼ����뵽������
		CString strName=m_pMainFrame->GetSoftSName();
		NOTIFYICONDATA niData;
		if ( m_lIconCount <= 0 )
		{
			niData.hIcon  = AfxGetApp()->LoadIcon( IDR_MAINFRAME );
			_stprintf( niData.szTip,strName );
		}
		else
		{
			m_lIconCount ++;
			if ( m_lIconCount>888888 )
				m_lIconCount = 1;

			if ( m_lIconCount%2 == 0 )
				niData.hIcon  = AfxGetApp()->LoadIcon( IDR_MAINFRAME );
			else
				niData.hIcon  = AfxGetApp()->LoadIcon( IDI_NULL );

			strName += _T("-�յ�����Ϣ");
			_stprintf( niData.szTip,strName );
		}

		niData.cbSize = sizeof( NOTIFYICONDATA );
		niData.hWnd   = this->m_pMainFrame->m_hWnd;
		niData.uID    = 125;
		niData.uFlags = NIF_ICON|NIF_TIP;
		niData.uCallbackMessage = SHELL_ICON_MESS;
		Shell_NotifyIcon( NIM_MODIFY,&niData );

		if ( m_lIconCount>0 )
			SetTimer(3 , 500 , NULL );
		return ;
	}
}
#ifdef SUPPERGSM
long CFSmsJS::On_TW_Init(WPARAM wParam , LPARAM lParam )
{
	long lIndex = (long) wParam;
	long lCode  = (long) lParam;
	if ( lIndex !=0 )   //��Ϣ�Ŀ����Ǵ����
		return false;
	char Buf[64];
	switch( lCode )   //�������
	{
	case -1:
		 _tcscpy(Buf , "���Ӵ���ʧ��" );
		 break;
	case -2:
		 _tcscpy(Buf , "��ʼ����������ʧ��" );
		 break;
	case -3:
		 _tcscpy(Buf , "��ⲻ���ֻ�" );
		 break;
	case 0:
		 _stprintf(Buf , "���ӳɹ�:�ֻ��ͺ�Ϊ:%s" , m_pSendThread->m_szMobileName );
		 break;
	default:
		 _tcscpy(Buf , "δ֪��������ʧ��" );
		 break;
	}
	m_pMainFrame->SetStatMsg(Buf);
	if ( lCode != 0 ) //û�гɹ��ģ�׼����������
	{
		Sleep(500);
		m_pSendThread->Com_Exit();

		SetTimer( 1 , 2000 , NULL );  //���������ֻ�
	}
	else
	{
		if (this->m_Setup.bAutoRead)  //���ѡ�����Զ�ȡSIM������
		{
			//ֱ��ȡSIM���еĶ���Ϣ
			m_bOneGetSim = false;
			m_pMainFrame->SetStatMsg("���ڲ�ѯSIM���϶���Ϣ...");
			m_pSendThread->PostThreadMessage( TH_GETSIM , 0 , 0 );
		}

//		else

//		if (m_pMainFrame->m_pFuncView->isAutoClear()) //���ѡ�����Զ�ɾ��
//		{
//			//���SIM���еĶ���Ϣ
//			m_bOneGetSim = false;
//			SendState_SetMsg( lIndex , "�������SIM���϶���Ϣ..." );
//			m_pMCom[lIndex].m_lTime = GetTickCount();
//			m_pMCom[lIndex].pSendThread->PostThreadMessage( TH_CLEAR , 0 , 0 );
//		}
//		else //û���Զ�ȡ����ն��ţ���ֱ�ӷ��Ͷ���
//		{
//			SendNextSms(lIndex);    //�ӷ��Ͷ�����ȡ�����ݿ�ʼ���͡�
//		}

	}

	return 1;
}
long CFSmsJS::On_TW_Send(WPARAM wParam , LPARAM lParam )
{
	return 1;
}
long CFSmsJS::On_TW_Recv(WPARAM wParam , LPARAM lParam )
{
	long lIndex = (long)wParam;
	SMS_Recv * pSms = (SMS_Recv *)lParam;
	m_pMainFrame->SetStatMsg("���յ��µ���Ϣ��" );
	if ( pSms->lMsgType == MSGTYPE_REPORT )  //�˶���Ϣ��״̬����
	{
		return 1;  //����״̬����
	}
	m_lMobileRecvCount ++;  //���յ��Ķ���+1;
	if ( pSms->lMsgType == MSGTYPE_SMS  )
	{
		ANS_RecvData2 sms={0};
		_tcscpy( sms.szSendNum , pSms->szSender );
		_tcscpy( sms.szRecvNum , "mobile" );
		_tcscpy( sms.szMsg , pSms->szMsg );
		::GetLocalTime(&sms.tRecv);
		ExMobileGZM(sms.szSendNum);
		RecvNewSms(sms,true); //�յ��µ���Ϣ;
	}
	//��������յ��IJ���SIM�����ţ����������Զ�ɾ������ֱ��ɾ����һ������
	if ( !pSms->bSim && m_Setup.bAutoDelete )
	{
		long lDel = pSms->lIndex > 0 ? pSms->lIndex : 1; 
		char Buf[64]={0};
		_stprintf( Buf , "����ɾ����%d������Ϣ..." , lDel );
		m_pMainFrame->SetStatMsg(Buf );
		m_pSendThread->PostThreadMessage( TH_DELETE , lDel , 0 );
	}
	return 1;
}
long CFSmsJS::On_TW_GetSim(WPARAM wParam , LPARAM lParam )
{
	long lIndex = (long)wParam;
	long lCode  = (long)lParam;

	char Buf[32]={0};
	switch( lCode )   //�������
	{
	case -4:
		 _tcscpy(Buf , "�ӿڻ�δ��ʼ��" );
		 break;
	case -2:
		 _tcscpy(Buf , "��ѯSIM�����ų�ʱ" );
		 break;
	default:
		 _stprintf(Buf , "��ѯSIM�����ųɹ����ҵ�%d������" , lCode);
		 break;
	}
	m_pMainFrame->SetStatMsg( Buf );

	if ( lCode == -2 ) //��ʱ
	{
		Sleep(500);
		m_pSendThread->Com_Exit();
		SMS_Init * pSms = new SMS_Init;
		if (m_Setup.lPort == 0)
			pSms->lConnectType = CONNECT_IRDA;
		else
			pSms->lConnectType = CONNECT_CABLE;
		pSms->lIndex       = 0;
		pSms->lMobType     = m_Setup.lMobileType;
		pSms->lPort        = m_Setup.lPort;
		pSms->lBuadrate    = m_Setup.lBaudrate;
		pSms->lTimeOut     = COM_TIMOUT;
		pSms->pWnd         = (CWnd *)this;
		m_pSendThread->PostThreadMessage( TH_INIT , (WPARAM)pSms , 0 );
		m_pMainFrame->SetStatMsg( "���ڼ���ֻ�..." );
	}
	else
	{
		Sleep(500);
		m_pMainFrame->SetStatMsg( "�������SIM��..." );
		m_pSendThread->PostThreadMessage( TH_CLEAR , 0 , 0 );
	}

//	else
//	{
//		if (m_pMainFrame->m_pFuncView->isAutoClear() && !m_bOneGetSim) //���ѡ�����Զ�ɾ��
//		{
//			//���SIM���еĶ���Ϣ
//			m_bOneGetSim = false;
//			SendState_SetMsg( lIndex , "�������SIM���϶���Ϣ..." );
//			m_pMCom[lIndex].m_lTime = GetTickCount();
//			m_pMCom[lIndex].pSendThread->PostThreadMessage( TH_CLEAR , 0 , 0 );
//		}
//		else
//		{
//			m_pMCom[lIndex].m_lTime = GetTickCount() + 3600*8*1000;   //������ֻΪ�˽��գ�������8Сʱ�ڲ��ᳬʱ����
//			SendNextSms(lIndex);    //�ӷ��Ͷ�����ȡ�����ݿ�ʼ���͡�
//		}
//	}

	return 1;
}
long CFSmsJS::On_TW_Clear(WPARAM wParam , LPARAM lParam )
{
	long lIndex = (long)wParam;
	long lCode  = (long)lParam;

	if ( lCode == -2 ) //��ʱ
	{
		m_pMainFrame->SetStatMsg( "��ն���ʧ��!" );
		Sleep(500);
		m_pSendThread->Com_Exit();
		SMS_Init * pSms = new SMS_Init;
		if (m_Setup.lPort == 0)
			pSms->lConnectType = CONNECT_IRDA;
		else
			pSms->lConnectType = CONNECT_CABLE;
		pSms->lIndex       = 0;
		pSms->lMobType     = m_Setup.lMobileType;
		pSms->lPort        = m_Setup.lPort;
		pSms->lBuadrate    = m_Setup.lBaudrate;
		pSms->lTimeOut     = COM_TIMOUT;
		pSms->pWnd         = (CWnd *)this;
		m_pSendThread->PostThreadMessage( TH_INIT , (WPARAM)pSms , 0 );
		m_pMainFrame->SetStatMsg( "���ڼ���ֻ�..." );
	}
	else
	{
		m_pMainFrame->SetStatMsg( "��ն��ųɹ�!" );

		SetTimer( 1 , 60000*30 , NULL );   //ÿ30������������ȡ���ţ���ն���
	}

	return 1;
}
long CFSmsJS::On_TW_Delete(WPARAM wParam , LPARAM lParam )
{
	long lIndex = (long)wParam;
	long lCode  = (long)lParam;

	if ( lCode == -2 ) //��ʱ
	{
		m_pMainFrame->SetStatMsg( "ɾ������ʧ��!" );
		Sleep(500);
		m_pSendThread->Com_Exit();
		SMS_Init * pSms = new SMS_Init;
		if (m_Setup.lPort == 0)
			pSms->lConnectType = CONNECT_IRDA;
		else
			pSms->lConnectType = CONNECT_CABLE;
		pSms->lIndex       = 0;
		pSms->lMobType     = m_Setup.lMobileType;
		pSms->lPort        = m_Setup.lPort;
		pSms->lBuadrate    = m_Setup.lBaudrate;
		pSms->lTimeOut     = COM_TIMOUT;
		pSms->pWnd         = (CWnd *)this;
		m_pSendThread->PostThreadMessage( TH_INIT , (WPARAM)pSms , 0 );
		m_pMainFrame->SetStatMsg( "���ڼ���ֻ�..." );
	}
	else
	{
		m_pMainFrame->SetStatMsg( "ɾ�����ųɹ�!" );
		Sleep(500);
		if ( m_Setup.lAutoClearCount>0 &&  m_lMobileRecvCount > 0 &&  m_lMobileRecvCount%m_Setup.lAutoClearCount==0 )  //ÿ���յ�10�����ţ��Զ����SIM��
		{
			m_pMainFrame->SetStatMsg( "�������SIM��..." );
			m_pSendThread->PostThreadMessage( TH_CLEAR , 0 , 0 );
		}
	}

	return 1;
}
#endif

void CFSmsJS::OnDestroy() 
{
#ifdef SUPPERGSM
	if ( m_pSendThread )
	{
		m_pSendThread->Com_Exit();
		m_pSendThread->PostThreadMessage( WM_QUIT , 0  , 0 );
		m_pSendThread = NULL;
	}
#endif

	if ( m_pMenuType )
		delete m_pMenuType;

	CDialog::OnDestroy();
}

void CFSmsJS::RecvNewSms(ANS_RecvData2 sms,BOOL bShowTip)
{
try
{
	TCHAR szName[64]={0};
	TCHAR szName2[64]={0};
	CString NickName;
	CString Sex;
	COleDateTime Birthday;
	CString Ltd;
	CString Job;
	CString Tel;
	CString Fax;
	CString Email;
	CString QQ;
	CString BZ;
#ifdef MOBSET_OEM_BYSZY
	TCHAR szGroupID[32]={0};
	TCHAR szLocal[128]={0};
#endif

	CString strSelect;
	BOOL    bGetAddress=false;
	//���յ��µĶ��ţ��Ȳ�ѯ���ڵ绰���������
	if ( !bGetAddress && m_pMainFrame->GetUserPurview( PURVIEW_PADDRESS,false ) )  //��˽�˵绰���鿴Ȩ��
	{
#ifdef MOBSET_OEM_SNLD
		strSelect.Format( _T("select * from paddress where Mobile like '%%%s' and (GroupID is null or len(GroupID)=0)") , sms.szSendNum );  //�����׵£�����ѯ��Ŀ¼
#endif
		strSelect.Format( _T("select * from paddress where Mobile like '%%%s'") , sms.szSendNum );
		if ( m_AdoRS2.Open(strSelect) && m_AdoRS2.GetRecordCount() )
		{
			m_AdoRS2.GetCollect( _T("Name")     , szName );
#ifdef MOBSET_OEM_SNLD
			m_AdoRS2.GetCollect( _T("NickName") , NickName );
			m_AdoRS2.GetCollect( _T("Sex")      , Sex );
			m_AdoRS2.GetCollect( _T("Birthday") , Birthday );
			m_AdoRS2.GetCollect( _T("Ltd")      , Ltd );
			m_AdoRS2.GetCollect( _T("Job")      , Job );
			m_AdoRS2.GetCollect( _T("Tel")      , Tel );
			m_AdoRS2.GetCollect( _T("Fax")      , Fax );
			m_AdoRS2.GetCollect( _T("Email")    , Email );
			m_AdoRS2.GetCollect( _T("QQ")       , QQ );
			m_AdoRS2.GetCollect( _T("BZ")       , BZ );
#endif
#ifdef MOBSET_OEM_BYSZY
			m_AdoRS2.GetCollect( _T("GroupID")     , szGroupID );
			this->m_pMainFrame->m_pBaseView->m_dlgPAddress.GetLocal(szLocal,szGroupID);
#endif
			bGetAddress = true;
		}
	}
	if ( !bGetAddress && m_pMainFrame->GetUserPurview( PURVIEW_GADDRESS_SEE,false ) )  //�й��õ绰���鿴Ȩ��
	{
		strSelect.Format( _T("select * from gaddress where Mobile like '%%%s'") , sms.szSendNum );
		if ( m_AdoRS2.Open(strSelect) && m_AdoRS2.GetRecordCount() )
		{
			m_AdoRS2.GetCollect( _T("Name") , szName );
#ifdef MOBSET_OEM_SNLD
			m_AdoRS2.GetCollect( _T("NickName") , NickName );
			m_AdoRS2.GetCollect( _T("Sex")      , Sex );
			m_AdoRS2.GetCollect( _T("Birthday") , Birthday );
			//m_AdoRS2.GetCollect( _T("Ltd")      , Ltd );
			m_AdoRS2.GetCollect( _T("Job")      , Job );
			m_AdoRS2.GetCollect( _T("Tel")      , Tel );
			m_AdoRS2.GetCollect( _T("Fax")      , Fax );
			m_AdoRS2.GetCollect( _T("Email")    , Email );
			m_AdoRS2.GetCollect( _T("QQ")       , QQ );
			m_AdoRS2.GetCollect( _T("BZ")       , BZ );
#endif
#ifdef MOBSET_OEM_BYSZY
			m_AdoRS2.GetCollect( _T("GroupID")     , szGroupID );
			this->m_pMainFrame->m_pBaseView->m_dlgGAddress2.GetLocal(szLocal,szGroupID);
#endif
		}
	}
#ifdef YQ_VER

#ifndef YQ_VER_JL
	strSelect.Format( _T("select * from kaddress where Mobile like '%%%s'") , sms.szSendNum );
	if ( !bGetAddress && m_AdoRS2.Open(strSelect) && m_AdoRS2.GetRecordCount() )
	{
		m_AdoRS2.GetCollect( _T("Name") , szName );
	}
#endif

#endif


	//���ҺŶι���
	CString str;
	CString strProvince=_T("δ֪������");
	CString strCity=_T("");
	strProvince = sms.szProv;
	strCity     = sms.szCity;

#ifdef SUPPER_IM_MAS
	_tcscpy( szName2 , sms.szSendNum );
	szName2[7]=0;
	str.Format( _T("select * from HDB where Head='%s'"),szName2);
	if ( m_HDAdoRS.Open(str) && m_HDAdoRS.GetRecordCount()>0 )
	{
		m_HDAdoRS.MoveFirst();
		m_HDAdoRS.GetCollect( _T("Province") , strProvince );
		m_HDAdoRS.GetCollect( _T("City")     , strCity );
		m_HDAdoRS.Close();
	}
#endif

	long lRecvID=0;
	BOOL b = m_AdoRS.Open( _T("smsrecv") , adCmdTable ); //�����ݿ⣬׼������
	if ( b  )
	{
		m_AdoRS.AddNew();
		m_AdoRS.PutCollect(_T("SendNum")  ,sms.szSendNum);
		m_AdoRS.PutCollect(_T("Sender")   ,szName);
		m_AdoRS.PutCollect(_T("RecvNum")  ,sms.szRecvNum);
		m_AdoRS.PutCollect(_T("Msg")      ,sms.szMsg);
		m_AdoRS.PutCollect(_T("RecvTime") ,sms.tRecv );
//#ifdef YQ_VER
		m_AdoRS.PutCollect(_T("Province") ,strProvince );
		m_AdoRS.PutCollect(_T("City")     ,strCity);
//#endif 
#ifdef MOBSET_OEM_SNLD
		m_AdoRS.PutCollect( _T("NickName") , NickName );
		m_AdoRS.PutCollect( _T("Sex")      , Sex );
		m_AdoRS.PutCollect( _T("Birthday") , Birthday );
		m_AdoRS.PutCollect( _T("Ltd")      , Ltd );
		m_AdoRS.PutCollect( _T("Job")      , Job );
		m_AdoRS.PutCollect( _T("Tel")      , Tel );
		m_AdoRS.PutCollect( _T("Fax")      , Fax );
		m_AdoRS.PutCollect( _T("Email")    , Email );
		m_AdoRS.PutCollect( _T("QQ")       , QQ );
		m_AdoRS.PutCollect( _T("BZ")       , BZ );
#endif
#ifdef MOBSET_OEM_BYSZY
		m_AdoRS.PutCollect( _T("LocalGroup")       , szLocal );
#endif
		m_AdoRS.Update();
		m_AdoRS.GetCollect( _T("RecvID") , lRecvID );
		m_AdoRS.Close();
	}

	//��ʾ���յ��Ķ���
	//m_wndList.SetHeadings(_T("���,50;  ���ͺ���,100;���պ���,80;       ��������,280;����ʱ��,120;"));
	long lCount = m_wndList.GetItemCount();
	TCHAR szBuf[32]={0};
	m_wndList.InsertItem( 0, _itot( lCount+1,szBuf,10) , 0 );
	m_wndList.SetItemData(0,lRecvID );

	CString strRecvName;
#ifdef MOBSET_OEM_SNLD
	//m_wndList.SetHeadings(_T("���,50;  ���ͺ���,120;������,80;���պ���,120;       ��������,200;����ʱ��,130;�dz�,80;�Ա�,50; ��˾,80;ְ��,80;�绰,80;����,80;Email,80;QQ,80;��ע,80;"));
	m_wndList.SetItemText(0,1,sms.szSendNum);
	m_wndList.SetItemText(0,2,szName);
	m_wndList.SetItemText(0,3,sms.szRecvNum);
	m_wndList.SetItemText(0,4,sms.szMsg);
	COleDateTime tRecv(sms.tRecv);
	if ( tRecv.GetStatus() == COleDateTime::valid )
	{
		_stprintf( szBuf , _T("%04d.%02d.%02d %02d:%02d") , tRecv.GetYear(),tRecv.GetMonth(),tRecv.GetDay(),tRecv.GetHour(),tRecv.GetMinute() );
		m_wndList.SetItemText(0,5,szBuf);
	}
	m_wndList.SetItemText(0,6,NickName);
	m_wndList.SetItemText(0,7,Sex);
	if ( Birthday.GetStatus() == COleDateTime::valid )
	{
		_stprintf( szBuf , _T("%04d.%02d.%02d") , Birthday.GetYear(),Birthday.GetMonth(),Birthday.GetDay() );
		m_wndList.SetItemText(0,8,szBuf);
	}
	m_wndList.SetItemText(0,9,Ltd);
	m_wndList.SetItemText(0,10,Job);
	m_wndList.SetItemText(0,11,Tel);
	m_wndList.SetItemText(0,12,Fax);
	m_wndList.SetItemText(0,13,Email);
	m_wndList.SetItemText(0,14,QQ);
	m_wndList.SetItemText(0,15,BZ);
#else
	m_wndList.SetItemText(0,1,sms.szSendNum);
	m_wndList.SetItemText(0,2,szName);
	m_wndList.SetItemText(0,3,sms.szRecvNum);
	m_wndList.SetItemText(0,4,sms.szMsg);
	COleDateTime tRecv(sms.tRecv);
	if ( tRecv.GetStatus() == COleDateTime::valid )
	{
		_stprintf( szBuf , _T("%04d.%02d.%02d %02d:%02d") , tRecv.GetYear(),tRecv.GetMonth(),tRecv.GetDay(),tRecv.GetHour(),tRecv.GetMinute() );
		m_wndList.SetItemText(0,5,szBuf);
	}
	if ( strCity.GetLength()>0 )
		strProvince = strProvince+"-"+strCity;
#ifdef YQ_VER
		m_wndList.SetItemText(0,7,strProvince);
#else
		m_wndList.SetItemText(0,6,strProvince);
#endif 

#ifdef MOBSET_OEM_BYSZY
		m_wndList.SetItemText(0,7,szLocal);
#endif

#endif
	//if ( i== 0 )  //��ʾ��һ���յ��Ķ���
	if ( bShowTip && !m_pMainFrame->m_Setup.bSmsNoTip)
	{
		//��ʾ���ڣ���ʾ���յ�����Ϣ
		SMS_Recv2 sms2={0};
		_tcscpy( sms2.szMsg , sms.szMsg );
		_tcscpy( sms2.szSender , strRecvName );
		_tcscpy( sms2.szTime , szBuf );
		DLG_RecvSms * dlg = new DLG_RecvSms;
		dlg->Create(IDD_RECVSMS , this);
		dlg->SetPara( &sms2 );
		dlg->ShowWindow( SW_SHOW);
		this->SetFocus();
	}

	FlashIcon(false,true);  //����ͼ��

	//��������
	if ( m_pMainFrame->m_Setup.bSound )
	{
		TCHAR szFileName[512]={0};
		m_pMainFrame->GetCurrentPath(szFileName);
		_tcscat(szFileName , _T("Nokia.wav") );
		PlaySound(szFileName,NULL,SND_FILENAME|SND_NODEFAULT|SND_ASYNC);
	}

	//�����Զ��ظ�
	if ( m_Setup.bAutoRe && _tcslen(m_Setup.szAutoRe)>0 )
	{
		//���ж��Ƿ�Ϊ���õĹ̶�����
		CString strAutoRecv = m_Setup.szAutoRecv;
		if ( strAutoRecv.GetLength() > 0 )
		{
			if ( m_Setup.szAutoRecv[0] != '*' )
			{
				CString strRecvMsg  = CString(sms.szMsg).Left(strAutoRecv.GetLength());
				if ( strAutoRecv.CompareNoCase(strRecvMsg) != 0 )
					return ;
			}
		}
		if ( m_Setup.bAutoExRe )  //�ų��ظ�
		{
			strSelect.Format( _T("select * from smsrecv where SendNum='%s'"),sms.szSendNum );
			if ( m_AdoRS.Open(strSelect) && m_AdoRS.GetRecordCount()> 1 )
				return ;
		}
		//�Զ���¼
		if ( m_Setup.bAutoRecord && _tcslen(m_Setup.szGroup)>0 )
		{
			strSelect.Format( _T("select * from paddress where Name='%s' and UserType='0'") , m_Setup.szGroup );
			if ( m_AdoRS.Open(strSelect) && m_AdoRS.GetRecordCount()> 0 )
			{
				TCHAR szGroupID[32]={0};
				m_AdoRS.MoveFirst();
				m_AdoRS.GetCollect(_T("GroupID") , szGroupID );
				m_AdoRS.Close();

				BOOL b = m_AdoRS.Open( _T("paddress") , adCmdTable );
				if ( b  )
				{
					m_AdoRS.AddNew();
					m_AdoRS.PutCollect(_T("UserType")  ,_T("1"));
					m_AdoRS.PutCollect(_T("GroupID")   ,szGroupID);
					m_AdoRS.PutCollect(_T("Name")      ,_T("�Զ��Ǽ�") );
					m_AdoRS.PutCollect(_T("Mobile")    ,sms.szSendNum );
					m_AdoRS.PutCollect(_T("BZ")        ,sms.szMsg);
#ifdef MOBSET_TJJ
					m_AdoRS.PutCollect(_T("NickName")  ,strProvince );

#endif
					m_AdoRS.Update();
				}
				m_AdoRS.Close();
			}
		}
#ifdef SUPPER_IM_MAS
		if ( this->m_pMainFrame->m_pFuncView->m_DLGSend.Mas_OK() && !_tcscmp(sms.szRecvNum,_T("Mas")) )  //MAS����
		{
			CStringA strMobile=CW2A(sms.szSendNum);
			CStringA strMsg=CW2A(m_Setup.szAutoRe);
			CStringA strSendTime;
			long lSmID=0; //��+ʱ+��+���
			long lSrcID=0;
			int iRet = (*this->m_pMainFrame->m_pFuncView->m_DLGSend.m_Mas_sendSMAdvTime)(strMobile, strMsg,strSendTime, lSmID,lSrcID);
		}
		else
#endif
		{
			//����Ϊ���Ͷ��Ŷ���
			//��������ʱ�����ռ�
			ANS_SendData2 * pTemp = new ANS_SendData2[5];
			memset( pTemp , 0 , sizeof(ANS_SendData2)*5 );
			long lSendCount=0;
			TCHAR szSendMsg[512]={0};
			TCHAR szSendMsg2[512]={0};
			
			//�ָ���Ϣ
			long lMaxMsgLen = m_pMainFrame->GetMaxSendMsgLen();  //ȡ����������ַ���
			CString strCM;
			BOOL bCMFirst   = m_pMainFrame->GetQJCM(strCM);
			long lMsgAll=0;
			long lMsgIndex = 1;
			BOOL bGetMsg;
			_tcscpy( szSendMsg , m_Setup.szAutoRe ); //����Դ��Ϣ
			while ( true )
			{
				memset( szSendMsg2 , 0 , sizeof(szSendMsg2) );
				if (!_tcsncmp(sms.szSendNum, _T("12"), 2) ||
					!_tcsncmp( sms.szSendNum , _T("13") , 2 ) ||
					!_tcsncmp( sms.szSendNum , _T("15") , 2 ) ||
					!_tcsncmp( sms.szSendNum , _T("14") , 2 ) ||
					!_tcsncmp( sms.szSendNum , _T("16") , 2 ) ||
					!_tcsncmp( sms.szSendNum , _T("17") , 2 ) ||
					!_tcsncmp( sms.szSendNum , _T("18") , 2 ) ||
					!_tcsncmp( sms.szSendNum , _T("19") , 2 ))  
				{
					//�ֻ��������֧��70������
					//if ( isChinese( m_szSendMsg,_tcslen(szSendMsg) ) )
					//{
					bGetMsg = GetSpiltUnicodeMsg( szSendMsg , szSendMsg2 , lMsgIndex , lMaxMsgLen ,lMsgAll);
					//}
					//else
					//{
					//	bGetMsg = GetSpiltAsciiMsg( szSendMsg , szSendMsg2   , lMsgIndex , lMaxMsgLen*2+lMaxMsgLen*2/7 ,lMsgAll);
					//}
				}
				else
				{
					//С��ͨ�ֻ��������֧��58������
					//if ( isChinese( m_szSendMsg,_tcslen(szSendMsg) ) )
					//{
					bGetMsg = GetSpiltUnicodeMsg( szSendMsg , szSendMsg2 , lMsgIndex , lMaxMsgLen-12 ,lMsgAll);
					//}
					//else
					//{
					//	bGetMsg = GetSpiltAsciiMsg( szSendMsg , szSendMsg2   , lMsgIndex , MOBILE_TYPE_PHS_MAXLEN ,lMsgAll);
					//}
				}
				if ( bGetMsg )  //��ȡ����Ϣ������
				{
					pTemp[lSendCount].lCorpID = m_pMainFrame->m_lCorpID;
					pTemp[lSendCount].lUserID = m_pMainFrame->m_lUserID;
					pTemp[lSendCount].lItem   = 0;
					pTemp[lSendCount].lItemID = 0;         //ItemID;
					if ( bCMFirst )
						_stprintf( pTemp[lSendCount].szMsg ,_T("%s%s") , strCM,szSendMsg2);
					else
						_stprintf( pTemp[lSendCount].szMsg ,_T("%s%s") , szSendMsg2,strCM);
					_tcscpy( pTemp[lSendCount].szName   , _T("")  );
					_tcscpy( pTemp[lSendCount].szMobile , sms.szSendNum);
					lSendCount ++; //��¼�ż�1
					lMsgIndex  ++; //�ָ���1
				}
				else
				{
					break;
				}
			}
			
			
			//������Ϣ
			if ( lSendCount > 0 )
			{
				//����ָ�����
				long lSize = sizeof(REQ_Send2)+sizeof(ANS_SendData2)*lSendCount;
				BYTE * pData = new BYTE[lSize];
				REQ_Send2 * pSendSend = (REQ_Send2 *)pData;
				ANS_SendData2 * pDataSend = (ANS_SendData2 *)(pData + sizeof(REQ_Send2));
				pSendSend->lCount = lSendCount;
				//����
				memcpy( pDataSend , pTemp , sizeof(ANS_SendData2)*lSendCount );
				m_pMainFrame->SendFrame( SMSFUNC_SEND2 , pData , lSize );
			}
			delete pTemp;  //ɾ����ʱ����
		}
		
	}
}
catch(...)
{
	return ;
}

}

void CFSmsJS::ConnectMobile()
{
#ifdef SUPPERGSM
	//�����ֻ���������
	m_Setup = m_pMainFrame->m_Setup;

	m_pSendThread = new CSendThread;
	m_pSendThread->CreateThread();
	SMS_Init * pSms = new SMS_Init;
	if (m_Setup.lPort == 0)
		pSms->lConnectType = CONNECT_IRDA;
	else
		pSms->lConnectType = CONNECT_CABLE;
	pSms->lIndex       = 0;
	pSms->lMobType     = m_Setup.lMobileType;
	pSms->lPort        = m_Setup.lPort;
	pSms->lBuadrate    = m_Setup.lBaudrate;
	pSms->lTimeOut     = COM_TIMOUT;
	pSms->pWnd         = (CWnd *)this;
	m_pSendThread->PostThreadMessage( TH_INIT , (WPARAM)pSms , 0 );
	m_pMainFrame->SetStatMsg( _T("���ڼ���ֻ�...") );
#endif
}

void CFSmsJS::OnOK() 
{
	//CDialog::OnOK();
}

void CFSmsJS::OnCancel() 
{
	//CDialog::OnCancel();
}

void CFSmsJS::On_User_Type(long lIndex)
{
#ifndef YQ_VER
	return ;
#endif
	long lItem = this->GetCurrentSelected();
	if ( lItem <0 )
		return ;

	long lID = m_wndList.GetItemData(lItem);
	CString strSelect;
	strSelect.Format( _T("select * from smsrecv where RecvID=%d") , lID );
	if ( m_AdoRS.Open( strSelect ) && m_AdoRS.GetRecordCount() )
	{
		m_AdoRS.MoveFirst();
		m_AdoRS.PutCollect( _T("Type1") , m_pMenuType[lIndex].szType1 );
		m_AdoRS.PutCollect( _T("Type2") , m_pMenuType[lIndex].szType2 );
		m_AdoRS.Update();
		m_AdoRS.Close();

		CString str = m_pMenuType[lIndex].szType1;
		if ( _tcslen(m_pMenuType[lIndex].szType2) >0 )
		{
			str += _T("-");
			str += m_pMenuType[lIndex].szType2;
		}
		m_wndList.SetItemText( lItem , 6 , str );
	}
}

BOOL CFSmsJS::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
{
	if ( nID>= (UINT)(MENU_SMSJS_TYPESETUP+1) && nID<= (UINT)(MENU_SMSJS_TYPESETUP+1+m_lMenuTypeCount) )
	{
		long lCount = (long)(nID - (MENU_SMSJS_TYPESETUP+1));
		On_User_Type(lCount);
	}	
	return CDialog::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}

void CFSmsJS::SetToday(BOOL bToday)
{
	if ( m_bShowToday != bToday )
	{
		m_bShowToday = bToday;
		m_bRefresh = false;
	}

}

void CFSmsJS::ReadSetup()
{
	//�����ֻ���������
	m_Setup = m_pMainFrame->m_Setup;

}

BOOL CFSmsJS::FlashIcon(BOOL bCheck, BOOL bFlash)
{
	if ( bCheck )
	{
		CString str;
		str=_T("select count(*) as abc from smsRecv where Reader=0 ");  //��ѯδ���Ķ���
		if ( m_AdoRS.Open(str) && m_AdoRS.GetRecordCount()>0 )
		{
			long lCount;
			m_AdoRS.MoveFirst();
			m_AdoRS.GetCollect( _T("abc") , lCount );
			if ( lCount >0 )
				bFlash = true;
			else
				bFlash = false;
		}
		else
		{
			bFlash = false;
		}
		m_AdoRS.Close();
	}
	if ( bFlash )
	{
		m_lIconCount = 1;
		SetTimer(3 , 500 , NULL);
	}
	else
	{
		m_lIconCount = -1;
	}
	return bFlash;
}

BOOL CFSmsJS::ShowNoReaderMsg()
{
	CString str;
	SMS_See sms={0};
	long lRecvID = 0;
	COleDateTime t;
	str=_T("select top 1 * from smsRecv where Reader=0 order by RecvTime");  //��ѯδ���Ķ���
	if ( m_AdoRS.Open(str) && m_AdoRS.GetRecordCount()>0 )
	{
		m_AdoRS.MoveFirst();
		TCHAR szSender[32]={0};
		TCHAR szSendNum[32]={0};
		m_AdoRS.GetCollect( _T("RecvID")  , lRecvID);
		m_AdoRS.GetCollect( _T("SendNum") , szSendNum );
		m_AdoRS.GetCollect( _T("Sender")  , szSender );
		m_AdoRS.GetCollect( _T("RecvNum") , sms.szRecver );
		m_AdoRS.GetCollect( _T("Msg")     , sms.szMsg );
		m_AdoRS.GetCollect( _T("RecvTime"), t );t.GetAsSystemTime(sms.tRecv);
		m_AdoRS.Close();
		sms.tSend = sms.tRecv;
		_tcscpy( sms.szStatus , _T("�� ��") );

		if ( _tcslen(szSender)>0 )
			_stprintf(sms.szSender , _T("%s-%s") , szSendNum,szSender );
		else
			_tcscpy(sms.szSender , szSendNum );

		//״̬��Ϊ�Ѷ�
		str.Format( _T("update smsrecv set Reader=1 where RecvID=%d") , lRecvID );
		if ( m_AdoRS.Open( str ) && m_AdoRS.GetRecordCount() )
		{
			//���ң��ı�ͼ��
			long lCount = m_wndList.GetItemCount();
			long lRecvID2 = 0;
			for ( int i=0 ; i<lCount ; i++ )
			{
				lRecvID2 = m_wndList.GetItemData(i);
				if ( lRecvID == lRecvID2 )
				{
					m_wndList.SetIconIndex( i , 1 ); //��ʾ�Ѷ�ͼ��
					break;
				}
			}
		}

		sms.lType = SMS_SEE_TYPE_RECV;
		DLG_SmsLogSee dlg(this);
		dlg.SetParam(sms);
		dlg.SetReadSms(true);
		if ( dlg.DoModal() == 300 )  //���������ظ�
		{
			if ( m_pMainFrame->m_pFuncView->On_User_List_Add() ) //�½��б�
			{
				//���Ӻ���
				//��������
				long lCount = 1;
				long lSize = sizeof(Send_User)*lCount;
				BYTE *pS = new BYTE[lSize];
				memset( pS , 0 , lSize );
				Send_User * pUser = (Send_User * )pS;
				_tcscpy(pUser->szName , szSender );
				_tcscpy(pUser->szMobile , szSendNum );
				m_pMainFrame->m_pFuncView->On_User_List_AddUser(lCount,(Send_User*)pS);
				delete pS;
			}
		}
		//����ͼ��
		FlashIcon(true,false);
		return true;
	}

	FlashIcon(false,false);  //������ͼ���ˡ�
	return false;
}