// ListMmsDlg.cpp : implementation file
//

#include "stdafx.h"
#include "smsmanager.h"
#include "ListMmsDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CListMmsDlg dialog

#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_SmsLogSee.h"
#include "DLG_HZB_Export.h"
#include "DLG_Corp_Oper_Open.h"
#include "DLG_BBS_Send.h"
#include "DLG_CheckUp_Mms_See.h"

CListMmsDlg::CListMmsDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CListMmsDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CListMmsDlg)
	m_lCorp = -1;
	m_tBegin = COleDateTime::GetCurrentTime();
	m_tEnd = COleDateTime::GetCurrentTime();
	m_lMobileType = -1;
	m_bOld = FALSE;
	m_lMsgType = -1;
	m_bJF = FALSE;
	m_lTop = -1;
	m_strMobile = _T("");
	//}}AFX_DATA_INIT
	m_bInit = false;
	m_bRefresh = false;
	//	m_bProcess = false;
	m_lQueryCorpID = 0;

	//取彩信
	m_bProcess = false;

	m_pMmsBuf = NULL;
	m_lMmsSize= 0;
	m_tBegin2 = COleDateTime::GetCurrentTime();
	m_tEnd2 = COleDateTime::GetCurrentTime();
}


void CListMmsDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CListMmsDlg)
	DDX_Control(pDX, IDC_LIST_MOBILE, m_E_Mobile);
	DDX_Control(pDX, IDC_LIST_CORPID, m_E_CorpID);
	DDX_Control(pDX, IDC_LIST_S1, m_S_S1);
	DDX_Control(pDX, IDC_LIST_CORP, m_L_Corp);
	DDX_Control(pDX, IDC_LIST_LIST, m_wndList);
	DDX_CBIndex(pDX, IDC_LIST_CORP, m_lCorp);
	DDX_DateTimeCtrl(pDX, IDC_LIST_TBEGIN, m_tBegin);
	DDX_DateTimeCtrl(pDX, IDC_LIST_TEND, m_tEnd);
	DDX_CBIndex(pDX, IDC_LIST_MOBILETYPE, m_lMobileType);
	DDX_Check(pDX, IDC_LIST_OLD, m_bOld);
	DDX_CBIndex(pDX, IDC_LIST_MSGYTYPE, m_lMsgType);
	DDX_Check(pDX, IDC_LIST_JF, m_bJF);
	DDX_CBIndex(pDX, IDC_LIST_TOP, m_lTop);
	DDX_Text(pDX, IDC_LIST_MOBILE, m_strMobile);
	DDV_MaxChars(pDX, m_strMobile, 15);
	//}}AFX_DATA_MAP
	DDX_DateTimeCtrl(pDX, IDC_LIST_TBEGIN2, m_tBegin2);
	DDX_DateTimeCtrl(pDX, IDC_LIST_TEND2, m_tEnd2);
}


BEGIN_MESSAGE_MAP(CListMmsDlg, CDialog)
	//{{AFX_MSG_MAP(CListMmsDlg)
	ON_WM_SIZE()
	ON_BN_CLICKED(IDC_LIST_QUERY, OnListQuery)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST_LIST, OnDblclkListList)
	ON_BN_CLICKED(IDC_LIST_QUERY2, OnListQuery2)
	ON_NOTIFY(NM_RCLICK, IDC_LIST_LIST, OnRclickListList)
	//}}AFX_MSG_MAP
	ON_COMMAND(MENU_LIST_SEE      , On_User_See )
	ON_COMMAND(MENU_LIST_ADDBACK  , On_User_AddBack )
	ON_COMMAND(MENU_LIST_SENDBBS  , On_User_SendBBS )
	ON_COMMAND(MENU_LIST_CORPLIST , On_User_CorpList )
	ON_COMMAND(MENU_LIST_CORPOFF  , On_User_CorpOFF )
	ON_COMMAND(MENU_LIST_EXPORT   , On_User_Export )
	ON_COMMAND(MENU_LIST_COPY     , On_User_Copy )
	ON_COMMAND(MENU_LIST_SEEMMS   , On_User_SeeMms)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_LIST, &CListMmsDlg::OnLvnItemchangedListList)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CListMmsDlg message handlers

BOOL CListMmsDlg::ReShow(BOOL bRefresh)
{
#ifdef SMSMANAGER_KF
	if (!m_pMainFrame->GetUserPurview(PURVIEW_TAB, false))
	{
		GetDlgItem(IDC_LIST_OLD)->ShowWindow(SW_HIDE);
		m_bOld = false;
	}

	if (!m_pMainFrame->GetUserPurview(PURVIEW_TAB, false))
	{
		GetDlgItem(IDC_LIST_TOP)->EnableWindow(false);
		GetDlgItem(IDC_LIST_TBEGIN)->EnableWindow(false);
		GetDlgItem(IDC_LIST_TEND)->EnableWindow(false);
		GetDlgItem(IDC_LIST_TBEGIN2)->EnableWindow(false);
		GetDlgItem(IDC_LIST_TEND2)->EnableWindow(false);
	}

#endif

	ShowWindow( SW_SHOW );
	if ( bRefresh || !m_bRefresh )
	{
		RefreshInfo();
	}
	return true;
}

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

