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

543 lines
13 KiB
C++

// Back.cpp : implementation file
//
#include "stdafx.h"
#include "smsmanager.h"
#include "Back.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CBack dialog
// CTabDlg dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_Back_Add.h"
CBack::CBack(CWnd* pParent /*=NULL*/)
: CDialog(CBack::IDD, pParent)
{
//{{AFX_DATA_INIT(CBack)
m_lCorp = -1;
m_strMobile = _T("");
m_tBegin = COleDateTime::GetCurrentTime();
m_tEnd = COleDateTime::GetCurrentTime();
//}}AFX_DATA_INIT
m_bInit = false;
m_bRefresh = false;
}
void CBack::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBack)
DDX_Control(pDX, IDC_BACK_CORPID, m_E_CorpID);
DDX_Control(pDX, IDC_BACK_S1, m_S_S1);
DDX_Control(pDX, IDC_BACK_CORP, m_L_Corp);
DDX_Control(pDX, IDC_BACK_LIST, m_wndList);
DDX_CBIndex(pDX, IDC_BACK_CORP, m_lCorp);
DDX_Text(pDX, IDC_BACK_USERID, m_strMobile);
DDV_MaxChars(pDX, m_strMobile, 15);
DDX_DateTimeCtrl(pDX, IDC_BACK_TBEGIN, m_tBegin);
DDX_DateTimeCtrl(pDX, IDC_BACK_TEND, m_tEnd);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBack, CDialog)
//{{AFX_MSG_MAP(CBack)
ON_WM_SIZE()
ON_BN_CLICKED(IDC_BACK_QUERY, OnBackQuery)
ON_NOTIFY(NM_DBLCLK, IDC_BACK_LIST, OnDblclkBackList)
ON_NOTIFY(LVN_KEYDOWN, IDC_BACK_LIST, OnKeydownBackList)
ON_NOTIFY(NM_RCLICK, IDC_BACK_LIST, OnRclickBackList)
ON_BN_CLICKED(IDC_BACK_QUERY2, OnBackQuery2)
ON_BN_CLICKED(IDC_BACK_QUERY3, OnBackQuery3)
//}}AFX_MSG_MAP
ON_COMMAND( MENU_BACK_ADD , On_Back_Add )
ON_COMMAND( MENU_BACK_DEL , On_Back_Del )
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBack message handlers
void CBack::Close()
{
//清除队列中的内容
while (!m_Corp.IsEmpty())
{
ANS_Corp_NameData * pData = m_Corp.GetHead();
m_Corp.RemoveHead();
delete pData;
}
}
BOOL CBack::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_BACK) );
m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_LOCK) );
m_wndList.SubClassWindow2();
m_wndList.SetHeadings(_T("序号,50; 企业ID,100; 用户ID,100;手机号码,100; 禁用时间,150;禁用原因,200;"));
m_wndList.SetGridLines(true);
m_wndList.SetImageList(&m_Image,LVSIL_SMALL);
m_bInit = true;
#ifdef SMSMANAGER_KF
//GetDlgItem(IDC_BACK_S1)->ShowWindow(SW_HIDE);
//GetDlgItem(IDC_BACK_CORP)->ShowWindow(SW_HIDE);
//GetDlgItem(IDC_BACK_CORPID)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BACK_QUERY3)->ShowWindow(SW_HIDE);
if (!m_pMainFrame->GetUserPurview(PURVIEW_TAB, false))
{
GetDlgItem(IDC_BACK_S1)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BACK_QUERY2)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BACK_CORP)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BACK_CORPID)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BACK_S2)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BACK_TBEGIN)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BACK_TEND)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BACK_S21)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BACK_S22)->ShowWindow(SW_HIDE);
}
#endif
SYSTEMTIME t; ::GetLocalTime(&t);
m_tBegin.SetStatus( COleDateTime::null );
m_tEnd.SetStatus( COleDateTime::null );
UpdateData(false);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CBack::ReShow(BOOL bRefresh)
{
ShowWindow( SW_SHOW );
if ( bRefresh || !m_bRefresh )
{
RefreshInfo();
}
return true;
}
BOOL CBack::ReHide()
{
ShowWindow( SW_HIDE );
return true;
}
BOOL CBack::RefreshInfo()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_LIST) )
{
return false;
}
m_pMainFrame->SendFrame(SMSFUNC_CORP_NAME,NULL,0);
return true;
}
BOOL CBack::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(); //关闭原队列
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)pos);
pData ++;
}
m_L_Corp.SetCurSel(0);
return true;
}
//取清单
if (pHead->lFuncType == SMSFUNC_BACK)
{
ANS_Back * pList = (ANS_Back *)pHead->pFrame;
ANS_BackData * pData = (ANS_BackData *)(pHead->pFrame+sizeof(ANS_Back));
//添加到List
m_wndList.ShowWindow( SW_HIDE );
m_wndList.DeleteAllItems();
m_wndList.DeleteAllColumns();
if ( pList->lQueryType == 1 )
m_wndList.SetHeadings(_T("序号,50; 企业ID,100; 数量,100;"));
else
m_wndList.SetHeadings(_T("序号,50; 企业ID,100; 用户ID,100;手机号码,100; 禁用时间,150;禁用原因,200;"));
long lCount = m_wndList.GetItemCount();
TCHAR szBuf[64];
for ( int i = 0 ; i< pList->lCount;i++)
{
//m_wndList.SetHeadings(_T("序号,50; 企业ID,100; 用户ID,100;手机号码,100;禁用原因,200;"));
m_wndList.InsertItem( i,_itot(i+1,szBuf,10),0);
m_wndList.SetItemData( i,pData->lBackID );
_stprintf(szBuf , _T("%d") , pData->lCorpID );
m_wndList.SetItemText(i,1,szBuf);
if ( pList->lQueryType == 1 )
{
_stprintf(szBuf , _T("%d") , pData->lUserID );
m_wndList.SetItemText(i,2,szBuf);
}
else
{
_stprintf(szBuf , _T("%d") , pData->lUserID );
m_wndList.SetItemText(i,2,szBuf);
m_wndList.SetItemText(i,3,pData->szMobile);
_stprintf(szBuf , _T("%04d.%02d.%02d %02d:%02d") , pData->tAdd.wYear,pData->tAdd.wMonth,pData->tAdd.wDay,pData->tAdd.wHour,pData->tAdd.wMinute);
m_wndList.SetItemText(i,4,szBuf);
m_wndList.SetItemText(i,5,pData->szBZ);
}
pData++;
}
m_wndList.ShowWindow( SW_SHOW );
return true;
}
//添加企业用户
if (pHead->lFuncType == SMSFUNC_BACK_ADD)
{
ANS_Back_Add * pAdd = (ANS_Back_Add *)pHead->pFrame;
if ( pAdd->bOK == 1 ) //等于1时表示修改成功
{
long lCount = m_wndList.GetItemCount();
TCHAR szBuf[32];
_stprintf( szBuf, _T("%d") , lCount +1 );
//设置新的数据
m_wndList.InsertItem( lCount , szBuf);
m_wndList.SetItemData( lCount, (DWORD)pAdd->lBackID );
_stprintf(szBuf , _T("%d") , pAdd->lCorpID );
m_wndList.SetItemText(lCount,1,szBuf);
_stprintf(szBuf , _T("%d") , pAdd->lUserID );
m_wndList.SetItemText(lCount,2,szBuf);
m_wndList.SetItemText(lCount,3,pAdd->szMobile);
m_wndList.SetItemText(lCount, 4, _T(""));
m_wndList.SetItemText(lCount,5,pAdd->szBZ);
}
return true;
}
//删除企业用户
if (pHead->lFuncType == SMSFUNC_BACK_DEL)
{
ANS_Back_Del * pDel = (ANS_Back_Del *)pHead->pFrame;
ANS_Back_DelData * pDelData = (ANS_Back_DelData *)(pHead->pFrame+sizeof(ANS_Back_Del));
for ( int i = pDel->lCount-1 ; i>=0 ; i-- )
{
if ( pDelData[i].lBackID ) //删除成功
{
m_wndList.DeleteItem(pDelData[i].lItem); //从ListCtrl中删除
}
}
}
return false;
}
void CBack::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 CBack::OnBackQuery()
{
if ( !UpdateData(true) )
return ;
if ( m_tBegin.GetStatus()==0 &&
m_tEnd.GetStatus()==0 &&
m_tEnd < m_tBegin )
{
MessageBox( _T("查询结束日期不能小于起始日期,请改正!") , _T("错误") , MB_ICONWARNING );
return ;
}
REQ_Back * pBack = new REQ_Back; memset(pBack, 0, sizeof(REQ_Back));
#ifdef SMSMANAGER_KF
if ( m_strMobile.GetLength()<10 )
{
MessageBox( _T("手机号码输入有误,请输入!"), _T("错误"), MB_ICONWARNING );
GetDlgItem(IDC_BACK_USERID)->SetFocus();
delete pBack;
return ;
}
#else
pBack->lCorpID = -1;
if ( m_lCorp >= 0 )
{
if ( m_lCorp == 0 ) //选了所有企业
{
pBack->lCorpID = -1;
}
else
{
POSITION pos = (POSITION)m_L_Corp.GetItemData(m_lCorp);
if ( pos>0 && pos!=(POSITION)0xffffffff)
{
POSITION pos2 = pos;
ANS_Corp_NameData * pData = m_Corp.GetNext( pos );
if (pData)
{
pBack->lCorpID = pData->lCorpID;
}
else
{
delete pBack;
return;
}
}
}
}
#endif
_tcscpy( pBack->szMobile , m_strMobile );
m_tBegin.GetAsSystemTime( pBack->tBegin );
m_tEnd.GetAsSystemTime( pBack->tEnd );
pBack->lQueryType = 0; //查询明细
m_pMainFrame->SendFrame(SMSFUNC_BACK,(BYTE*)pBack,sizeof(REQ_Back));
return ;
}
void CBack::OnDblclkBackList(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CBack::OnKeydownBackList(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CBack::OnRclickBackList(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
ShowRMenu();
}
void CBack::ShowRMenu()
{
/*
if (!m_pMainFrame->GetUserPurview(PURVIEW_TAB,false)) //没有查看权限
return ;
*/
CMenu menu;
menu.CreatePopupMenu();
BOOL bLock = false;
long lItem = this->GetCurrentSelected();
if ( lItem >= 0 )
bLock = isLockItem( lItem , false ); //取得是否正在锁定
//添加
menu.AppendMenu(MF_STRING , MENU_BACK_ADD, _T(" 添 加 ") );
//删除
if ( lItem >=0 && !bLock )
{
menu.AppendMenu(MF_STRING , MENU_BACK_DEL, _T(" 删 除 ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_BACK_DEL , _T(" 删 除 ") );
}
//显示菜单
POINT pt ;
::GetCursorPos( &pt );
//this->ClientToScreen( &pt);
menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
menu.DestroyMenu();
}
void CBack::SetLockItem(long lItem, BOOL bLock)
{
if ( bLock )
m_wndList.SetIconIndex( lItem , 1 );
else
m_wndList.SetIconIndex( lItem , 0 );
}
BOOL CBack::isLockItem(long lItem, BOOL bShowWarning)
{
BOOL b = (m_wndList.GetIconIndex(lItem) == 1);
if ( b && bShowWarning )
{
MessageBox( _T("正录被锁定,请等待服务器返回后再操作!") , _T("锁定中") , MB_ICONINFORMATION );
}
return b;
}
long CBack::GetCurrentSelected()
{
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
if ( pos )
{
return m_wndList.GetNextSelectedItem(pos);
}
return -1;
}
void CBack::On_Back_Add()
{
DLG_Back_Add dlg(this);
if ( dlg.DoModal() == IDOK )
{
REQ_Back_Add * pAdd = new REQ_Back_Add;
memset(pAdd,0,sizeof(REQ_Back_Add));
pAdd->lCorpID = dlg.m_lCorpID;
pAdd->lUserID = dlg.m_lUserID;
_tcscpy( pAdd->szMobile , dlg.m_strMobile );
_tcscpy( pAdd->szBZ , dlg.m_strBZ );
m_pMainFrame->SendFrame(SMSFUNC_BACK_ADD,(BYTE*)pAdd,sizeof(REQ_Back_Add));
}
}
void CBack::On_Back_Del()
{
long lRet = MessageBox( _T("此操作将会删除黑名单用户,是否继续?") , _T("提问") , MB_ICONQUESTION|MB_YESNOCANCEL|MB_DEFBUTTON2);
if ( lRet != IDYES )
return;
long lCount = m_wndList.GetSelectedCount();
long lSize = sizeof(REQ_Back_Del)+sizeof(ANS_Back_DelData)*lCount;
BYTE * pDelSend = new BYTE[lSize];memset(pDelSend,0,lSize);
REQ_Back_Del * pDel = (REQ_Back_Del *)pDelSend; //头
ANS_Back_DelData * pDelData = (ANS_Back_DelData *)(pDelSend+sizeof(REQ_Back_Del));
pDel->lCount = lCount;
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
while(pos)
{
pDelData->lItem = m_wndList.GetNextSelectedItem(pos);
pDelData->lBackID = m_wndList.GetItemData(pDelData->lItem);
pDelData ++;
}
m_pMainFrame->SendFrame( SMSFUNC_BACK_DEL , pDelSend , lSize );
}
void CBack::OnBackQuery2()
{
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 CBack::OnBackQuery3()
{
if ( !UpdateData(true) )
return ;
if ( m_tBegin.GetStatus()==0 &&
m_tEnd.GetStatus()==0 &&
m_tEnd < m_tBegin )
{
MessageBox( _T("查询结束日期不能小于起始日期,请改正!") , _T("错误") , MB_ICONWARNING );
return ;
}
REQ_Back * pBack = new REQ_Back;memset(pBack,0,sizeof(REQ_Back));
#ifdef SMSMANAGER_KF
pBack->lCorpID = -1;
if ( m_strMobile.GetLength()<10 )
{
MessageBox( _T("手机号码输入有误,请输入!"), _T("错误"), MB_ICONWARNING );
GetDlgItem(IDC_BACK_USERID)->SetFocus();
return ;
}
#else
pBack->lCorpID = -1;
if ( m_lCorp >= 0 )
{
if ( m_lCorp == 0 ) //选了所有企业
{
pBack->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)
{
pBack->lCorpID = pData->lCorpID;
}
else
{
return;
}
}
}
#endif
_tcscpy( pBack->szMobile , m_strMobile );
m_tBegin.GetAsSystemTime( pBack->tBegin );
m_tEnd.GetAsSystemTime( pBack->tEnd );
pBack->lQueryType = 1; //查询汇总
m_pMainFrame->SendFrame(SMSFUNC_BACK,(BYTE*)pBack,sizeof(REQ_Back));
return ;
}