// C_LISTSEND.cpp : implementation file // #include "stdafx.h" #include "smsmanager.h" #include "C_LISTSEND.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CC_ListSend dialog #include "MainFrm.h" #include "ProcessSocket.h" #include "DLG_C_ListSend_Add.h" CC_ListSend::CC_ListSend(CWnd* pParent /*=NULL*/) : CDialog(CC_ListSend::IDD, pParent) { //{{AFX_DATA_INIT(CC_ListSend) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_bInit = false; m_bRefresh = false; } void CC_ListSend::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CC_ListSend) DDX_Control(pDX, IDC_LISTSEND_LIST, m_wndList); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CC_ListSend, CDialog) //{{AFX_MSG_MAP(CC_ListSend) ON_WM_SIZE() ON_NOTIFY(NM_DBLCLK, IDC_LISTSEND_LIST, OnDblclkYwyList) ON_NOTIFY(NM_RCLICK, IDC_LISTSEND_LIST, OnRclickYwyList) ON_NOTIFY(LVN_KEYDOWN, IDC_LISTSEND_LIST, OnKeydownYwyList) //}}AFX_MSG_MAP ON_COMMAND( MENU_LISTSEND_ADD , On_User_Add) ON_COMMAND(MENU_LISTSEND_MODIFY, On_User_Modify) ON_COMMAND(MENU_LISTSEND_DEL , On_User_Del) ON_COMMAND( MENU_LISTSEND_REFRESH, On_User_Refresh) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CC_ListSend message handlers BOOL CC_ListSend::RefreshInfo() { if ( !m_pMainFrame->GetUserPurview(PURVIEW_LIST) ) { return false; } REQ_SendList_See * pSee = new REQ_SendList_See; memset(pSee , 0 , sizeof(REQ_SendList_See)); m_pMainFrame->SendFrame(SMSFUNC_SENDLIST_SEE,(BYTE*)pSee,sizeof(REQ_SendList_See)); return true; } BOOL CC_ListSend::ReShow(BOOL bRefresh) { ShowWindow( SW_SHOW ); if ( bRefresh || !m_bRefresh ) { RefreshInfo(); } return true; } BOOL CC_ListSend::ReHide() { ShowWindow( SW_HIDE ); return true; } long CC_ListSend::GetCurrentSelected() { POSITION pos = m_wndList.GetFirstSelectedItemPosition(); if ( pos ) { return m_wndList.GetNextSelectedItem(pos); } return -1; } BOOL CC_ListSend::ProcessSocket(Socket_Head *pHead) { //取清单请求信息 if (pHead->lFuncType == SMSFUNC_SENDLIST_SEE) { m_bRefresh = true; //已经刷新过 ANS_SendList_See * pSee = (ANS_SendList_See *)pHead->pFrame; ANS_SendList_Data * pData = (ANS_SendList_Data *)(pHead->pFrame+sizeof(ANS_SendList_See)); m_wndList.DeleteAllItems(); //删除原有的内容 this->Close(); //关闭原队列 for ( int i=0;ilCount;i++ ) { ANS_SendList_Data* pNewData = new ANS_SendList_Data; *pNewData = *pData; POSITION pos = m_SendList.AddTail(pNewData); ShowItemData(-1, pData, pos); pData ++; } return true; } //添加 if (pHead->lFuncType == SMSFUNC_SENDLIST_ADD) { ANS_SendList_Add * pAdd = (ANS_SendList_Add *)pHead->pFrame; if (pAdd->lAddType == 0)//添加 { if (pAdd->bOK) //等于1时表示添加成功 { MessageBox(_T("添加发送帐单/清单请求成功,将会于2天内向填写的Email发送!"), _T("信息"), MB_ICONINFORMATION); this->RefreshInfo(); } else { CString str; str.Format(_T("添加发送帐单/清单请求失败,原因:%s。"), pAdd->szErrMsg); MessageBox(str, _T("错误"), MB_ICONWARNING); } return true; } if (pAdd->lAddType == 1)//修改 { SetLockItem(pAdd->lItem, false); //解锁 if (pAdd->bOK) //等于1时表示添加成功 { POSITION pos = (POSITION)m_wndList.GetItemData(pAdd->lItem); ANS_SendList_Data* pData2 = m_SendList.GetNext(pos); if (pData2) { *pData2 = pAdd->data; //取到新的数据 ShowItemData(pAdd->lItem, pData2, NULL); } } else { CString str; str.Format(_T("修改发送帐单/清单请求失败,原因:%s。"), pAdd->szErrMsg); MessageBox(str, _T("错误"), MB_ICONWARNING); this->RefreshInfo(); } return true; } if (pAdd->lAddType == 2)//删除 { if (pAdd->bOK) //等于1时表示添加成功 { POSITION pos = (POSITION)m_wndList.GetItemData(pAdd->lItem); POSITION pos2 = pos; ANS_SendList_Data * pSendListData= m_SendList.GetNext(pos); if (pSendListData->lSendListID == pAdd->data.lSendListID) //ID相同的才可删除 { delete pSendListData; //先删除数据 m_SendList.RemoveAt(pos2); //从列表中删除 m_wndList.DeleteItem(pAdd->lItem); //从ListCtrl中删除 } } else { CString str; str.Format(_T("删除发送帐单/清单请求失败,原因:%s。"), pAdd->szErrMsg); MessageBox(str, _T("错误"), MB_ICONWARNING); this->RefreshInfo(); } return true; } return true; } return false; } void CC_ListSend::ShowRMenu() { #ifndef SMSMANAGER_KF if (!m_pMainFrame->GetUserPurview(PURVIEW_LIST,false)) //没有查看权限 return ; #endif BOOL bDelete = false; BOOL bModify = false; long lItem = GetCurrentSelected(); if (lItem >= 0) { if (!isLockItem(lItem)) { POSITION pos = (POSITION)m_wndList.GetItemData(lItem); POSITION pos2 = pos; ANS_SendList_Data* pData = m_SendList.GetNext(pos); if (pData) { if (pData->lPerMon) //每月固定发送的可以修改或删除 { bDelete = true; bModify = true; } else { if (pData->lStatus == 0) //未发送的可以做修改或删除 { bModify = true; bDelete = true; } } } } } CMenu menu; menu.CreatePopupMenu(); #ifdef SMSMANAGER_KF if (m_pMainFrame->GetUserPurview(PURVIEW_CORP_USER,false) || m_pMainFrame->GetUserPurview(PURVIEW_TAB, false)) //有添加新请求能力 { #endif //添加 menu.AppendMenu(MF_STRING , MENU_LISTSEND_ADD, _T(" 添加新请求 ") ); menu.AppendMenu(MF_SEPARATOR ); #ifdef SMSMANAGER_KF } #endif if (bModify) { menu.AppendMenu(MF_STRING, MENU_LISTSEND_MODIFY, _T(" 修 改 ")); } else { menu.AppendMenu(MF_STRING | MF_DISABLED | MF_GRAYED, MENU_LISTSEND_MODIFY, _T(" 修 改 ")); } if (bModify) { menu.AppendMenu(MF_STRING, MENU_LISTSEND_DEL, _T(" 删 除 ")); } else { menu.AppendMenu(MF_STRING | MF_DISABLED | MF_GRAYED, MENU_LISTSEND_DEL, _T(" 删 除 ")); } //刷新 menu.AppendMenu(MF_STRING , MENU_LISTSEND_REFRESH, _T(" 刷 新 ") ); //显示菜单 POINT pt ; ::GetCursorPos( &pt ); //this->ClientToScreen( &pt); menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL); menu.DestroyMenu(); } BOOL CC_ListSend::OnInitDialog() { CDialog::OnInitDialog(); //取得共用参数 //CMainFrame * pFrame = static_cast ((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_MANAGER) ); m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_LOCK) ); m_wndList.SubClassWindow2(); m_wndList.SetHeadings(_T("序号,50;查询类型,70; 查询用户,250; 状态,120; 提交时间,140; 处理时间,170; 查询时间段,230;业务类型,70;文件类型,70;隐藏号码,70;隐藏内容,70;送达时间,70;合并长信,70;Email地址1,180;Email地址2,180;联系人,120;联系电话,120;提交人,120;备 注,300;")); 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 CC_ListSend::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); if ( m_bInit ) { m_wndList.MoveWindow( 0 , 0 , cx,cy); } } void CC_ListSend::OnDblclkYwyList(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; On_User_Modify(); } void CC_ListSend::OnRclickYwyList(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; ShowRMenu(); } void CC_ListSend::OnKeydownYwyList(NMHDR* pNMHDR, LRESULT* pResult) { LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR; // TODO: Add your control notification handler code here *pResult = 0; } void CC_ListSend::On_User_Add() { if ( !m_pMainFrame->GetUserPurview(PURVIEW_LIST) ) { return ; } ANS_SendList_Data data = { 0 }; GetLocalTime(&data.tEnd); data.tBegin = data.tEnd; long lMon = data.tBegin.wMonth; lMon--; if (lMon <= 0) { data.tBegin.wMonth = 12; data.tBegin.wYear--; } else { data.tBegin.wMonth = lMon; } data.tBegin.wDay = 1; data.lYWType = 0; //默认业务类型为短信 data.lFormat = 1; //默认Excel格式 data.bMergeLongSms = true; //默认合并长短信 DLG_C_ListSend_Add dlg(this); dlg.SetParam(data, NULL, true); if ( dlg.DoModal() == IDOK ) { REQ_SendList_Add * pAdd = new REQ_SendList_Add; memset(pAdd , 0 , sizeof(REQ_SendList_Add)); pAdd->data = dlg.GetParam(); pAdd->lAddType = 0; //0为新增加 m_pMainFrame->SendFrame( SMSFUNC_SENDLIST_ADD , (BYTE*)pAdd , sizeof(REQ_SendList_Add) ); } } void CC_ListSend::On_User_Modify() { if (!m_pMainFrame->GetUserPurview(PURVIEW_LIST)) { return; } long lItem = GetCurrentSelected(); if (lItem < 0) return; if (isLockItem(lItem)) { return; } POSITION pos = (POSITION)m_wndList.GetItemData(lItem); POSITION pos2 = pos; ANS_SendList_Data* pData = m_SendList.GetNext(pos); if (pData) { if (!pData->lPerMon && pData->lStatus != 0) //非月结及状态不为0的不能修改 return; DLG_C_ListSend_Add dlg(this); dlg.SetParam(*pData, pos2, false); if (dlg.DoModal() == IDOK) { SetLockItem(lItem, true); REQ_SendList_Add* pAdd = new REQ_SendList_Add; memset(pAdd, 0, sizeof(REQ_SendList_Add)); pAdd->data = dlg.GetParam(); pAdd->lAddType = 1; //1为修改 pAdd->lItem = lItem; m_pMainFrame->SendFrame(SMSFUNC_SENDLIST_ADD, (BYTE*)pAdd, sizeof(REQ_SendList_Add)); } } } void CC_ListSend::On_User_Del() { if (!m_pMainFrame->GetUserPurview(PURVIEW_LIST)) { return; } long lRet = MessageBox(_T("此操作将会删除清单发送请求,是否继续?"), _T("提问"), MB_ICONQUESTION | MB_YESNOCANCEL | MB_DEFBUTTON2); if (lRet != IDYES) return; long lItem = GetCurrentSelected(); if (lItem < 0) return; if (isLockItem(lItem)) { return; } POSITION pos = (POSITION)m_wndList.GetItemData(lItem); POSITION pos2 = pos; ANS_SendList_Data* pData = m_SendList.GetNext(pos); if (pData) { if (!pData->lPerMon && pData->lStatus != 0) //非月结及状态不为0的不能修改 return; SetLockItem(lItem, true); REQ_SendList_Add* pAdd = new REQ_SendList_Add; memset(pAdd, 0, sizeof(REQ_SendList_Add)); pAdd->data = *pData; pAdd->lAddType = 2; //1为删除 pAdd->lItem = lItem; m_pMainFrame->SendFrame(SMSFUNC_SENDLIST_ADD, (BYTE*)pAdd, sizeof(REQ_SendList_Add)); } } void CC_ListSend::On_User_Refresh() { RefreshInfo(); } void CC_ListSend::Close() { //清除队列中的内容 while (!m_SendList.IsEmpty()) { ANS_SendList_Data * pSendList = m_SendList.GetHead(); m_SendList.RemoveHead(); delete pSendList; } } BOOL CC_ListSend::isLockItem(long lItem, BOOL bShowWarning) { BOOL b = (m_wndList.GetIconIndex(lItem) == 1); if (b && bShowWarning) { MessageBox(_T("正录被锁定,请等待服务器返回后再操作!"), _T("锁定中"), MB_ICONINFORMATION); } return b; } void CC_ListSend::SetLockItem(long lItem, BOOL bLock) { if (bLock) m_wndList.SetIconIndex(lItem, 1); else m_wndList.SetIconIndex(lItem, 0); } void CC_ListSend::ShowItemData(long lItem, ANS_SendList_Data* pData,POSITION pos) { TCHAR Buf[32]; CString str; BOOL bInsert = false; if (lItem < 0) { lItem = m_wndList.GetItemCount(); bInsert = true; _stprintf(Buf, _T("%d"), lItem + 1); if (pData->lPerMon == 1) m_wndList.InsertItem(lItem, Buf, 2); else m_wndList.InsertItem(lItem, Buf, 0); } //m_wndList.SetHeadings(_T("序号,50; 查询用户,250; 状态,80; 提交时间,90; 处理时间,130; 查询时间段,190;业务类型,60;隐藏号码,70;隐藏内容,70;送达时间,70;Email地址,180;联系人,120;联系电话,120;提交人,120;备 注,300;")); if (pos) { m_wndList.SetItemData(lItem, (DWORD)pos); //存Pos } long lIndex = 1; str = _T(" 清单"); if (pData->lQueryType == 1) str = _T(" 帐单"); m_wndList.SetItemText(lItem, lIndex++, str); str.Format(_T("%d-%s %s"), pData->lCorpID, pData->szCorpName, pData->szLoginName); m_wndList.SetItemText(lItem, lIndex++, str); str = _T(""); if (pData->lStatus == -1) str = _T("文件错误"); if (pData->lStatus == -2) str = _T("发Email错误"); if (pData->lStatus >= 1) str = _T("已发送"); m_wndList.SetItemText(lItem, lIndex++, str); str.Format(_T("%04d.%02d.%02d"), pData->tSub.wYear, pData->tSub.wMonth, pData->tSub.wDay); m_wndList.SetItemText(lItem, lIndex++, str); str.Format(_T("%04d.%02d.%02d %02d:%02d"), pData->tSend.wYear, pData->tSend.wMonth, pData->tSend.wDay, pData->tSend.wHour, pData->tSend.wMinute); m_wndList.SetItemText(lItem, lIndex++, str); str.Format(_T("%04d.%02d.%02d -- %04d.%02d.%02d"), pData->tBegin.wYear, pData->tBegin.wMonth, pData->tBegin.wDay, pData->tEnd.wYear, pData->tEnd.wMonth, pData->tEnd.wDay); m_wndList.SetItemText(lItem, lIndex++, str); str = _T("短信"); if (pData->lYWType == 1) str = _T("彩信"); m_wndList.SetItemText(lItem, lIndex++, str); str = _T("TXT"); if (pData->lFormat == 1) str = _T("Excel"); m_wndList.SetItemText(lItem, lIndex++, str); if (pData->bHideNum) m_wndList.SetItemText(lItem, lIndex++, _T(" 是")); else lIndex++; if (pData->bHideMsg) m_wndList.SetItemText(lItem, lIndex++, _T(" 是")); else lIndex++; if (pData->bSendRecvTime) m_wndList.SetItemText(lItem, lIndex++, _T(" 是")); else lIndex++; if (pData->bMergeLongSms) m_wndList.SetItemText(lItem, lIndex++, _T(" 是")); else lIndex++; m_wndList.SetItemText(lItem, lIndex++, pData->szEmail); m_wndList.SetItemText(lItem, lIndex++, pData->szEmail2); m_wndList.SetItemText(lItem, lIndex++, pData->szLXR); m_wndList.SetItemText(lItem, lIndex++, pData->szTel); m_wndList.SetItemText(lItem, lIndex++, pData->szOpernUser); m_wndList.SetItemText(lItem, lIndex++, pData->szBZ); }