BOOL CListMmsDlg::RefreshInfo()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_LIST) )
	{
		return false;
	}
	m_pMainFrame->SendFrame(SMSFUNC_CORP_NAME,NULL,0);
	return true;
}

BOOL CListMmsDlg::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_BACK_ADD)
	{
		ANS_Back_Add * pBack = (ANS_Back_Add *)pHead->pFrame;

		CString str;
		if ( pBack->bOK )
		{
			str.Format( _T("黑名单添加成功,%d->%s!"),pBack->lCorpID , pBack->szMobile );
			MessageBox( str , _T("提示") , MB_ICONINFORMATION );
		}
		else
		{
			str.Format( _T("黑名单添加失败,请检查!"));
			MessageBox( str , _T("提示") , MB_ICONINFORMATION );
		}

		return true;
	}


	return false;
}

BOOL CListMmsDlg::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;


#ifdef SMSMANAGER_KF
	GetDlgItem(IDC_LIST_S1)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_LIST_CORP)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_LIST_QUERY2)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_LIST_CORPID)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_LIST_OLD)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_LIST_JF)->ShowWindow(SW_HIDE);

	//GetDlgItem(IDC_LIST_S2)->ShowWindow(SW_HIDE);
	//GetDlgItem(IDC_LIST_MOBILETYPE)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_LIST_MSGYTYPE)->ShowWindow(SW_HIDE);



#endif

	//初始化List
	m_Image.Create(16,16,ILC_COLOR16|ILC_MASK,5,5);
	m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_LIST) );
	m_wndList.SubClassWindow2();
	m_wndList.SetHeadings(_T("序号,40; 类 型,80;状态,50;企业ID,60;发送人,70; 发送号码,130; 接收人,70; 接收号码,130;运营商,70;  提交时间,150;  发送时间,150;  接收时间,150;  定时时间,150;   彩信标题,150;彩信大小,70;   备注,400;"));
	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,t.wDay );  //起始
	m_tEnd.SetDate( t.wYear,t.wMonth,t.wDay );//结束
	if (!m_pMainFrame->GetUserPurview(PURVIEW_TAB, false))
	{
		COleDateTime tP = COleDateTime::GetCurrentTime() - COleDateTimeSpan(2, 0, 0, 0);
		m_tBegin.SetDate(tP.GetYear(), tP.GetMonth(), tP.GetDay());  //起始
	}

	t.wHour=0;
	t.wMinute=0;
	t.wSecond=0;
	m_tBegin2.SetTime(t.wHour,t.wMinute,t.wSecond);
	t.wHour=23;
	t.wMinute=59;
	t.wSecond=59;
	m_tEnd2.SetTime(t.wHour,t.wMinute,t.wSecond);


	m_lMobileType = 0; //默认查询所有号码
	m_lMsgType=0;      //默认查询所有类型的短信
	m_lTop = 1;        //默认显示前200条短信

	UpdateData(false);

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

void CListMmsDlg::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);
	}	
}

void CListMmsDlg::Close()
{
	Close_Corp();
	Close_ListData();
}

void CListMmsDlg::OnListQuery() 
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_LIST) )
	{
		return ;
	}
	UpdateData(true);

	m_tBegin.SetDateTime(m_tBegin.GetYear(),m_tBegin.GetMonth(),m_tBegin.GetDay(),m_tBegin2.GetHour(),m_tBegin2.GetMinute(),m_tBegin2.GetSecond());
	m_tEnd.SetDateTime(m_tEnd.GetYear(),m_tEnd.GetMonth(),m_tEnd.GetDay(),m_tEnd2.GetHour(),m_tEnd2.GetMinute(),m_tEnd2.GetSecond());

	if ( m_tEnd < m_tBegin )
	{
		MessageBox( _T("查询结束时间不能小于起始时间,请改正!") , _T("错误") , MB_ICONWARNING );
		return ;
	}
	REQ_ListMms * pList = new REQ_ListMms;memset(pList,0,sizeof(REQ_ListMms));

	if ( m_strMobile.GetLength()>8 )
		_tcscpy(pList->szMobile , m_strMobile );
