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

545 lines
14 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

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

// SPDlg.cpp : implementation file
//
#include "stdafx.h"
#include "smsmanager.h"
#include "SPDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSPDlg dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_SP_Modify.h"
CSPDlg::CSPDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSPDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSPDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_bInit = false;
m_bRefresh = false;
}
void CSPDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSPDlg)
DDX_Control(pDX, IDC_SP_LIST, m_wndList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSPDlg, CDialog)
//{{AFX_MSG_MAP(CSPDlg)
ON_WM_SIZE()
ON_NOTIFY(NM_DBLCLK, IDC_SP_LIST, OnDblclkSpList)
ON_NOTIFY(NM_RCLICK, IDC_SP_LIST, OnRclickSpList)
ON_NOTIFY(LVN_KEYDOWN, IDC_SP_LIST, OnKeydownSpList)
//}}AFX_MSG_MAP
ON_COMMAND( MENU_SP_ADD , On_SP_Add )
ON_COMMAND( MENU_SP_MODIFY , On_SP_Modify )
ON_COMMAND( MENU_SP_DEL , On_SP_Del )
ON_COMMAND( MENU_SP_REFRESH, On_SP_Refresh )
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSPDlg message handlers
BOOL CSPDlg::ReShow(BOOL bRefresh)
{
ShowWindow( SW_SHOW );
if ( bRefresh || !m_bRefresh )
{
RefreshInfo();
}
return true;
}
BOOL CSPDlg::ReHide()
{
ShowWindow( SW_HIDE );
return true;
}
BOOL CSPDlg::RefreshInfo()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_SP) )
{
return false;
}
m_pMainFrame->SendFrame(SMSFUNC_SP_SEE,NULL,0);
return true;
}
BOOL CSPDlg::ProcessSocket(Socket_Head *pHead)
{
//取过滤信息
if (pHead->lFuncType == SMSFUNC_SP_SEE)
{
m_bRefresh = true; //已经刷新过
ANS_SP_See * pSee = (ANS_SP_See *)pHead->pFrame;
ANS_SP_SeeData * pData = (ANS_SP_SeeData *)(pHead->pFrame+sizeof(ANS_SP_See));
m_wndList.DeleteAllItems(); //删除原有的内容
this->Close(); //关闭原队列
TCHAR Buf[32];
for ( int i=0;i<pSee->lCount;i++ )
{
ANS_SP_SeeData * pNewData = new ANS_SP_SeeData;
*pNewData = *pData;
POSITION pos = m_SP.AddTail(pNewData);
//m_wndList.SetHeadings(_T("序号,50; 指令名称,80;指令,50;费率,50;发送条数,60;发送时间,80;"));
_stprintf(Buf , _T("%d") , i+1 );
m_wndList.InsertItem( i , Buf , 0 );
m_wndList.SetItemData( i , (DWORD)pos ); //存Pos
m_wndList.SetItemText(i,1,pData->szName);
m_wndList.SetItemText(i,2,pData->szOperCmd);
_stprintf(Buf,_T("%2d") , pData->lPrice );
m_wndList.SetItemText(i,3,Buf);
_stprintf(Buf,_T("%2d") , pData->lSendNum );
m_wndList.SetItemText(i,4,Buf);
_stprintf(Buf,_T("%02d:%02d:%02d") , pData->tDZSendTime1.wHour,pData->tDZSendTime1.wMinute,pData->tDZSendTime1.wSecond );
m_wndList.SetItemText(i,5,Buf);
if ( pData->bWeek )
{
m_wndList.SetItemText(i,6,_T(""));
memset(Buf,0,sizeof(Buf));
if ( pData->szWeekDay[0] == '1' )
_tcscat(Buf,_T("、日"));
if ( pData->szWeekDay[1] == '1' )
_tcscat(Buf,_T("、一"));
if ( pData->szWeekDay[2] == '1' )
_tcscat(Buf,_T("、二"));
if ( pData->szWeekDay[3] == '1' )
_tcscat(Buf,_T("、三"));
if ( pData->szWeekDay[4] == '1' )
_tcscat(Buf,_T("、四"));
if ( pData->szWeekDay[5] == '1' )
_tcscat(Buf,_T("、五"));
if ( pData->szWeekDay[6] == '1' )
_tcscat(Buf,_T("、六"));
m_wndList.SetItemText(i,7,Buf+2);
}
else
{
m_wndList.SetItemText(i,6,_T(""));
m_wndList.SetItemText(i,7,_T(""));
}
pData ++;
}
return true;
}
//添加过滤词语
if (pHead->lFuncType == SMSFUNC_SP_ADD)
{
ANS_SP_Add * pAdd = (ANS_SP_Add *)pHead->pFrame;
ANS_SP_SeeData * pData = (ANS_SP_SeeData *)(pHead->pFrame+sizeof(ANS_SP_Add));
if ( pAdd->lCount == 1 ) //等于1时表示修改成功
{
long lCount = m_wndList.GetItemCount();
//设置新的数据
TCHAR Buf[32];
_stprintf( Buf, _T("%d") , lCount +1 );
m_wndList.InsertItem( lCount , Buf , 0 );
m_wndList.SetItemText(lCount,1,pData->szName);
m_wndList.SetItemText(lCount,2,pData->szOperCmd);
_stprintf(Buf,_T("%2d") , pData->lPrice );
m_wndList.SetItemText(lCount,3,Buf);
_stprintf(Buf,_T("%2d") , pData->lSendNum );
m_wndList.SetItemText(lCount,4,Buf);
_stprintf(Buf,_T("%02d:%02d:%02d") , pData->tDZSendTime1.wHour,pData->tDZSendTime1.wMinute,pData->tDZSendTime1.wSecond );
m_wndList.SetItemText(lCount,5,Buf);
if ( pData->bWeek )
{
m_wndList.SetItemText(lCount,6,_T(""));
memset(Buf,0,sizeof(Buf));
if ( pData->szWeekDay[0] == '1' )
_tcscat(Buf,_T("、日"));
if ( pData->szWeekDay[1] == '1' )
_tcscat(Buf,_T("、一"));
if ( pData->szWeekDay[2] == '1' )
_tcscat(Buf,_T("、二"));
if ( pData->szWeekDay[3] == '1' )
_tcscat(Buf,_T("、三"));
if ( pData->szWeekDay[4] == '1' )
_tcscat(Buf,_T("、四"));
if ( pData->szWeekDay[5] == '1' )
_tcscat(Buf,_T("、五"));
if ( pData->szWeekDay[6] == '1' )
_tcscat(Buf,_T("、六"));
m_wndList.SetItemText(lCount,7,Buf+2);
}
else
{
m_wndList.SetItemText(lCount,6,_T(""));
m_wndList.SetItemText(lCount,7,_T(""));
}
ANS_SP_SeeData * pData2 = new ANS_SP_SeeData;
*pData2 = *pData;
POSITION pos = m_SP.AddTail( pData2 );
m_wndList.SetItemData( lCount, (DWORD)pos );
//如果返回的用户ID错误则重新刷新
if ( pData->lSPID <= 0 )
{
RefreshInfo();
}
}
return true;
}
//修改过滤信息
if (pHead->lFuncType == SMSFUNC_SP_MODIFY)
{
ANS_SP_Modify * pModify = (ANS_SP_Modify *)pHead->pFrame;
ANS_SP_SeeData * pData = (ANS_SP_SeeData *)(pHead->pFrame+sizeof(ANS_SP_Modify));
SetLockItem( pModify->lItem , false ); //解锁
if ( pModify->lCount == 1 ) //等于1时表示修改成功
{
POSITION pos = (POSITION)m_wndList.GetItemData(pModify->lItem);
ANS_SP_SeeData * pData2 = m_SP.GetNext( pos );
if ( pData2 )
{
*pData2 = *pData; //取到新的数据
//设置新的数据
TCHAR Buf[32]={0};
int i = pModify->lItem;
m_wndList.SetItemText(i,1,pData->szName);
m_wndList.SetItemText(i,2,pData->szOperCmd);
_stprintf(Buf,_T("%2d") , pData->lPrice );
m_wndList.SetItemText(i,3,Buf);
_stprintf(Buf,_T("%2d") , pData->lSendNum );
m_wndList.SetItemText(i,4,Buf);
_stprintf(Buf,_T("%02d:%02d:%02d") , pData->tDZSendTime1.wHour,pData->tDZSendTime1.wMinute,pData->tDZSendTime1.wSecond );
m_wndList.SetItemText(i,5,Buf);
if ( pData->bWeek )
{
m_wndList.SetItemText(i,6,_T(""));
memset(Buf,0,sizeof(Buf));
if ( pData->szWeekDay[0] == '1' )
_tcscat(Buf,_T("、日"));
if ( pData->szWeekDay[1] == '1' )
_tcscat(Buf,_T("、一"));
if ( pData->szWeekDay[2] == '1' )
_tcscat(Buf,_T("、二"));
if ( pData->szWeekDay[3] == '1' )
_tcscat(Buf,_T("、三"));
if ( pData->szWeekDay[4] == '1' )
_tcscat(Buf,_T("、四"));
if ( pData->szWeekDay[5] == '1' )
_tcscat(Buf,_T("、五"));
if ( pData->szWeekDay[6] == '1' )
_tcscat(Buf,_T("、六"));
m_wndList.SetItemText(i,7,Buf+2);
}
else
{
m_wndList.SetItemText(i,6,_T(""));
m_wndList.SetItemText(i,7,_T(""));
}
}
}
return true;
}
//删除过滤词语
if (pHead->lFuncType == SMSFUNC_SP_DEL)
{
ANS_SP_Del * pDel = (ANS_SP_Del *)pHead->pFrame;
ANS_SP_DelData * pDelData = (ANS_SP_DelData *)(pHead->pFrame+sizeof(ANS_SP_Del));
POSITION pos,pos2;
ANS_SP_SeeData * pSPData;
for ( int i = pDel->lCount-1 ; i>=0 ; i-- )
{
if ( pDelData[i].lSPID ) //删除成功
{
pos = (POSITION)m_wndList.GetItemData( pDelData[i].lItem );
pos2 = pos;
pSPData = m_SP.GetNext( pos );
if ( pSPData->lSPID == pDelData[i].lSPID ) //ID相同的才可删除
{
delete pSPData; //先删除数据
m_SP.RemoveAt(pos2); //从列表中删除
m_wndList.DeleteItem(pDelData[i].lItem); //从ListCtrl中删除
}
}
}
return true;
}
return false;
}
void CSPDlg::Close()
{
//清除队列中的内容
while (!m_SP.IsEmpty())
{
ANS_SP_SeeData * pData = m_SP.GetHead();
m_SP.RemoveHead();
delete pData;
}
}
void CSPDlg::ShowRMenu()
{
if (!m_pMainFrame->GetUserPurview(PURVIEW_SP,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_SP_ADD, _T(" 添 加 ") );
//修改
if ( lItem >=0 && !bLock)
{
menu.AppendMenu(MF_STRING , MENU_SP_MODIFY, _T(" 修 改 ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_SP_MODIFY , _T(" 修 改 ") );
}
//删除
if ( lItem >=0 && !bLock )
{
menu.AppendMenu(MF_STRING , MENU_SP_DEL, _T(" 删 除 ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_SP_DEL , _T(" 删 除 ") );
}
menu.AppendMenu(MF_SEPARATOR );
//刷新
menu.AppendMenu(MF_STRING , MENU_SP_REFRESH, _T(" 刷 新 ") );
//显示菜单
POINT pt ;
::GetCursorPos( &pt );
//this->ClientToScreen( &pt);
menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
menu.DestroyMenu();
}
long CSPDlg::GetCurrentSelected()
{
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
if ( pos )
{
return m_wndList.GetNextSelectedItem(pos);
}
return -1;
}
BOOL CSPDlg::isLockItem(long lItem, BOOL bShowWarning)
{
BOOL b = (m_wndList.GetIconIndex(lItem) == 1);
if ( b && bShowWarning )
{
MessageBox( _T("正录被锁定,请等待服务器返回后再操作!") , _T("锁定中") , MB_ICONINFORMATION );
}
return b;
}
void CSPDlg::SetLockItem(long lItem, BOOL bLock)
{
if ( bLock )
m_wndList.SetIconIndex( lItem , 1 );
else
m_wndList.SetIconIndex( lItem , 0 );
}
void CSPDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if ( m_bInit )
{
m_wndList.MoveWindow( 0 , 0 , cx,cy);
}
}
BOOL CSPDlg::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_SP) );
m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_LOCK) );
m_wndList.SubClassWindow2();
m_wndList.SetHeadings(_T("序号,50; 业务名称,120; 指 令,80;费率,55;发送条数,70;发送时间,75;每天发送,70; 星 期,200;"));
m_wndList.SetGridLines(true);
m_wndList.SetImageList(&m_Image,LVSIL_SMALL);
m_bInit = true;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CSPDlg::OnDblclkSpList(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
On_SP_Modify();
}
void CSPDlg::OnRclickSpList(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
ShowRMenu();
}
void CSPDlg::OnKeydownSpList(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CSPDlg::On_SP_Add()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_SP) )
{
return ;
}
ANS_SP_SeeData SPData={0};
DLG_SP_Modify dlg(this);
dlg.SetParam( SPData,0,true );
if ( dlg.DoModal() == IDOK )
{
long lSize = sizeof(REQ_SP_Add)+sizeof(ANS_SP_SeeData);
BYTE * pAddData = new BYTE[lSize];memset(pAddData,0,lSize);
REQ_SP_Add * pAdd = (REQ_SP_Add *)pAddData; //头
ANS_SP_SeeData * pSPData = (ANS_SP_SeeData *)(pAddData+sizeof(REQ_SP_Add));
*pSPData = dlg.GetParam();
pAdd->lCount = 1;
m_pMainFrame->SendFrame( SMSFUNC_SP_ADD , pAddData , lSize );
}
}
void CSPDlg::On_SP_Modify()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_SP) )
{
return ;
}
long lItem = GetCurrentSelected();
if ( lItem < 0 )
return ;
if (isLockItem(lItem))
{
return ;
}
POSITION pos = (POSITION)m_wndList.GetItemData(lItem);
POSITION pos2 = pos;
ANS_SP_SeeData * pData = m_SP.GetNext( pos );
if (pData)
{
DLG_SP_Modify dlg(this);
dlg.SetParam( *pData,pos2,false);
if ( dlg.DoModal() == IDOK )
{
SetLockItem( lItem ,true);
long lSize = sizeof(REQ_SP_Modify)+sizeof(ANS_SP_SeeData);
BYTE * pModifyData = new BYTE[lSize];memset(pModifyData,0,lSize);
REQ_SP_Modify * pModify = (REQ_SP_Modify *)pModifyData; //头
ANS_SP_SeeData * pSPData = (ANS_SP_SeeData *)(pModifyData+sizeof(REQ_SP_Modify));
*pSPData = dlg.GetParam();
pModify->lItem = lItem;
pModify->lCount = 1;
m_pMainFrame->SendFrame( SMSFUNC_SP_MODIFY , pModifyData , lSize );
}
}
}
void CSPDlg::On_SP_Del()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_SP) )
{
return ;
}
long lRet = MessageBox( _T("此操作将会删除此增值业务,是否继续?") , _T("提问") , MB_ICONQUESTION|MB_YESNOCANCEL|MB_DEFBUTTON2);
if ( lRet != IDYES )
return;
long lCount = m_wndList.GetSelectedCount();
long lSize = sizeof(REQ_SP_Del)+sizeof(ANS_SP_DelData)*lCount;
BYTE * pDelSend = new BYTE[lSize];memset(pDelSend,0,lSize);
REQ_SP_Del * pDel = (REQ_SP_Del *)pDelSend; //头
ANS_SP_DelData * pDelData = (ANS_SP_DelData *)(pDelSend+sizeof(REQ_SP_Del));
pDel->lCount = lCount;
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
ANS_SP_SeeData * pSPData;
POSITION pos2;
while(pos)
{
pDelData->lItem = m_wndList.GetNextSelectedItem(pos);
pos2 = (POSITION)m_wndList.GetItemData(pDelData->lItem);
pSPData = m_SP.GetNext(pos2); //取得列表中的pos
pDelData->lSPID = pSPData->lSPID;
pDelData ++;
}
m_pMainFrame->SendFrame( SMSFUNC_SP_DEL , pDelSend , lSize );
}
void CSPDlg::On_SP_Refresh()
{
RefreshInfo();
}
BOOL CSPDlg::FindSPName(const TCHAR *pSPName, POSITION exPos)
{
POSITION pos = m_SP.GetHeadPosition();
POSITION pos2;
while (pos)
{
pos2 = pos;
ANS_SP_SeeData * pData = m_SP.GetNext( pos );
if ( pos2 != exPos )
{
if ( !_tcscmp( pData->szName , pSPName ) )
return true;
}
}
return false;
}
BOOL CSPDlg::FindOperCmd(const TCHAR *pOperCmd, POSITION exPos)
{
POSITION pos = m_SP.GetHeadPosition();
POSITION pos2;
while (pos)
{
pos2 = pos;
ANS_SP_SeeData * pData = m_SP.GetNext( pos );
if ( pos2 != exPos )
{
if ( !_tcscmp( pData->szOperCmd , pOperCmd ) )
return true;
}
}
return false;
}