CorpSms/FQuery.cpp
2025-02-27 16:58:16 +08:00

504 lines
13 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.

// FQuery.cpp : implementation file
//
#include "stdafx.h"
#include "corpsms.h"
#include "FQuery.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CFQuery dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_Query_Add.h"
CFQuery::CFQuery(CWnd* pParent /*=NULL*/)
: CDialog(CFQuery::IDD, pParent)
{
//{{AFX_DATA_INIT(CFQuery)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_bInit = false;
m_bRefresh = false;
m_bRefresh2= false;
}
void CFQuery::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFQuery)
DDX_Control(pDX, IDC_QUERY_LIST, m_wndList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFQuery, CDialog)
//{{AFX_MSG_MAP(CFQuery)
ON_WM_SIZE()
ON_NOTIFY(NM_RCLICK, IDC_QUERY_LIST, OnRclickQueryList)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_QUERY_LIST, OnItemchangedQueryList)
ON_NOTIFY(LVN_KEYDOWN, IDC_QUERY_LIST, OnKeydownQueryList)
ON_NOTIFY(NM_DBLCLK, IDC_QUERY_LIST, OnDblclkQueryList)
//}}AFX_MSG_MAP
ON_COMMAND( MENU_QUERY_ADD , On_R_Add )
ON_COMMAND( MENU_QUERY_MODIFY , On_R_Modify )
ON_COMMAND( MENU_QUERY_DELETE , On_R_Delete )
ON_COMMAND( MENU_QUERY_REFRESH, On_R_Refresh )
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFQuery message handlers
BOOL CFQuery::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;
m_AdoRS.SetAdoConnection( &m_pMainFrame->m_adoConnection );
//初始化List
m_Image.Create(16,16,ILC_COLOR32|ILC_MASK,5,5);
m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_QUERY) );
m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_LOCK) );
m_wndList.SubClassWindow2();
//m_wndList.SetHeadings(_T("序号,50; 内 容,300; 提醒时间,250;"));
m_wndList.SetHeadings(_T("序号,50; 状态,60; 指令,120;查询次数,70; 返回内容,200; 备 注,200;"));
m_wndList.SetGridLines(true);
//m_wndList.SetCheckboxes(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;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CFQuery::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if ( m_bInit )
{
m_wndList.MoveWindow( 0 , 0 , cx,cy);
}
}
long CFQuery::GetCurrentSelected()
{
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
if ( pos )
{
return m_wndList.GetNextSelectedItem(pos);
}
return -1;
}
void CFQuery::ShowRMenu()
{
BOOL bQuery = m_pMainFrame->m_Setup.bSDK & SDK_AUTOQUERY ? true:false;
if ( !bQuery )
return ;
CMenu menu;
menu.CreatePopupMenu();
BOOL bLock = false;
long lItem = this->GetCurrentSelected();
//添加
menu.AppendMenu(MF_STRING , MENU_QUERY_ADD, _T(" 添加指令 ") );
menu.AppendMenu(MF_SEPARATOR );
//修改
if ( lItem >=0 && !bLock)
{
menu.AppendMenu(MF_STRING , MENU_QUERY_MODIFY, _T(" 修 改 ") );
menu.AppendMenu(MF_STRING , MENU_QUERY_DELETE, _T(" 删 除 ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_QUERY_MODIFY, _T(" 修 改 ") );
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , MENU_QUERY_DELETE, _T(" 删 除 ") );
}
menu.AppendMenu(MF_SEPARATOR );
menu.AppendMenu(MF_STRING , MENU_QUERY_REFRESH, _T(" 刷 新 ") );
//显示菜单
POINT pt ;
::GetCursorPos( &pt );
//this->ClientToScreen( &pt);
menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
menu.DestroyMenu();
}
BOOL CFQuery::ProcessSocket(Socket_Head *pHead)
{
//修改公用地址本
if (pHead->lFuncType == SMSFUNC_QUERY_SEE)
{
m_bRefresh = true; //已刷新
m_bRefresh2 = true; //正在刷新
ANS_Query_See * pSee = (ANS_Query_See *)pHead->pFrame;
ANS_Query_Data * pData = (ANS_Query_Data *)(pHead->pFrame+sizeof(ANS_Query_See));
m_wndList.ShowWindow( SW_HIDE ); //加快显示速度
m_wndList.DeleteAllItems();
TCHAR szTemp[32]={0};
for ( int i=0 ; i<pSee->lCount;i++ )
{
//写到列表
m_wndList.InsertItem( i , _itot(i+1,szTemp,10),0);
m_wndList.SetItemText(i,2,pData->szCmd);
_stprintf(szTemp , _T("%6d") , pData->lQueryCount );
m_wndList.SetItemText(i,3,szTemp);
m_wndList.SetItemText(i,4,pData->szRet);
m_wndList.SetItemText(i,5,pData->szBZ);
if ( pData->lStatus == 1 )
m_wndList.SetItemText(i,1,_T(" 启用 "));
else
m_wndList.SetItemText(i,1,_T("未启用"));
//m_wndList.SetCheck(i,pData->lStatus);
m_wndList.SetItemData(i,pData->lQueryID);
pData ++;
}
m_AdoRS.Close();
m_wndList.ShowWindow( SW_SHOW ); //加快显示速度
m_bRefresh2 = false;
return true;
}
//添加Query
if (pHead->lFuncType == SMSFUNC_QUERY_ADD)
{
ANS_Query_Add * pAdd = (ANS_Query_Add *)pHead->pFrame;
if ( pAdd->bOK ) //添加成功
{
long lCount = m_wndList.GetItemCount();
TCHAR szTemp[32]={0};
//设置新的数据
//写到列表
m_wndList.InsertItem( lCount , _itot(lCount+1,szTemp,10),0);
m_wndList.SetItemText(lCount,2,pAdd->szCmd);
_stprintf(szTemp , _T("%6d") , pAdd->lQueryCount );
m_wndList.SetItemText(lCount,3,szTemp);
m_wndList.SetItemText(lCount,4,pAdd->szRet);
m_wndList.SetItemText(lCount,5,pAdd->szBZ);
if ( pAdd->lStatus == 1 )
m_wndList.SetItemText(lCount,1,_T(" 启用 "));
else
m_wndList.SetItemText(lCount,1,_T("未启用"));
//m_wndList.SetCheck(lCount,pAdd->lStatus);
m_wndList.SetItemData(lCount,pAdd->lQueryID);
}
return true;
}
//修改Email
if (pHead->lFuncType == SMSFUNC_QUERY_MODIFY)
{
ANS_Query_Modify * pModify = (ANS_Query_Modify *)pHead->pFrame;
if ( pModify->bOK ) //修改成功
{
//设置新的数据
//写到列表
if ( !pModify->bOnlyStatus ) //仅修改状态
{
if ( pModify->lStatus == 1 )
m_wndList.SetItemText(pModify->lItemID,1,_T(" 启用 "));
else
m_wndList.SetItemText(pModify->lItemID,1,_T("未启用"));
//m_wndList.SetCheck(pModify->lItemID,pModify->lStatus);
m_wndList.SetItemText(pModify->lItemID,2,pModify->szCmd);
//_stprintf(szTemp , _T("%6d") , pAdd->lQueryCount );
//m_wndList.SetItemText(i,3,szTemp);
m_wndList.SetItemText(pModify->lItemID,4,pModify->szRet);
m_wndList.SetItemText(pModify->lItemID,5,pModify->szBZ);
}
}
return true;
}
//删除用户
if (pHead->lFuncType == SMSFUNC_QUERY_DEL)
{
ANS_Query_Del * pDel = (ANS_Query_Del *)pHead->pFrame;
ANS_Query_DelData * pDelData = (ANS_Query_DelData *)(pHead->pFrame+sizeof(ANS_Query_Del));
m_wndList.ShowWindow( SW_HIDE ); //为了加快显示速度
for ( int i = pDel->lCount-1 ; i>=0 ; i-- )
{
long lQueryID = m_wndList.GetItemData(pDelData[i].lItem);
if ( pDelData[i].lQueryID && lQueryID == pDelData[i].lQueryID) //删除成功
{
m_wndList.DeleteItem(pDelData[i].lItem); //从ListCtrl中删除
}
}
m_wndList.ShowWindow( SW_SHOW ); //为了加快显示速度
return true;
}
return false;
}
BOOL CFQuery::RefreshInfo()
{
BOOL bQuery = m_pMainFrame->m_Setup.bSDK & SDK_AUTOQUERY ? true:false;
if ( bQuery )
{
REQ_Query_See * pSee = new REQ_Query_See;
pSee->lCorpID = m_pMainFrame->m_lCorpID;
pSee->lUserID = m_pMainFrame->m_lUserID;
m_pMainFrame->SendFrame( SMSFUNC_QUERY_SEE , (BYTE*)pSee , sizeof( REQ_Query_See ) ); //发送取资料的请求
}
return true;
}
BOOL CFQuery::ReShow(BOOL bRefresh)
{
ShowWindow( SW_SHOW );
if ( bRefresh || !m_bRefresh )
{
RefreshInfo();
}
return true;
}
BOOL CFQuery::ReHide()
{
ShowWindow( SW_HIDE );
return true;
}
void CFQuery::OnRclickQueryList(NMHDR* pNMHDR, LRESULT* pResult)
{
ShowRMenu();
*pResult = 0;
}
void CFQuery::OnItemchangedQueryList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
*pResult = 0;
if ( m_wndList.GetSelectedCount() > 1 ) //大于1不处理
return ;
if ( m_bRefresh2 )
return ;
//原是禁用,现在是启用
if ( pNMListView->uNewState==8192 && pNMListView->uOldState== 4096 )
{
REQ_Query_Modify * pModify = new REQ_Query_Modify;
memset(pModify,0,sizeof(REQ_Query_Modify));
pModify->bOnlyStatus = true; //修改所有项目,只是状态
pModify->lItemID = pNMListView->iItem;
pModify->lQueryID = m_wndList.GetItemData(pNMListView->iItem);
pModify->lCorpID = m_pMainFrame->m_lCorpID;
pModify->lUserID = m_pMainFrame->m_lUserID;
pModify->lStatus = 1; //启用
m_pMainFrame->SendFrame( SMSFUNC_QUERY_MODIFY , (BYTE*)pModify , sizeof( REQ_Query_Modify ) ); //发送取资料的请求
}
//原是启用,现在是禁用
if ( pNMListView->uNewState==4096 && pNMListView->uOldState== 8192 )
{
REQ_Query_Modify * pModify = new REQ_Query_Modify;
memset(pModify,0,sizeof(REQ_Query_Modify));
pModify->bOnlyStatus = true; //修改所有项目,只是状态
pModify->lItemID = pNMListView->iItem;
pModify->lQueryID = m_wndList.GetItemData(pNMListView->iItem);
pModify->lCorpID = m_pMainFrame->m_lCorpID;
pModify->lUserID = m_pMainFrame->m_lUserID;
pModify->lStatus = 0; //启用
m_pMainFrame->SendFrame( SMSFUNC_QUERY_MODIFY , (BYTE*)pModify , sizeof( REQ_Calendar_Modify ) ); //发送取资料的请求
}
}
void CFQuery::OnKeydownQueryList(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
*pResult = 0;
if ( pLVKeyDow->wVKey == VK_DELETE )
{
On_R_Delete();
}
if ( pLVKeyDow->wVKey == VK_INSERT)
{
On_R_Add();
}
if ( pLVKeyDow->wVKey == VK_SPACE)
{
On_R_Modify();
}
if ( pLVKeyDow->wVKey == 'R' || pLVKeyDow->wVKey == 'r')
{
On_R_Refresh();
}
if ( pLVKeyDow->wVKey == 'A' || pLVKeyDow->wVKey == 'a')
{
m_wndList.SelectAllItems();
}
}
void CFQuery::OnDblclkQueryList(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
On_R_Modify();
}
void CFQuery::OnOK()
{
//CDialog::OnOK();
}
void CFQuery::OnCancel()
{
//CDialog::OnCancel();
}
void CFQuery::On_R_Add()
{
BOOL bQuery = m_pMainFrame->m_Setup.bSDK & SDK_AUTOQUERY ? true:false;
if ( !bQuery )
return ;
if ( m_wndList.GetItemCount() > 100 )
{
MessageBox( _T("对不起,添加的短信查询指令到了极限!") , _T("错误") , MB_ICONWARNING );
return ;
}
ANS_Query_Data data={0};
data.lStatus = 1; //默认启动
DLG_Query_Add dlg(this);
dlg.SetParam(data);
if ( dlg.DoModal()==IDOK )
{
REQ_Query_Add * pAdd = new REQ_Query_Add;
memset(pAdd,0,sizeof(REQ_Query_Add));
pAdd->lCorpID = m_pMainFrame->m_lCorpID;
pAdd->lUserID = m_pMainFrame->m_lUserID;
pAdd->lStatus = dlg.m_bEnable;
_tcscpy(pAdd->szCmd , dlg.m_Data.szCmd );
_tcscpy(pAdd->szRet , dlg.m_Data.szRet );
_tcscpy(pAdd->szBZ , dlg.m_Data.szBZ );
m_pMainFrame->SendFrame( SMSFUNC_QUERY_ADD , (BYTE*)pAdd , sizeof( REQ_Query_Add ) ); //发送取资料的请求
}
}
void CFQuery::On_R_Modify()
{
BOOL bQuery = m_pMainFrame->m_Setup.bSDK & SDK_AUTOQUERY ? true:false;
if ( !bQuery )
return ;
long lItem = this->GetCurrentSelected();
if ( lItem < 0 )
return ;
ANS_Query_Data data=GetQueryData(lItem);
DLG_Query_Add dlg(this);
dlg.SetParam(data);
if ( dlg.DoModal()==IDOK )
{
REQ_Query_Modify * pModify = new REQ_Query_Modify;
memset(pModify,0,sizeof(REQ_Query_Modify));
pModify->bOnlyStatus = false; //修改所有项目,不只是状态
pModify->lItemID = lItem;
pModify->lQueryID= data.lQueryID;
pModify->lCorpID = m_pMainFrame->m_lCorpID;
pModify->lUserID = m_pMainFrame->m_lUserID;
pModify->lStatus = dlg.m_bEnable;
_tcscpy(pModify->szCmd , dlg.m_Data.szCmd );
_tcscpy(pModify->szRet , dlg.m_Data.szRet );
_tcscpy(pModify->szBZ , dlg.m_Data.szBZ );
m_pMainFrame->SendFrame( SMSFUNC_QUERY_MODIFY , (BYTE*)pModify , sizeof( REQ_Query_Modify ) ); //发送取资料的请求
}
}
void CFQuery::On_R_Delete()
{
BOOL bQuery = m_pMainFrame->m_Setup.bSDK & SDK_AUTOQUERY ? true:false;
if ( !bQuery )
return ;
long lCount = m_wndList.GetSelectedCount();
long lSize = sizeof(REQ_Query_Del)+sizeof(ANS_Query_DelData)*lCount;
BYTE * pDelSend = new BYTE[lSize];memset(pDelSend,0,lSize);
REQ_Query_Del * pDel = (REQ_Query_Del *)pDelSend; //头
ANS_Query_DelData * pDelData = (ANS_Query_DelData *)(pDelSend+sizeof(REQ_Query_Del));
pDel->lCount = lCount;
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
while(pos)
{
pDelData->lItem = m_wndList.GetNextSelectedItem(pos);
pDelData->lQueryID= m_wndList.GetItemData(pDelData->lItem);
pDelData ++;
}
m_pMainFrame->SendFrame( SMSFUNC_QUERY_DEL , pDelSend , lSize );
}
void CFQuery::On_R_Refresh()
{
RefreshInfo();
}
ANS_Query_Data CFQuery::GetQueryData(long lItem)
{
ANS_Query_Data data= {0};
long lID = m_wndList.GetItemData(lItem);
if ( lID >= 0 )
{
data.lQueryID = lID;
CString str;
str = m_wndList.GetItemText( lItem , 1 );
if ( str == _T(" 启用 ") )
data.lStatus = 1;
else
data.lStatus = 0;
m_wndList.GetItemText( lItem , 2 , data.szCmd , sizeof(data.szCmd));
m_wndList.GetItemText( lItem , 4 , data.szRet , sizeof(data.szRet));
m_wndList.GetItemText( lItem , 5 , data.szBZ , sizeof(data.szBZ));
}
return data;
}
BOOL CFQuery::QueryCmd(const TCHAR *pCmd,long lID)
{
long lCount = m_wndList.GetItemCount();
for ( int i=0 ; i<lCount ; i++ )
{
long lID2 = m_wndList.GetItemData(i);
if ( lID2 != lID )
{
CString strCmd;
strCmd = m_wndList.GetItemText(i,2);
if ( strCmd == CString(pCmd) )
{
return true;
}
}
}
return false;
}