//	m_E_Mobile.SetWindowText( _T("") );
#ifdef SMSMANAGER_KF
	if ( m_lQueryCorpID )
	{
		pList->lCorpID = m_lQueryCorpID;
		pList->lMsgType = -1;        //查询所有的记录
		m_lQueryCorpID = 0;
		_tcscpy(pList->szMobile, _T(""));
	}
	else
	{

		if (!m_pMainFrame->GetUserPurview(PURVIEW_TAB, false))
		{
			if (m_strMobile.GetLength() < 8)
			{
				MessageBox(_T("必须输入手机号码查询清单!"), _T("错误"), MB_ICONWARNING);
				GetDlgItem(IDC_LIST_MOBILE)->SetFocus();
				return;
			}

		}
		pList->lCorpID = -1;
		pList->lMsgType = 4;        //查询接收的记录
	}
	m_tBegin.GetAsSystemTime( pList->tBegin );
	m_tEnd.GetAsSystemTime( pList->tEnd );
	pList->lMobileType = m_lMobileType-1;  //手机类型
	pList->bOld = false;            //是否查询旧数据
	pList->bJF  = false;             //是否仅查询计费的

	if ( _tcslen(pList->szMobile)>8 )
	{
		pList->lCorpID = -1;
		pList->lMsgType = -1;        //查询所有的记录
		pList->lMobileType = -1;  //手机类型
	}
#else
	if ( m_lQueryCorpID )
	{
		pList->lCorpID = m_lQueryCorpID;
		pList->lMsgType = -1;        //查询所有的记录
		m_lQueryCorpID = 0;
		_tcscpy(pList->szMobile, _T(""));
	}
	else
	{
		if ( m_lCorp <= 0 )  //选了所有企业
		{
			pList->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)
			{
				pList->lCorpID = pData->lCorpID;
			}
			else
			{
				return;
			}
		}
		pList->lMobileType = m_lMobileType-1;  //手机类型
		pList->lMsgType    = m_lMsgType-1;     //短信类型
		pList->bOld = m_bOld;            //是否查询旧数据
		pList->bJF  = m_bJF;             //是否仅查询计费的
	}
	m_tBegin.GetAsSystemTime( pList->tBegin );
	m_tEnd.GetAsSystemTime( pList->tEnd );
#endif
	switch ( m_lTop )
	{
	case 1:
		pList->lTop = 200;
		break;
	case 2:
		pList->lTop = 500;
		break;
	case 3:
		pList->lTop = 1000;
		break;
	case 4:
		pList->lTop = 2000;
		break;
	case 5:
		pList->lTop = 5000;
		break;
	case 0:
	default:
		pList->lTop = -1;
		break;
	}
	this->Close_ListData();              //关闭原队列
	m_wndList.ShowWindow( SW_HIDE ); //为了加快显示速度
	m_wndList.DeleteAllItems();  //先删除所有记录
	m_pMainFrame->SendFrame(SMSFUNC_LISTMMS,(BYTE*)pList,sizeof(REQ_ListMms));
//	m_bProcess = true;
//	m_Process.DoModal();
//	m_bProcess = false;
	m_wndList.ShowWindow( SW_SHOW ); //为了加快显示速度
	m_S_S1.SetWindowText( _T("查询企业") );
	#ifdef SMSCENTER_NX
		GetDlgItem(IDC_LIST_QUERY)->EnableWindow(false);
	#endif

	return ;	
}

void CListMmsDlg::OnDblclkListList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;

	On_User_See();
}

void CListMmsDlg::OnListQuery2() 
{
	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 CListMmsDlg::OnRclickListList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;

	ShowRMenu();
}

void CListMmsDlg::ShowRMenu()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_LIST) )
	{
		return ;
	}
#if defined(SMSCENTER_NX) && !defined(SMSCENTER_GDDX)
	//农信版本,根据不同权限划分客服与查帐两个版本
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_RESETPASSWD,false) ) //最小权限
	{
		return ;
	}
#endif

	CMenu menu;
	menu.CreatePopupMenu();
	BOOL bLock = false;
	long lItem = this->GetCurrentSelected();
	//添加
	if ( lItem>=0 )
	{
		menu.AppendMenu(MF_STRING     , MENU_LIST_SEE       , _T(" 查基本资料 ") );
		menu.AppendMenu(MF_STRING     , MENU_LIST_SEEMMS    , _T(" 查彩信内容 ") );
		menu.AppendMenu(MF_SEPARATOR );
		if (m_pMainFrame->GetUserPurview(PURVIEW_LIST, false))
		{
			menu.AppendMenu(MF_STRING, MENU_LIST_CORPLIST, _T(" 查询此企业清单 "));
		}
		menu.AppendMenu(MF_SEPARATOR );
		menu.AppendMenu(MF_STRING     , MENU_LIST_CORPOFF , _T(" 禁用此企业 ") );
		menu.AppendMenu(MF_SEPARATOR );
		menu.AppendMenu(MF_STRING     , MENU_LIST_ADDBACK, _T(" 添加到黑名单 ") );
		menu.AppendMenu(MF_SEPARATOR );
		menu.AppendMenu(MF_STRING     , MENU_LIST_SENDBBS, _T(" 发送黑名单屏蔽通知 ") );
	}
	else
	{
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_LIST_SEE    , _T(" 查基本资料 ") );
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_LIST_SEEMMS    , _T(" 查彩信内容 ") );
		menu.AppendMenu(MF_SEPARATOR );
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_LIST_CORPLIST, _T(" 查询此企业清单 ") );
		menu.AppendMenu(MF_SEPARATOR );
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_LIST_CORPOFF , _T(" 禁用此企业 ") );
		menu.AppendMenu(MF_SEPARATOR );
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_LIST_ADDBACK, _T(" 添加到黑名单 ") );
		menu.AppendMenu(MF_SEPARATOR );
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_LIST_SENDBBS, _T(" 发送黑名单屏蔽通知 ") );
	}
	menu.AppendMenu(MF_SEPARATOR );
	menu.AppendMenu(MF_STRING     , MENU_LIST_COPY    , _T(" 复 制 ") );
#ifndef SMSMANAGER_KF
	menu.AppendMenu(MF_SEPARATOR );
	menu.AppendMenu(MF_STRING     , MENU_LIST_EXPORT    , _T(" 导 出 ") );
#endif
	//显示菜单
	POINT pt ;
	::GetCursorPos( &pt );
	//this->ClientToScreen( &pt);
	menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
	menu.DestroyMenu();
}

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

void CListMmsDlg::On_User_See()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_LIST) )
	{
		return ;
	}

	long lItem = m_wndList.GetFirstSelectedItem();
	if ( lItem < 0 )
		return ;

	POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
	POSITION pos2 = pos;
	ANS_ListMmsData * pData = m_ListData.GetNext( pos );
	if (!pData)
		return ;

	SMS_See sms={0};


	_stprintf(sms.szCorpID, _T("%d"), pData->lCorpID);

	CString strType = _T("未知");
	switch (pData->lSmsType)
	{
	case SMSTYPE_SEND:
		strType = _T("下行短信");
		break;
	case SMSTYPE_ZF:
		strType = _T("转发短信");
		break;
	case SMSTYPE_ALARM:
		strType = _T("日程提醒");
		break;
	case SMSTYPE_EMAIL:
		strType = _T("邮件通知");
		break;
	case SMSTYPE_RECV:
		strType = _T("回复短信");
		break;
	case SMSTYPE_SP:
		strType = _T("增值业务");
		break;
	case SMSTYPE_SWT:
		strType = _T("商务通");
		break;
	}

	CString strStatus = _T("未知");
	switch (pData->lStatus)
	{
	case SMSTYPE_SEND:
		strStatus = _T("提交成功");
		break;
	case SEND_STATUS_SUB_FILT:
		strStatus = _T("审核中");
		break;
	case SEND_STATUS_SUB_ERROR:
	case SEND_STATUS_SUB_USERNOSMS:
	case SEND_STATUS_SUB_CORPNOSMS:
	case SEND_STATUS_SUB_CORPOVRDATE:
	case SEND_STATUS_SUB_NUMNOSUP:
	case SEND_STATUS_OVERCOUNT:
	case SEND_STATUS_NOSY:
		strStatus = _T("提交失败");
		break;
	case SEND_STATUS_FILT_ERROR:
		strStatus = _T("审核失败");
		break;
	case SEND_STATUS_SEND_OK:
		strStatus = _T("发送成功");
		break;
	case SEND_STATUS_SEND_ERROR:
		strStatus = _T("发送失败");
		break;
	case SEND_STATUS_RECV_OK:
		strStatus = _T("接收成功");
		break;
	case SEND_STATUS_RECV_ERROR:
		strStatus = _T("接收失败");
		break;
	}

	_stprintf(sms.szStatus, _T("%d - %s - %s"), pData->lStatus, strStatus, strType);

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

	TCHAR szBuf[32] = { 0 };
	_tcscpy(szBuf, pData->szRecvNum);
#ifdef SMSMANAGER_KF
	if (!m_pMainFrame->GetUserPurview(PURVIEW_TAB, false))
	{
		szBuf[4] = '*'; szBuf[5] = '*'; szBuf[6] = '*';
	}
#endif

	if ( _tcslen(pData->szRecver))
		_stprintf( sms.szRecver , _T("%s-%s") , pData->szRecver, szBuf);
	else
		_stprintf( sms.szRecver , _T("%s") , szBuf);

	_stprintf( sms.szSendTime , _T("%04d.%02d.%02d %02d:%02d:%02d") ,pData->tSendTime.wYear, pData->tSendTime.wMonth,pData->tSendTime.wDay,pData->tSendTime.wHour,pData->tSendTime.wMinute,pData->tSendTime.wSecond );
	_stprintf( sms.szRecvTime , _T("%04d.%02d.%02d %02d:%02d:%02d") ,pData->tRecvTime.wYear,pData->tRecvTime.wMonth,pData->tRecvTime.wDay,pData->tRecvTime.wHour,pData->tRecvTime.wMinute,pData->tRecvTime.wSecond );
	_stprintf( sms.szMsg , _T("(%.2fk) %s") , (float)pData->lmmSize/1024.0f,pData->szTitle );

	CString str;
	str.Format(_T("%-32s;%-4d;%s") , pData->szMsgID,pData->lSendRet,pData->szRecvStatus);
	str.TrimLeft();
	str.TrimRight();
	_tcscpy(sms.szAdd,str);

	DLG_SmsLogSee dlg(this);
	dlg.SetParam(sms);
	dlg.DoModal();
}
void CListMmsDlg::On_User_SeeMms()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_LIST) )
	{
		return ;
	}

	long lItem = m_wndList.GetFirstSelectedItem();
	if ( lItem < 0 )
		return ;

	POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
	POSITION pos2 = pos;
	ANS_ListMmsData * pData = m_ListData.GetNext( pos );
	if (!pData)
		return ;
	
	if (m_pMmsBuf )
	{
		delete m_pMmsBuf;
		m_pMmsBuf = NULL;
		m_lMmsSize= 0;
	}

	m_bProcess = true;

	REQ_Mms_GetFile * pGet = new REQ_Mms_GetFile;
	memset(pGet , 0 , sizeof(REQ_Mms_GetFile));
	pGet->lCorpID = pData->lCorpID;
	pGet->lUserID = pData->lUserID;
	pGet->lFileID = pData->lFileID;
	m_pMainFrame->SendFrame(SMSFUNC_MMS_GETFILE2 , (BYTE*)pGet , sizeof(REQ_Mms_GetFile) );
	
	m_Process.DoModal();
	m_bProcess = false;
	
	if ( m_pMmsBuf && m_lMmsSize>0 )
	{
		int i=0;
	}

}

void CListMmsDlg::On_User_AddBack()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_LIST) )
	{
		return ;
	}
	long lItem = m_wndList.GetFirstSelectedItem();
	if ( lItem < 0 )
		return ;

	POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
	POSITION pos2 = pos;
	ANS_ListMmsData * pData = m_ListData.GetNext( pos );
	if (!pData)
		return ;


	CString strTemp;
	CString strMobile;
	CString strMobile2;
	CString strMsg;
	CString str;
	if ( pData->lSmsType == 4 )
	{
		strMobile = pData->szSendNum;
	}
	else
	{
		strMobile = pData->szRecvNum;
	}
	strMobile2 = strMobile;
#ifdef SMSMANAGER_KF
	if ( strMobile2.GetLength()>7 )
	{
		strMobile2.SetAt(4,'*');
		strMobile2.SetAt(5,'*');
		strMobile2.SetAt(6,'*');
	}
	pData->szSendNum[4]='*';pData->szSendNum[5]='*';pData->szSendNum[6]='*';
#endif
	strMsg = pData->szTitle;

	str.Format( _T("真的要添加以下内容到黑名单:\r\n号码:%s\r\n内容:(%.2fk) %s\r\n"),strMobile2,(float)pData->lmmSize/1024.0f,strMsg );

	int iRet = MessageBox( str , _T("提问") , MB_ICONQUESTION|MB_YESNO );
	if ( iRet !=IDYES )
		return ;

	REQ_Back_Add * pAdd = new REQ_Back_Add;
	memset(pAdd , 0 ,sizeof(REQ_Back_Add));
	pAdd->lCorpID = pData->lCorpID;
	pAdd->lUserID = -1;
	_tcscpy(pAdd->szMobile , strMobile );
	_stprintf( pAdd->szBZ , _T("后台添加:%s") , strMsg );
	
	m_pMainFrame->SendFrame(SMSFUNC_BACK_ADD,(BYTE*)pAdd,sizeof(REQ_Back_Add));

}
void CListMmsDlg::On_User_SendBBS()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_LIST) )
	{
		return ;
	}
	long lItem = m_wndList.GetFirstSelectedItem();
	if ( lItem < 0 )
		return ;

	POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
	POSITION pos2 = pos;
	ANS_ListMmsData * pData = m_ListData.GetNext( pos );
	if (!pData)
		return ;

	//向用户发送消息
	ANS_BBS_SeeData See={0};
	See.lBBSID = 0;
	See.lSCorpID = 0;  //管理员发的
	See.lSUserID = m_pMainFrame->m_lUserID;  //管理员ID
	_tcscpy(See.szSCorpName,_T("管理员"));
	_tcscpy(See.szSLoginName , m_pMainFrame->m_Setup.szUser );
	See.lRCorpID = pData->lCorpID;
	See.lRUserID = pData->lUserID;
	DLG_BBS_Send dlg(this);
	dlg.SetParam( See , 3 );
	if ( dlg.DoModal() == IDOK )
	{
		long lSize = sizeof(REQ_BBS_Send)+sizeof(ANS_BBS_SeeData);
		BYTE * pModifyData = new BYTE[lSize];memset(pModifyData,0,lSize);
		REQ_BBS_Send * pModify = (REQ_BBS_Send *)pModifyData;   //头
		ANS_BBS_SeeData * pSPData = (ANS_BBS_SeeData *)(pModifyData+sizeof(REQ_BBS_Send));
		*pSPData = dlg.GetParam();
		pModify->lItem  = lItem;
		pModify->lCount = 1;
		m_pMainFrame->SendFrame( SMSFUNC_BBS_SEND , pModifyData , lSize );
	}
	return ;
}

void CListMmsDlg::On_User_Export()
{
	//m_wndList.SetHeadings(_T("序号,40; 类 型,80;状态,50;企业ID,60;发送人,70; 发送号码,120; 接收人,70; 接收号码,120;  提交时间,150;  发送时间,150;  接收时间,150;  定时时间,150;     短信内容,1000;    信息ID,150;"));
	SortItem item[32]={0};
	_tcscpy(item[0].szItem,_T("类 型"));
	_tcscpy(item[1].szItem,_T("状态"));
	_tcscpy(item[2].szItem,_T("企业ID"));
	_tcscpy(item[3].szItem,_T("发送人"));
	_tcscpy(item[4].szItem,_T("发送号码"));
	_tcscpy(item[5].szItem,_T("接收人"));
	_tcscpy(item[6].szItem,_T("接收号码"));
	_tcscpy(item[7].szItem, _T("运营商"));
	_tcscpy(item[8].szItem,_T("提交时间"));
	_tcscpy(item[9].szItem,_T("发送时间"));
	_tcscpy(item[10].szItem,_T("接收时间"));
	_tcscpy(item[11].szItem,_T("定时时间"));
	_tcscpy(item[12].szItem,_T("彩信标题"));
	DLG_HZB_Export dlg(this);
	dlg.SetParam( &m_wndList );
	dlg.SetListItem(item,13,-2);
	dlg.DoModal();
}
void CListMmsDlg::On_User_Copy()
{
	long lItem = m_wndList.GetFirstSelectedItem();
	if ( lItem < 0 )
		return ;

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

	CString str,strTemp;

	long lCol   = m_wndList.GetColumnCount();
	long lCount = m_wndList.GetSelectedItemCount();

	for ( int i=0 ; i<lCol ; i++ )
	{
		LVCOLUMN  lmn={0};
		TCHAR szBuf[256]={0};
		lmn.mask = LVCF_TEXT;
		lmn.pszText = szBuf;
		lmn.cchTextMax = sizeof(szBuf);
		m_wndList.GetColumn(i , &lmn);

		str += CString(lmn.pszText );
		str += CString(_T("\t"));

	}
	str += _T("\r\n");


	lItem = -1;
	for ( i=0 ; i<lCount ; i++ )
	{
		lItem = m_wndList.GetFirstSelectedItem(lItem);
		if ( lItem >=0 )
		{
			CString str1;
			for ( int j=0 ; j<lCol; j++ )
			{
				str1=m_wndList.GetItemText(lItem,j);
#ifdef SMSMANAGER_KF
				if ( j == 12 )
					str1 = _T("");
				
#endif
				str1.TrimLeft();str1.TrimRight();str1.Replace( _T("\t") , _T("") );str1.Replace( _T("\r") , _T("") );str1.Replace( _T("\n") , _T("") );
				strTemp.Format(_T("%s\t"),str1);
				str += strTemp;
			}
			str += _T("\r\n");

		}
	}

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

	CloseClipboard(); 

	return ;

}

void CListMmsDlg::Close_Corp()
{
	//清除队列中的内容
	while (!m_Corp.IsEmpty())
	{
		ANS_Corp_NameData * pData = m_Corp.GetHead();
		m_Corp.RemoveHead();
		delete pData;
	}

}

void CListMmsDlg::Close_ListData()
{
	//清除队列中的内容
	while (!m_ListData.IsEmpty())
	{
		ANS_ListMmsData * pData = m_ListData.GetHead();
		m_ListData.RemoveHead();
		delete pData;
	}

}

void CListMmsDlg::On_User_CorpList()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_LIST) )
	{
		return ;
	}

	long lItem = m_wndList.GetFirstSelectedItem();
	if ( lItem < 0 )
		return ;

	POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
	POSITION pos2 = pos;
	ANS_ListMmsData * pData = m_ListData.GetNext( pos );
	if (!pData)
		return ;

	m_lQueryCorpID = pData->lCorpID;
	OnListQuery();
}

void CListMmsDlg::On_User_CorpOFF()
{
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_LIST) )
	{
		return ;
	}

	long lItem = m_wndList.GetFirstSelectedItem();
	if ( lItem < 0 )
		return ;

	POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
	POSITION pos2 = pos;
	ANS_ListMmsData * pData = m_ListData.GetNext( pos );
	if (!pData)
		return ;

//	CString str;
//	str.Format( _T("是否要禁用此企业ID:%d?\r\n禁用后此企业将不能登录!"),pData->lCorpID );
//	if ( MessageBox(str , _T("提问") , MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2) != IDYES )
//		return ;

	ANS_Corp_SeeData data={0};
	data.lCorpID = pData->lCorpID;
	
	DLG_Corp_Oper_Open dlg(this);
	dlg.SetParam(&data,false,this->m_pMainFrame->m_Setup.szUser);
	
	if ( dlg.DoModal() == IDOK )
	{
		REQ_CorpOFF * pCorp = new REQ_CorpOFF;memset(pCorp,0,sizeof(REQ_CorpOFF));
		pCorp->lCorpID = pData->lCorpID;
		pCorp->lStatus = 0;  //0为禁用,1为启用
		_tcscpy(pCorp->szBZ , dlg.m_strBZ );
		_tcscpy(pCorp->szOper , dlg.m_strOperName );

		m_pMainFrame->SendFrame(SMSFUNC_CORPOFF,(BYTE*)pCorp,sizeof(REQ_CorpOFF));
	}
}

BOOL CListMmsDlg::ProcessSocket(Socket_Head_Add *pHead, BYTE *pFrame)
{
	//取清单
	if (pHead->lFuncType == SMSFUNC_LISTMMS)
	{
	#ifdef SMSCENTER_NX
		GetDlgItem(IDC_LIST_QUERY)->EnableWindow(true);
	#endif

		ANS_ListMms * pList = (ANS_ListMms *)pFrame;
		ANS_ListMmsData * pData = (ANS_ListMmsData *)(pFrame+sizeof(ANS_ListMms));
		CString str,strTemp;
		strTemp.Format( _T("查询企业 (%d/%d)") , pList->lPageCount,pList->lPageAll );
		m_S_S1.SetWindowText( strTemp );
		//添加到List
		long lCount = m_wndList.GetItemCount();
		TCHAR szBuf[512]={0};
		for ( int i = 0 ; i< pList->lCount;i++)
		{
			ANS_ListMmsData * pNewData = new ANS_ListMmsData;
			*pNewData = *pData;
			POSITION pos = m_ListData.AddTail(pNewData);

			//m_wndList.SetHeadings(_T("序号,40; 类 型,80;状态,50;企业ID,60;发送人,70; 发送号码,120; 接收人,70; 接收号码,120;  提交时间,150;  发送时间,150;  接收时间,150;     短信内容,1000;    信息ID,120;"));
			m_wndList.InsertItem( lCount+i,_itot(lCount+i+1,szBuf,10),0);
			_tcscpy( szBuf , _T("未知") );
			switch( pData->lSmsType )
			{
			case SMSTYPE_SEND:
				 _tcscpy(szBuf , _T("发 送") );
				 break;
			case SMSTYPE_ZF:
				 _tcscpy(szBuf , _T("转 发") );
				 break;
			case SMSTYPE_ALARM:
				 _tcscpy(szBuf , _T("日程提醒") );
				 break;
			case SMSTYPE_EMAIL:
				 _tcscpy(szBuf , _T("邮件通知") );
				 break;
			case SMSTYPE_RECV:
				 _tcscpy(szBuf , _T("接 收") );
				 break;
			case SMSTYPE_SP:
				 _tcscpy(szBuf , _T("增值业务") );
				 break;
			case SMSTYPE_SWT:
				 _tcscpy(szBuf , _T("商务通") );
				 break;
			}
			m_wndList.SetItemText(lCount+i,1,szBuf);
#ifdef SMSMANAGER_KF
			_tcscpy( szBuf , _T("未知") );
			switch( pData->lStatus )
			{
			case 0:
				 _tcscpy(szBuf , _T("未发"));
				 break;
			case 1:
				 _tcscpy(szBuf , _T("审核"));
				 break;
			case 7:
				 _tcscpy(szBuf , _T("审核失败"));
				 break;
			case 10:
			case 12:
				 _tcscpy(szBuf , _T("发送成功"));
				 break;
			case 11:
			case 13:
				 _tcscpy(szBuf , _T("发送失败"));
				 break;
			}
			m_wndList.SetItemText(lCount+i,2,szBuf);
#else
			_stprintf(szBuf , _T("%4d") , pData->lStatus );
			m_wndList.SetItemText(lCount+i,2,szBuf);
#endif
			_stprintf(szBuf , _T("%d") , pData->lCorpID );
			m_wndList.SetItemText(lCount+i,3,szBuf);
			m_wndList.SetItemText(lCount+i,4,pData->szSender);
			_tcscpy(szBuf , pData->szSendNum );
#ifdef SMSMANAGER_KF
			//szBuf[4]='*';szBuf[5]='*';szBuf[6]='*';
#endif
			m_wndList.SetItemText(lCount+i,5,szBuf);
			m_wndList.SetItemText(lCount+i,6,pData->szRecver);
			_tcscpy(szBuf , pData->szRecvNum );
#ifdef SMSMANAGER_KF
			szBuf[4]='*';szBuf[5]='*';szBuf[6]='*';
#endif
			m_wndList.SetItemText(lCount+i,7,szBuf);


			switch (pData->lRecvNumType)
			{
			case 0:
				str = _T("移动");
				break;
			case 1:
				str = _T("联通");
				break;
			case 2:
				str = _T("小灵通");
				break;
			case 3:
				str = _T("电信");
				break;
			case 4:
				str = _T("国际");
				break;
			default:
				str = _T("");
				break;
			}
			m_wndList.SetItemText(lCount + i, 8, str);


			_stprintf( szBuf , _T("%04d.%02d.%02d %02d:%02d:%02d") ,pData->tSubTime.wYear, pData->tSubTime.wMonth,pData->tSubTime.wDay,pData->tSubTime.wHour,pData->tSubTime.wMinute,pData->tSubTime.wSecond );
			m_wndList.SetItemText(lCount+i,9,szBuf);
			_stprintf( szBuf , _T("%04d.%02d.%02d %02d:%02d:%02d") ,pData->tSendTime.wYear, pData->tSendTime.wMonth,pData->tSendTime.wDay,pData->tSendTime.wHour,pData->tSendTime.wMinute,pData->tSendTime.wSecond );
			m_wndList.SetItemText(lCount+i,10,szBuf);
			_stprintf( szBuf , _T("%04d.%02d.%02d %02d:%02d:%02d") ,pData->tRecvTime.wYear,pData->tRecvTime.wMonth,pData->tRecvTime.wDay,pData->tRecvTime.wHour,pData->tRecvTime.wMinute,pData->tRecvTime.wSecond );
			m_wndList.SetItemText(lCount+i,11,szBuf);
			_stprintf( szBuf , _T("%04d.%02d.%02d %02d:%02d:%02d") ,pData->tTimerTime.wYear,pData->tTimerTime.wMonth,pData->tTimerTime.wDay,pData->tTimerTime.wHour,pData->tTimerTime.wMinute,pData->tTimerTime.wSecond );
			m_wndList.SetItemText(lCount+i,12,szBuf);
			m_wndList.SetItemText(lCount+i,13,pData->szTitle);
			_stprintf( szBuf , _T("%.2fk") , (float)pData->lmmSize/1024.0f);
			m_wndList.SetItemText(lCount+i,14,szBuf);

			_stprintf(szBuf,_T("%-32s;%-4d;%s") , pData->szMsgID,pData->lSendRet,pData->szRecvStatus);
			m_wndList.SetItemText(lCount+i,15,szBuf);

			m_wndList.SetItemData(lCount+i,(DWORD_PTR)(pos) );
			pData++;
		}
//		if ( m_bProcess )  //是导入用户,需要显示进度条,并导入下一条
//		{
//			m_Process.SetProcess( pList->lPageAll , pList->lPageCount );
//		}
		return true;
	}
	//取彩信
	if (pHead->lFuncType == SMSFUNC_MMS_GETFILE2)
	{
		ANS_REQ_Mms_GetFile2     * pGet = (ANS_REQ_Mms_GetFile2 *)pFrame;
		BYTE                    * pData = (BYTE *)(pFrame+sizeof(ANS_REQ_Mms_GetFile2));
		if ( pGet->lStatus <=0 )
		{
			CString str;
			str.Format(_T("取彩信附件错误,错误代码:%d") , pGet->lStatus );
			MessageBox(str , _T("错误") , MB_ICONWARNING );
			if ( m_bProcess )  //是导入用户,需要显示进度条,并导入下一条
			{
				m_Process.SetProcess( 1 , 1 );
			}
			if (m_pMmsBuf )
			{
				delete m_pMmsBuf;
				m_pMmsBuf = NULL;
				m_lMmsSize= 0;
			}
		}
		else
		{
			if ( pGet->lDownSize == pGet->lSize ) //第一个包
			{
				if (m_pMmsBuf )
				{
					delete m_pMmsBuf;
					m_pMmsBuf = NULL;
					m_lMmsSize= 0;
				}
				m_lMmsSize = pGet->lAllSize;
				m_pMmsBuf = new BYTE[m_lMmsSize];
				memset(m_pMmsBuf , 0 , m_lMmsSize );
			}
			if ( m_pMmsBuf )
			{
				memcpy(m_pMmsBuf+(pGet->lDownSize-pGet->lSize) ,pData, pGet->lSize );
			}
			if ( m_bProcess )  //是导入用户,需要显示进度条,并导入下一条
			{
				m_Process.SetProcess( pGet->lAllSize , pGet->lDownSize );
			}
			if ( pGet->lAllSize == pGet->lDownSize &&
				m_pMmsBuf && m_lMmsSize>0 )
			{
				DLG_CheckUp_Mms_See dlg(this);
				dlg.SetParam(*pGet , m_pMmsBuf , m_lMmsSize , this->m_pMainFrame);
				dlg.DoModal();

				if (m_pMmsBuf )
				{
					delete m_pMmsBuf;
					m_pMmsBuf = NULL;
					m_lMmsSize= 0;
				}
			}

		}
		return true;
	}
	return false;
}


void CListMmsDlg::OnLvnItemchangedListList(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	*pResult = 0;
}