CorpSms/DLG_Send.cpp
lujiang e17c4ce7ed 重新对窗口布局进行优化,解决缺字的情况。
对图标显示进行了优化,使用gdi+按DPI进行缩放。
2025-04-14 17:24:47 +08:00

4215 lines
117 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

// DLG_Send.cpp : implementation file
//
#include "stdafx.h"
#include "CorpSms.h"
#include "DLG_Send.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#ifdef UNICODE
class CAdoSmsItem:public CADORecordBinding
{
BEGIN_ADO_BINDING(CAdoSmsItem)
ADO_VARIABLE_LENGTH_ENTRY2(1,adInteger, m_ItemID ,sizeof(m_ItemID), l_ItemIDStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(2,adInteger, m_BoxID ,sizeof(m_BoxID), l_BoxIDStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(3,adVarWChar,m_GroupID ,sizeof(m_GroupID) , l_GroupIDStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(4,adVarWChar,m_Name ,sizeof(m_Name) , l_NameStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(5,adVarWChar, m_NickName ,sizeof(m_NickName) , l_NickNameStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(6,adVarWChar, m_Mobile ,sizeof(m_Mobile) , l_MobileStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(7,adVarWChar, m_BZ ,sizeof(m_BZ) , l_BZStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(8,adVarWChar, m_Status ,sizeof(m_Status) , l_StatusStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(9,adInteger, m_SendID ,sizeof(m_SendID), l_SendIDStatus,false)
END_ADO_BINDING()
public:
long m_ItemID;
ULONG l_ItemIDStatus;
long m_BoxID;
ULONG l_BoxIDStatus;
TCHAR m_GroupID[24];
ULONG l_GroupIDStatus;
TCHAR m_Name[24];
ULONG l_NameStatus;
TCHAR m_NickName[24];
ULONG l_NickNameStatus;
TCHAR m_Mobile[24];
ULONG l_MobileStatus;
#ifdef CHINABANK_VER
TCHAR m_BZ[1024];
#else
TCHAR m_BZ[184];
#endif
ULONG l_BZStatus;
TCHAR m_Status[4];
ULONG l_StatusStatus;
long m_SendID;
ULONG l_SendIDStatus;
CAdoSmsItem()
{
m_ItemID = 0;
m_BoxID = 0;
memset(m_GroupID,0,sizeof(m_GroupID));
memset(m_Name,0,sizeof(m_Name));
memset(m_NickName,0,sizeof(m_NickName));
memset(m_Mobile,0,sizeof(m_Mobile));
memset(m_BZ,0,sizeof(m_BZ));
memset(m_Status,0,sizeof(m_Status));
m_SendID = 0;
}
};
#else
class CAdoSmsItem:public CADORecordBinding
{
BEGIN_ADO_BINDING(CAdoSmsItem)
ADO_VARIABLE_LENGTH_ENTRY2(1,adInteger, m_ItemID ,sizeof(m_ItemID), l_ItemIDStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(2,adInteger, m_BoxID ,sizeof(m_BoxID), l_BoxIDStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(3,adVarChar,m_GroupID ,sizeof(m_GroupID) , l_GroupIDStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(4,adVarChar,m_Name ,sizeof(m_Name) , l_NameStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(5,adVarChar, m_NickName ,sizeof(m_NickName) , l_NickNameStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(6,adVarChar, m_Mobile ,sizeof(m_Mobile) , l_MobileStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(7,adVarChar, m_BZ ,sizeof(m_BZ) , l_BZStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(8,adVarChar, m_Status ,sizeof(m_Status) , l_StatusStatus,false)
ADO_VARIABLE_LENGTH_ENTRY2(9,adInteger, m_SendID ,sizeof(m_SendID), l_SendIDStatus,false)
END_ADO_BINDING()
public:
long m_ItemID;
ULONG l_ItemIDStatus;
long m_BoxID;
ULONG l_BoxIDStatus;
char m_GroupID[24];
ULONG l_GroupIDStatus;
char m_Name[24];
ULONG l_NameStatus;
char m_NickName[24];
ULONG l_NickNameStatus;
char m_Mobile[24];
ULONG l_MobileStatus;
char m_BZ[184];
ULONG l_BZStatus;
char m_Status[4];
ULONG l_StatusStatus;
long m_SendID;
ULONG l_SendIDStatus;
CAdoSmsItem()
{
m_ItemID = 0;
m_BoxID = 0;
memset(m_GroupID,0,sizeof(m_GroupID));
memset(m_Name,0,sizeof(m_Name));
memset(m_NickName,0,sizeof(m_NickName));
memset(m_Mobile,0,sizeof(m_Mobile));
memset(m_BZ,0,sizeof(m_BZ));
memset(m_Status,0,sizeof(m_Status));
m_SendID = 0;
}
};
#endif
/////////////////////////////////////////////////////////////////////////////
// DLG_Send dialog
#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_Send_User.h"
#include "DLG_Send_Inport.h"
#include "DLG_FiltWarning.h"
#include "DLG_SmsDY.h"
#include "DLG_AddWarning.h"
#include "DLG_Setup_SZGJ_GetMsg.h"
#include "DLG_User_InportP2.h"
#include "DLG_User_Inport_LT.h"
#include "DLG_AddBack.h"
#include "..\public\AutoBuffer\AutoBuffer.h"
DLG_Send::DLG_Send(CWnd* pParent /*=NULL*/)
: CDialog(DLG_Send::IDD, pParent)
{
//{{AFX_DATA_INIT(DLG_Send)
//}}AFX_DATA_INIT
m_pMainFrame = NULL;
memset( &m_OldRect , 0 , sizeof(m_OldRect) );
m_bInit = false;
m_bModify = false;
m_lBoxID = 0;
m_lBoxType = 0;
memset( m_szMsg , 0 , sizeof(m_szMsg) );
memset( m_szMsgEndFilt , 0 , sizeof(m_szMsgEndFilt));
memset( m_szSendMsg , 0 , sizeof(m_szSendMsg) );
m_bSend = false;
m_lSendIndex = 0;
m_bShowReMobile = true;
m_lReMobileType = 0;
m_bBackReMobile = true;
m_lBackReMobileType = 0;
m_bSendSR = false;
m_dwSendStartTime = 0;
m_dwBackCount=0; //黑名单数量
m_dwNoSupCount=0; //不支持号码数量
m_dwNoMsgCount=0; //没内容数量
m_bSaveList = false;
m_lPage = 0;
m_lInterval = 0;
m_bNoSupperWord = false;
m_bOneToOne = false;
m_lSendRand = 0; //发送的随机数
m_pMobileMsg = NULL; //手机号码的分段
m_pSendData = NULL;
#ifdef SUPPER_IM_MAS
m_Mas_Init = false;
m_Mas_Lib = NULL;
m_Mas_initWithDB = NULL;
m_Mas_release = NULL;
m_Mas_sendSMAdvTime = NULL;
m_Mas_receiveSM = NULL;
m_Mas_receiveRPT = NULL;
m_Mas_MasEnd = false;
m_Mas_MobsetEnd = false;
m_Mas_SendOK = 0;
m_lMasAllSendCount = 0;
#endif
}
void DLG_Send::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(DLG_Send)
DDX_Control(pDX, IDC_SEND_TASK, m_B_Task);
DDX_Control(pDX, IDC_SEND_lInterval, m_L_lInterval);
DDX_Control(pDX, IDC_SEND_FD, m_B_FD);
DDX_Control(pDX, IDC_SEND_NEW2, m_B_New2);
DDX_Control(pDX, IDC_SEND_LONGSMS, m_B_LongSms);
DDX_Control(pDX, IDC_SEND_PCOUNT2, m_S_PCount2);
DDX_Control(pDX, IDC_SEND_SAVESENDLOG, m_B_SaveSendLog);
DDX_Control(pDX, IDC_SEND_CM_S, m_S_CM2);
DDX_Control(pDX, IDC_SEND_CM, m_S_CM);
DDX_Control(pDX, IDC_SEND_GETMSG, m_B_GetMsg);
DDX_Control(pDX, IDC_SEND_REMOBILE, m_B_ReMobile);
DDX_Control(pDX, IDC_SEND_DY, m_B_DY);
DDX_Control(pDX, IDC_SEND_NEW, m_B_New);
DDX_Control(pDX, IDC_SEND_NUMADD, m_B_Add);
DDX_Control(pDX, IDC_SEND_NUM, m_E_Num);
DDX_Control(pDX, IDC_SEND_DS_T, m_D_Time);
DDX_Control(pDX, IDC_SEND_DS_D, m_D_Date);
DDX_Control(pDX, IDC_SEND_YL, m_B_YL);
DDX_Control(pDX, IDC_SEND_WCOUNT, m_S_WCount);
DDX_Control(pDX, IDC_SEND_STATE, m_B_Status);
DDX_Control(pDX, IDC_SEND_START, m_B_Start);
DDX_Control(pDX, IDC_SEND_SAVE, m_B_Save);
DDX_Control(pDX, IDC_SEND_S1, m_S_S1);
DDX_Control(pDX, IDC_SEND_REPORT, m_B_Report);
DDX_Control(pDX, IDC_SEND_PCOUNT, m_S_PCount);
DDX_Control(pDX, IDC_SEND_NULL, m_B_Null);
DDX_Control(pDX, IDC_SEND_MSG_LIST, m_S_MsgList);
DDX_Control(pDX, IDC_SEND_MSG, m_E_Msg);
DDX_Control(pDX, IDC_SEND_LIST_COUNT, m_S_ListCount);
DDX_Control(pDX, IDC_SEND_LIST, m_wndList);
DDX_Control(pDX, IDC_SEND_INMEMO, m_B_Memo);
DDX_Control(pDX, IDC_SEND_INICENAME, m_B_NickName);
DDX_Control(pDX, IDC_SEND_INAME, m_B_Name);
DDX_Control(pDX, IDC_SEND_IFALSH, m_B_Flash);
DDX_Control(pDX, IDC_SEND_HANDFREE, m_B_HandFree);
DDX_Control(pDX, IDC_SEND_DS, m_B_DS);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(DLG_Send, CDialog)
//{{AFX_MSG_MAP(DLG_Send)
ON_WM_SIZE()
ON_WM_CLOSE()
ON_EN_CHANGE(IDC_SEND_MSG, OnChangeSendMsg)
ON_BN_CLICKED(IDC_SEND_DS, OnSendDs)
ON_BN_CLICKED(IDC_SEND_SAVE, OnSendSave)
ON_NOTIFY(NM_RCLICK, IDC_SEND_LIST, OnRclickSendList)
ON_BN_CLICKED(IDC_SEND_NUMADD, OnSendNumadd)
ON_NOTIFY(NM_DBLCLK, IDC_SEND_LIST, OnDblclkSendList)
ON_NOTIFY(DTN_DATETIMECHANGE, IDC_SEND_DS_D, OnDatetimechangeSendDsD)
ON_NOTIFY(DTN_DATETIMECHANGE, IDC_SEND_DS_T, OnDatetimechangeSendDsT)
ON_BN_CLICKED(IDC_SEND_NEW, OnSendNew)
ON_BN_CLICKED(IDC_SEND_INAME, OnSendIname)
ON_BN_CLICKED(IDC_SEND_INICENAME, OnSendInicename)
ON_BN_CLICKED(IDC_SEND_INMEMO, OnSendInmemo)
ON_BN_CLICKED(IDC_SEND_IFALSH, OnSendIfalsh)
ON_BN_CLICKED(IDC_SEND_YL, OnSendYl)
ON_WM_CREATE()
ON_BN_CLICKED(IDC_SEND_START, OnSendStart)
ON_WM_TIMER()
ON_NOTIFY(LVN_KEYDOWN, IDC_SEND_LIST, OnKeydownSendList)
ON_BN_CLICKED(IDC_SEND_DY, OnSendDy)
ON_BN_CLICKED(IDC_SEND_GETMSG, OnSendGetmsg)
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_SEND_LONGSMS, OnSendLongsms)
ON_BN_CLICKED(IDC_SEND_NEW2, OnSendNew2)
ON_BN_CLICKED(IDC_SEND_FD, OnSendFd)
ON_BN_CLICKED(IDC_SEND_TASK, OnSendTask)
//}}AFX_MSG_MAP
ON_MESSAGE(DROPM_DROP,OnDrop)
ON_COMMAND( SEND_USER_ADD , On_User_Add )
ON_COMMAND( SEND_USER_MODIFY , On_User_Modify )
ON_COMMAND( SEND_USER_DEL , On_User_Del )
ON_COMMAND( SEND_USER_CLEAR , On_User_Clear )
ON_COMMAND( SEND_USER_INPORT , On_User_Inport )
ON_COMMAND( SEND_USER_EXPORT , On_User_Export )
ON_COMMAND( SEND_USER_STATUS , On_User_Status )
ON_COMMAND( SEND_USER_INPORT_LT , On_User_Inport_LT )
ON_COMMAND( SEND_USER_INPORT_MASSDKDGWL_FP , On_User_Inport_MasSDK_DGWL_FP )
ON_COMMAND( SEND_USER_INPORT_MASSDKDGWL_SP , On_User_Inport_MasSDK_DGWL_SP )
ON_COMMAND( SEND_USER_INPORT_MASSDKDGWL_KF , On_User_Inport_MasSDK_DGWL_KF )
ON_COMMAND( SEND_USER_INPORT_MASSDKDGWL_ZC , On_User_Inport_MasSDK_DGWL_ZC )
ON_COMMAND( SEND_USER_PASTE , OnSendNumPaste )
// ON_WM_KEYUP()
//ON_WM_HOTKEY()
ON_BN_CLICKED(IDC_SEND_REMOBILE, &DLG_Send::OnClickedSendRemobile)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// DLG_Send message handlers
BOOL DLG_Send::OnInitDialog()
{
CDialog::OnInitDialog();
this->SetIcon( AfxGetApp()->LoadIcon(IDI_L_SMSDF),false);
m_D_Date.EnableWindow(false);
m_D_Time.EnableWindow(false);
m_B_ReMobile.SetCheck(true); //默认检测重复
m_B_SaveSendLog.SetCheck(true); //默认写到日志
m_B_LongSms.SetCheck(true); //默认以长短信方式发送
m_B_FD.SetCheck(false); //如果强制了使用长短信,则不能使用分段了
InitItem();
m_E_Msg.SetFocus();
if ( !m_pMainFrame->GetUserPurview( PURVIEW_SENDP , false ) )
{
m_E_Num.EnableWindow( false ); //没有发送私人电话本的权限
m_B_Add.EnableWindow( false );
}
if ( m_pMainFrame->m_Ans_Login.bCM ) //启用签名
{
//this->AddLoveToMsg( _T("\r\n") );
this->AddLoveToMsg( m_pMainFrame->m_Ans_Login.szCM );
}
CString strCM;
m_pMainFrame->GetQJCM(strCM);
if ( strCM.GetLength()>0 )
{
strCM = strCM;
m_S_CM.SetWindowText( strCM );
m_S_CM.SetTextColor(RGB(128,128,128));
}
m_L_lInterval.SetCurSel(0);
m_bModify = false;
if ( !m_pMainFrame->GetUserPurview( PURVIEW_PL , false ) )
{
m_B_Task.EnableWindow(false);
}
#ifdef SMSCENTER_NX
GetDlgItem(IDC_SEND_FD)->ShowWindow(SW_HIDE);
#endif
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void DLG_Send::InitItem()
{
if ( m_bInit ) return ;
m_bInit = true;
//限制最大可发送的数据长度
#ifdef UNICODE
m_E_Msg.LimitText( MAX_MSG_LEN_UNI );
#else
m_E_Msg.LimitText( MAX_MSG_LEN );
#endif
#ifdef CHINABANK_VER
m_E_Msg.LimitText( MAX_MSG_LEN_UNI_BANK );
#endif
//创建图像列表
m_Image.Create( 20 , 20 , ILC_COLOR32|ILC_MASK , 5 , 1);
CBitmap bmp;
bmp.LoadBitmap( IDB_L_USER_NOR );
m_Image.Add( &bmp , RGB(193,193,193) ); //设置
bmp.DeleteObject();
bmp.LoadBitmap( IDB_L_USER_EXP );
m_Image.Add( &bmp , RGB(193,193,193) ); //设置
//加入图像列表
m_wndList.SetImageList(&m_Image,LVSIL_SMALL);
m_wndList.SetBkColor( RGB(237,238,188) );
m_wndList.SetTextBkColor( RGB(237,238,188) );
//m_wndList.SubClassWindow2();
//m_wndList.SetHeadings(_T(" 姓 名,80; 昵 称,80;手机号码,100; 状 态,70; 用户组,80; 备 注,150;"));
//m_wndList.SetGridLines(true);
//设置成热激活形式
//m_wndList.SetExtendedStyle(LVS_EX_TRACKSELECT|LVS_EX_ONECLICKACTIVATE|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_wndList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_wndList.InsertColumn( 0 , _T(" 姓 名") , LVCFMT_LEFT , 100 , 0);
m_wndList.InsertColumn( 1 , _T(" 昵 称") , LVCFMT_LEFT , 80 , 1);
if ( this->m_pMainFrame->GetUserPurview_HideNum() )
{
m_wndList.InsertColumn( 2 , _T("手机号码") , LVCFMT_LEFT , 70 , 2); //隐藏号码
CHeaderCtrl* pHeaderCtrl = (CHeaderCtrl*)m_wndList.GetHeaderCtrl();
pHeaderCtrl->EnableWindow( FALSE ) ;
}
else
{
m_wndList.InsertColumn( 2 , _T("手机号码") , LVCFMT_LEFT , 100 , 2);
}
m_wndList.InsertColumn( 3 , _T(" 状 态") , LVCFMT_LEFT , 80, 3);
m_wndList.InsertColumn( 4 , _T(" 用户组") , LVCFMT_LEFT , 85 , 4);
m_wndList.InsertColumn( 5 , _T(" 备 注"), LVCFMT_LEFT , 150, 5);
//初始化图标按扭
CRect rect;
m_B_Start.GetWindowRect(&rect);
this->ScreenToClient(&rect);
int iHeight = rect.Height(); //按扭高度
int iWidth = iHeight; //按扭宽度与高相同原图像长宽44*44
int iLeftBegin = rect.left;
m_B_Start.MoveWindow(iLeftBegin, rect.top , iWidth, iHeight, true );
m_B_Start.SetUnSelToolTip( _T("立即发送") );
m_B_Start.ActiveToolTip( true );
m_B_Start.SetUnSelBmp( IDB_B_START );
m_B_Start.SetFlat();
m_B_New2.MoveWindow(iLeftBegin+= iWidth, rect.top , iWidth, iHeight, true );
m_B_New2.SetUnSelToolTip( _T("重新发送本列表的手机号码") );
m_B_New2.ActiveToolTip( true );
m_B_New2.SetUnSelBmp( IDB_B_NEW2 );
m_B_New2.SetFlat();
m_B_New.MoveWindow(iLeftBegin += iWidth, rect.top , iWidth, iHeight, true );
m_B_New.SetUnSelToolTip( _T("新建发送列表") );
m_B_New.ActiveToolTip( true );
m_B_New.SetUnSelBmp( IDB_B_NEW );
m_B_New.SetFlat();
m_B_Save.MoveWindow(iLeftBegin += iWidth, rect.top , iWidth, iHeight, true );
m_B_Save.SetUnSelToolTip( _T("保存当前发送列表") );
m_B_Save.ActiveToolTip( true );
m_B_Save.SetUnSelBmp( IDB_B_SAVE );
m_B_Save.SetFlat();
//m_B_Status.MoveWindow( iLeftBegin+=iWidth , rect.top , iWidth , iHeight , true );
//m_B_Status.SetUnSelToolTip( _T("刷新发送状态") );
//m_B_Status.ActiveToolTip( true );
//m_B_Status.SetUnSelBmp( IDB_B_STATE );
//m_B_Status.SetFlat();
m_B_DY.MoveWindow(iLeftBegin += iWidth, rect.top , iWidth, iHeight, true );
m_B_DY.SetUnSelToolTip( _T("选择常用短语") );
m_B_DY.ActiveToolTip( true );
m_B_DY.SetUnSelBmp( IDB_B_DY );
m_B_DY.SetFlat();
//画最的一个空按扭
iLeftBegin += iWidth;
CRect rect2;
CWnd * pWnd = (CWnd *)GetDlgItem(IDC_SEND_S1);
pWnd->GetWindowRect( &rect2 );
long width = rect2.right - iLeftBegin - 8;
m_B_Null.MoveWindow(iLeftBegin, rect.top , width , iHeight, true );
//m_B_Null.SetUnSelToolTip( _T("其它功能,必须在连接后并没有发送时才可使用!") );
m_B_Null.SetUnSelToolTip( _T("") );
m_B_Null.ActiveToolTip( true );
m_B_Null.SetUnSelBmp( IDB_B_NULL );
m_B_Null.SetFlat();
m_B_Null.EnableWindow(false);
m_B_Null.ShowWindow(SW_HIDE);
m_B_Name.GetWindowRect(&rect);
this->ScreenToClient(&rect);
iLeftBegin = rect.left;
iHeight = rect.Height(); //按扭高度
iWidth = (int)((float)iHeight*(60.0f/48.0f)); //按比例调整宽度
m_B_Name.MoveWindow(iLeftBegin, rect.top , iWidth, iHeight , true );
m_B_Name.SetUnSelToolTip( _T("插入姓名,发送时将会自动换成当前用户姓名发送!\r\n注意:插入姓名后,字数统计仅供参考,以实际姓名字数为准。") );
m_B_Name.ActiveToolTip( true );
m_B_Name.SetUnSelBmp( IDB_B_INAME );
m_B_Name.SetFlat();
m_B_NickName.MoveWindow(iLeftBegin += iWidth, rect.top, iWidth, iHeight, true);
m_B_NickName.SetUnSelToolTip( _T("插入昵称,发送时将会自动换成当前用户昵称发送!\r\n注意:插入昵称后,字数统计仅供参考,以实际昵称字数为准。") );
m_B_NickName.ActiveToolTip( true );
m_B_NickName.SetUnSelBmp( IDB_B_INICENAME );
m_B_NickName.SetFlat();
m_B_Memo.MoveWindow(iLeftBegin += iWidth, rect.top, iWidth, iHeight, true);
m_B_Memo.SetUnSelToolTip( _T("插入备注,发送时将会自动换成当前用户的备注内容发送!\r\n注意:插入备注后,字数统计仅供参考,以实际备注字数为准。") );
m_B_Memo.ActiveToolTip( true );
m_B_Memo.SetUnSelBmp( IDB_B_INMEMO );
m_B_Memo.SetFlat();
m_B_Flash.MoveWindow(iLeftBegin += iWidth, rect.top, iWidth, iHeight, true);
m_B_Flash.SetUnSelToolTip( _T("插入闪烁符,对方收到时闪烁符中间的字符会不停闪动!") );
m_B_Flash.ActiveToolTip( true );
m_B_Flash.SetUnSelBmp( IDB_B_IFALSH );
m_B_Flash.SetFlat();
m_B_YL.MoveWindow(iLeftBegin += iWidth, rect.top, iWidth, iHeight, true);
m_B_YL.SetUnSelToolTip( _T("预览短信!") );
m_B_YL.ActiveToolTip( true );
m_B_YL.SetUnSelBmp( IDB_B_YL );
m_B_YL.SetFlat();
//是否显示小灵通短信条数提示
if ( !m_pMainFrame->isSupportPhs() )
{
CRect rect;
m_S_PCount2.ShowWindow(SW_HIDE);
m_S_WCount.GetWindowRect(&rect);
rect.top+=10;
rect.bottom+=10;
ScreenToClient(&rect);
m_S_WCount.MoveWindow(rect);
m_S_PCount.GetWindowRect(&rect);
rect.top+=13;
rect.bottom+=13;
ScreenToClient(&rect);
m_S_PCount.MoveWindow(rect);
}
#ifndef MOBSET_SZGJ //如果不是深圳公交集团,不显示取信息按扭。
m_B_GetMsg.ShowWindow(SW_HIDE);
#endif
// m_D_Date.EnableWindow( false );
// m_D_Time.EnableWindow( false );
m_bInit = true;
//启用保存ID的线程
::AfxBeginThread((AFX_THREADPROC)AutoSaveLog,(LPVOID)this,/*THREAD_PRIORITY_LOWEST*/THREAD_PRIORITY_BELOW_NORMAL);
#ifdef SUPPER_IM_MAS
if ( Mas_Enable() ) //是否启用Mas
{
SetTimer(2 , 5000 , NULL ); //5秒后连接Mas信息机
}
#endif
}
void DLG_Send::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if ( !m_bInit ) return;
CRect rect;
this->GetWindowRect(&rect);
if ( rect.Width()<200 || rect.Height() < 150 ) //当SIZE已很小时则不用再移动窗口
return;
CRect rect3;
CRect rUser;
//重置用户列表
m_wndList.GetWindowRect( &rUser );
rect3.left = rUser.left;
rect3.top = rUser.top;
rect3.right = rect.right - 17;
rect3.bottom = rect.bottom -17;
this->ScreenToClient(&rect3);
m_wndList.MoveWindow(&rect3);
//重置计数表
m_S_ListCount.GetWindowRect( &rUser );
rect3.left = rUser.left;
rect3.top = rUser.top;
rect3.right = rect.right - 17+7;
rect3.bottom = rect.bottom -17+7;
this->ScreenToClient(&rect3);
m_S_ListCount.MoveWindow(&rect3);
//重置信息栏
m_E_Msg.GetWindowRect( &rUser );
rect3.left = rUser.left;
rect3.top = rUser.top;
rect3.right = rUser.right;
rect3.bottom = rect.bottom -39;
this->ScreenToClient(&rect3);
m_E_Msg.MoveWindow(&rect3);
//重置签名
m_S_CM2.GetWindowRect( &rUser );
rect3.left = rUser.left;
rect3.top = rect.bottom -34;
rect3.right = rUser.right;
rect3.bottom = rect3.top+rUser.Height();
this->ScreenToClient(&rect3);
m_S_CM2.MoveWindow(&rect3);
m_S_CM.GetWindowRect( &rUser );
rect3.left = rUser.left;
rect3.top = rect.bottom -34;
rect3.right = rUser.right;
rect3.bottom = rect3.top+rUser.Height();
this->ScreenToClient(&rect3);
m_S_CM.MoveWindow(&rect3);
//重置信息静态控件
m_S_MsgList.GetWindowRect( &rUser );
rect3.left = rUser.left;
rect3.top = rUser.top;
rect3.right = rUser.right;
rect3.bottom = rect.bottom -17+7;
this->ScreenToClient(&rect3);
m_S_MsgList.MoveWindow(&rect3);
}
void DLG_Send::OnClose()
{
if ( CloseList() )
{
CDialog::OnClose();
}
}
void DLG_Send::RefreshTJ()
{
#ifdef UNICODE
TCHAR szMsg[4096];memset(szMsg , 0 , sizeof(szMsg) );
long lMaxMsgLen = m_pMainFrame->GetMaxSendMsgLen(); //取允许的最大字符数
//以下为统计字数
m_E_Msg.GetWindowText( szMsg , sizeof(szMsg)/2 );
ExChar( szMsg , _T("\r") ); //去除,防多行
long lLen=0;
long lLen2=0;
long lPage=0;
long lPage2=0;
//if ( isChinese( szMsg , _tcslen(szMsg) ) )
//{
lLen = _tcslen(szMsg);
lPage = lLen/lMaxMsgLen;
if (lPage*lMaxMsgLen!=lLen) lPage++;
lPage2 = lLen/(lMaxMsgLen-12);
if (lPage2*(lMaxMsgLen-12)!=lLen) lPage2++;
//}
//else
//{
// long lPageLen = lMaxMsgLen*2+lMaxMsgLen*2/7;
// lLen = _tcslen( szMsg );
// lPage = lLen/lPageLen;
// if (lPage*lPageLen!=lLen) lPage++;
//}
//长短信方式
if ( m_B_LongSms.GetCheck() && lLen>lMaxMsgLen)
{
long lCMLen=0;
lMaxMsgLen=m_pMainFrame->GetMaxSendMsgLen_longSms(lCMLen);
lLen2 = lLen+lCMLen; //原条数加上签名的条数
lPage = lLen2/lMaxMsgLen;
long lEndMsgLen = lLen2%lMaxMsgLen;
if (lEndMsgLen!=0) lPage++;
else lEndMsgLen = lMaxMsgLen;
#if defined(SMSCENTER_NX) && !defined(SMSCENTER_GDDX)
long lNX_CMLen = 6;
#ifdef SMSCENTER_DGSB
lNX_CMLen = 6; //签名【东莞人社】
#endif
if ( lEndMsgLen+lNX_CMLen > lMaxMsgLen )
{
lPage++;
}
#endif
}
else
{
if ( m_B_FD.GetCheck() )
{
if (lLen>lMaxMsgLen)
{
lMaxMsgLen-=4; //已大于最大长度,需要分段,每段前要加入分段志,"1/2:"共计4个字节
lPage = lLen/lMaxMsgLen;
if (lPage*lMaxMsgLen!=lLen) lPage++;
lPage2 = lLen/(lMaxMsgLen-12);
if (lPage2*(lMaxMsgLen-12)!=lLen) lPage2++;
}
else
{
if ( lLen>(lMaxMsgLen-12) ) //移动的长度不够,小灵通长度超过了。
{
lMaxMsgLen-=4; //已大于最大长度,需要分段,每段前要加入分段志,"1/2:"共计4个字节
lPage2 = lLen/(lMaxMsgLen-12);
if (lPage2*(lMaxMsgLen-12)!=lLen) lPage2++;
}
}
}
}
TCHAR Buf[256];
_stprintf( Buf , _T("字数:%d") , lLen );
m_S_WCount.SetWindowText(Buf);
_stprintf( Buf , _T("条数:%d") , lPage );
m_S_PCount.SetWindowText(Buf);
_stprintf( Buf , _T("小灵通:%d") , lPage2 );
m_S_PCount2.SetWindowText(Buf);
m_lPage = lPage;
#else
long lMaxMsgLen = m_pMainFrame->GetMaxSendMsgLen(); //取允许的最大字符数
//以下为统计字数
char szMsg[4096];memset(szMsg , 0 , sizeof(szMsg) );
char szHex[8192];memset(szHex , 0 , sizeof(szHex) );
m_E_Msg.GetWindowText( szMsg , sizeof(szMsg) );
ExChar( szMsg , _T("\r") ); //去除,防多行
long lLen=0;
long lLen2=0;
long lPage=0;
long lPage2=0;
//if ( isChinese( szMsg , _tcslen(szMsg) ) )
//{
AsciiToUCS2(szMsg , szHex );
lLen = _tcslen(szHex)/4;
lPage = lLen/lMaxMsgLen;
if (lPage*lMaxMsgLen!=lLen) lPage++;
lPage2 = lLen/(lMaxMsgLen-12);
if (lPage2*(lMaxMsgLen-12)!=lLen) lPage2++;
//}
//else
//{
// long lPageLen = lMaxMsgLen*2+lMaxMsgLen*2/7;
// lLen = _tcslen( szMsg );
// lPage = lLen/lPageLen;
// if (lPage*lPageLen!=lLen) lPage++;
//}
//长短信方式
if ( m_B_LongSms.GetCheck() )
{
long lCMLen=0;
lMaxMsgLen=m_pMainFrame->GetMaxSendMsgLen_longSms(lCMLen);
lLen2 = lLen+lCMLen; //原条数加上签名的条数
lPage = lLen2/lMaxMsgLen;
long lEndMsgLen = lLen2%lMaxMsgLen;
if (lEndMsgLen!=0) lPage++;
else lEndMsgLen = lMaxMsgLen;
#if defined(SMSCENTER_NX) && !defined(SMSCENTER_GDDX)
long lNX_CMLen = 6;
#ifdef SMSCENTER_DGSB
lNX_CMLen = 6; //签名【东莞人社】
#endif
if ( lEndMsgLen+lNX_CMLen > lMaxMsgLen )
{
lPage++;
}
#endif
}
else
{
if ( m_B_FD.GetCheck() )
{
if (lLen>lMaxMsgLen)
{
lMaxMsgLen-=4; //已大于最大长度,需要分段,每段前要加入分段志,"1/2:"共计4个字节
lPage = lLen/lMaxMsgLen;
if (lPage*lMaxMsgLen!=lLen) lPage++;
lPage2 = lLen/(lMaxMsgLen-12);
if (lPage2*(lMaxMsgLen-12)!=lLen) lPage2++;
}
else
{
if ( lLen>(lMaxMsgLen-12) ) //移动的长度不够,小灵通长度超过了。
{
lMaxMsgLen-=4; //已大于最大长度,需要分段,每段前要加入分段志,"1/2:"共计4个字节
lPage2 = lLen/(lMaxMsgLen-12);
if (lPage2*(lMaxMsgLen-12)!=lLen) lPage2++;
}
}
}
}
char Buf[256];
_stprintf( Buf , "字数:%d" , lLen );
m_S_WCount.SetWindowText(Buf);
_stprintf( Buf , "条数:%d" , lPage );
m_S_PCount.SetWindowText(Buf);
_stprintf( Buf , "小灵通:%d" , lPage2 );
m_S_PCount2.SetWindowText(Buf);
m_lPage = lPage;
#endif
}
void DLG_Send::OnChangeSendMsg()
{
m_bModify = true; //已修改过
RefreshTJ();
}
void DLG_Send::OnSendDs()
{
m_bModify = true;//已修改过
BOOL b = m_B_DS.GetCheck();
if ( b )
{
m_D_Date.EnableWindow( true );
m_D_Time.EnableWindow( true );
}
else
{
m_D_Date.EnableWindow( false );
m_D_Time.EnableWindow( false );
}
}
BOOL DLG_Send::CloseList()
{
if (m_bModify)
{
long lRet = MessageBox(_T("发送列表已更改,是否保存?") , _T("保存") , MB_ICONQUESTION|MB_YESNOCANCEL);
if ( lRet == IDYES )
{
return List_Save();
}
if ( lRet == IDNO )
{
//新建一个列表
EnableModifyWindow( true ); //可以修改
m_B_DS.SetCheck(false); //没有定时
SYSTEMTIME t;::GetLocalTime(&t);
DateTime_SetSystemtime( m_D_Date.m_hWnd , GDT_VALID , &t );
DateTime_SetSystemtime( m_D_Time.m_hWnd , GDT_VALID , &t );
m_wndList.ShowWindow(SW_HIDE);
m_wndList.DeleteAllItems(); //没有列表
//删除临时数据库
m_strSort.Clear(); //清空数据
m_wndList.ShowWindow(SW_SHOW);
RefreshListCount(); //刷新显示列表上的记录计数
m_E_Msg.SetWindowText( _T("") ); //没有内容
if ( m_pMainFrame->m_Ans_Login.bCM ) //启用签名
{
//this->AddLoveToMsg( _T("\r\n") );
this->AddLoveToMsg( m_pMainFrame->m_Ans_Login.szCM );
}
OnSendDs(); //设置定时
RefreshTJ(); //刷新显示字数
m_bModify = false;
m_lBoxID = 0;
m_lBoxType = 0; //待发短信
m_E_Msg.SetFocus();
return true;
}
else
return false; //选择了取消
}
return true;
}
void DLG_Send::OnSendSave()
{
if ( List_Save(true) )
this->ShowWindow( SW_HIDE );
}
BOOL DLG_Send::List_New()
{
if ( IsSend() ) //判断是否在正在发送短信
return false;
if (!CloseList())
return false;
/*
long lCount=0;
while( m_bSaveList && lCount<50 ) //等待保存列表返回
{
Sleep(100);
}
*/
//生日祝福专用
SetListSR(false);
EnableModifyWindow( true ); //可以修改
m_B_DS.SetCheck(false); //没有定时
SYSTEMTIME t;::GetLocalTime(&t);
DateTime_SetSystemtime( m_D_Date.m_hWnd , GDT_VALID , &t );
DateTime_SetSystemtime( m_D_Time.m_hWnd , GDT_VALID , &t );
m_wndList.ShowWindow(SW_HIDE);
m_wndList.DeleteAllItems(); //没有列表
//删除临时数据库
m_strSort.Clear(); //清空数据
m_wndList.ShowWindow(SW_SHOW);
RefreshListCount(); //刷新显示列表上的记录计数
m_E_Msg.SetWindowText( _T("") ); //没有内容
if ( m_pMainFrame->m_Ans_Login.bCM ) //启用签名
{
//this->AddLoveToMsg( _T("\r\n") );
this->AddLoveToMsg( m_pMainFrame->m_Ans_Login.szCM );
}
OnSendDs(); //设置定时
RefreshTJ(); //刷新显示字数
m_bModify = false;
m_lBoxID = 0;
m_lBoxType = 0; //待发短信
m_B_Task.SetCheck(false);// 不是任务方式
#ifdef SUPPER_IM_MAS
m_B_SaveSendLog.SetCheck(true);//选中记录日志
m_B_ReMobile.SetCheck(true);//选中查重
#endif
OnSendTask2();
m_E_Msg.SetFocus();
this->SetFocus();
return true;
}
void DLG_Send::SetMainFrame(CMainFrame *pFrame)
{
m_pMainFrame = pFrame;
m_pSocket = &m_pMainFrame->m_Socket;
m_AdoRS.SetAdoConnection( &m_pMainFrame->m_adoConnection );
m_AdoRS2.SetAdoConnection( &m_pMainFrame->m_adoConnection );
m_AdoRS3.SetAdoConnection( &m_pMainFrame->m_adoConnection );
m_AdoRS4.SetAdoConnection( &m_pMainFrame->m_adoConnection );
m_AdoRS4.SetCursorLocation(adUseClient);
m_AdoRS5.SetAdoConnection( &m_pMainFrame->m_adoConnection );
m_AdoRS5.SetCursorLocation(adUseClient);
m_AdoRS6.SetAdoConnection( &m_pMainFrame->m_adoConnection );
}
long DLG_Send::GetCurrentSelected()
{
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
if ( pos )
{
return m_wndList.GetNextSelectedItem(pos);
}
return -1;
}
void DLG_Send::OnRclickSendList(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
ShowRMenu();
}
void DLG_Send::ShowRMenu()
{
if ( m_lBoxType == 1 ) //列表为已发的不能编辑
return ;
if ( m_bSend ) //正在发送,不能编辑
return ;
CMenu menu;
menu.CreatePopupMenu();
BOOL bLock = false;
long lItem = this->GetCurrentSelected();
//添加
if ( m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false) )
{
menu.AppendMenu(MF_STRING , SEND_USER_ADD, _T(" 添加用户 ") );
menu.AppendMenu(MF_STRING , SEND_USER_PASTE, _T(" 粘贴用户 ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_USER_ADD , _T(" 添加用户 ") );
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_USER_PASTE , _T(" 粘贴用户 ") );
}
menu.AppendMenu(MF_SEPARATOR );
//修改
if (m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false) && lItem >=0 && !this->m_pMainFrame->GetUserPurview_HideNum())
{
menu.AppendMenu(MF_STRING , SEND_USER_MODIFY, _T(" 修 改 ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_USER_MODIFY , _T(" 修 改 ") );
}
//删除
if ( lItem >=0 )
{
menu.AppendMenu(MF_STRING , SEND_USER_DEL, _T(" 删 除 ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_USER_DEL , _T(" 删 除 ") );
}
//清空
menu.AppendMenu(MF_SEPARATOR );
menu.AppendMenu(MF_STRING , SEND_USER_CLEAR, _T(" 清 空 ") );
menu.AppendMenu(MF_SEPARATOR );
if (m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false) )
{
menu.AppendMenu(MF_STRING , SEND_USER_INPORT, _T(" 导入列表 ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_USER_INPORT, _T(" 导入列表 ") );
}
if ( !this->m_pMainFrame->GetUserPurview_HideNum() )
menu.AppendMenu(MF_STRING , SEND_USER_EXPORT, _T(" 导出列表 ") );
else
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_USER_EXPORT, _T(" 导出列表 ") );
#ifdef FSLT_VER
menu.AppendMenu(MF_SEPARATOR );
if (m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false))
{
menu.AppendMenu(MF_STRING , SEND_USER_INPORT_LT, _T(" 导入报价 ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_USER_INPORT_LT, _T(" 导入报价 ") );
}
#endif
#ifdef MOBSET_OEM_MASSDKDGWL
menu.AppendMenu(MF_SEPARATOR );
if (m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false))
{
menu.AppendMenu(MF_STRING , SEND_USER_INPORT_MASSDKDGWL_FP, _T(" 发送放盘信息 ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_USER_INPORT_MASSDKDGWL_FP, _T(" 发送放盘信息 ") );
}
if (m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false))
{
menu.AppendMenu(MF_STRING , SEND_USER_INPORT_MASSDKDGWL_SP, _T(" 发送收盘信息 ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_USER_INPORT_MASSDKDGWL_SP, _T(" 发送收盘信息 ") );
}
if (m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false))
{
menu.AppendMenu(MF_STRING , SEND_USER_INPORT_MASSDKDGWL_KF, _T(" 发送看房通知 ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_USER_INPORT_MASSDKDGWL_KF, _T(" 发送看房通知 ") );
}
if (m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false))
{
menu.AppendMenu(MF_STRING , SEND_USER_INPORT_MASSDKDGWL_ZC, _T(" 发送新政策宣传 ") );
}
else
{
menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED , SEND_USER_INPORT_MASSDKDGWL_ZC, _T(" 发送新政策宣传 ") );
}
#endif
menu.AppendMenu(MF_SEPARATOR );
menu.AppendMenu(MF_STRING , SEND_USER_STATUS, _T(" 刷新状态 ") );
//显示菜单
POINT pt ;
::GetCursorPos( &pt );
//this->ClientToScreen( &pt);
menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
menu.DestroyMenu();
}
void DLG_Send::On_User_Add()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false) )
return ;
Send_User user={0};
DLG_Send_User dlg(this);
dlg.SetParam( user );
if ( dlg.DoModal() == IDOK )
{
m_bModify = true; //已修改
user = dlg.GetParam();
AddUser( user );
RefreshListCount(); //刷新显示列表上的记录计数
}
}
void DLG_Send::On_User_Modify()
{
if ( !m_pMainFrame->GetUserPurview(PURVIEW_SENDP,false) )
return ;
if ( this->m_pMainFrame->GetUserPurview_HideNum() )
{
return ; //隐藏号码的,不允许修改
}
long lItem = GetCurrentSelected();
if ( lItem < 0 )
return ;
Send_User user = GetUser(lItem);
if ( user.szStatus[0] == '1' ) //发送成功
{
MessageBox( _T("因为此号码已成功发送短信,所以不能修改!") , _T("错误") , MB_ICONWARNING );
return ;
}
if ( CString(user.szNickName) == CString(_T("任务号码组")) )
{
MessageBox( _T("任务号码组,无法修改!") , _T("错误") , MB_ICONWARNING );
return ;
}
DLG_Send_User dlg(this);
dlg.SetParam( user );
if ( dlg.DoModal() == IDOK )
{
m_bModify = true; //已修改
user = dlg.GetParam();
AddUser( user , lItem ); //重新显示内容
}
}
void DLG_Send::On_User_Del()
{
CString str;
long lCount = m_wndList.GetSelectedCount();
long * pDel = new long[lCount+1];
memset( pDel , 0 , sizeof(long)*lCount);
POSITION pos = m_wndList.GetFirstSelectedItemPosition();
long i=0;
while ( pos )
{
pDel[i] = m_wndList.GetNextSelectedItem(pos);
i++;
}
m_wndList.ShowWindow( SW_HIDE ); //为了加快显示速度
for ( i = 0 ; i< lCount ; i++ )
{
Send_User user = GetUser(pDel[lCount-i-1]);
if ( user.szStatus[0] == '1' ) //发送成功的不能删除
{
continue;
}
m_wndList.DeleteItem( pDel[lCount-i-1] );
//在临时数据库中删除
m_strSort.Del(user.szMobile);
}
m_wndList.ShowWindow( SW_SHOW ); //为了加快显示速度
delete pDel;
m_bModify = true;//已修改过
RefreshListCount(); //刷新显示列表上的记录计数
}
void DLG_Send::On_User_Clear()
{
m_wndList.ShowWindow( SW_HIDE ); //为了加快显示速度
m_wndList.DeleteAllItems();
m_strSort.Clear(); //清空数据
m_bModify = true;//已修改过
m_wndList.ShowWindow( SW_SHOW ); //为了加快显示速度
RefreshListCount(); //刷新显示列表上的记录计数
}
void DLG_Send::On_User_Inport()
{
if ( m_B_ReMobile.GetCheck() )
{
int iRet = MessageBox( _T("将要导入发送记录,是否需要判断重复号码?\r\n注:如果需要判断,则导入速度较慢,但可以排除重复号码。") , _T("信息") , MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2);
if ( iRet != IDYES )
m_B_ReMobile.SetCheck(false);
}
m_wndList.ShowWindow(SW_HIDE); //加快显示速度
Inport_Field Field[] =
{
{_T("姓名"),0,0,-1},
{_T("昵称"),0,1,-1},
//{_T("性别"),0,2,-1},
//{_T("生日"),0,3,-1},
//{_T("公司"),0,4,-1},
//{_T("职务"),0,5,-1},
//{_T("地址"),0,6,-1},
{_T("手机号码"),0,7,-1},
//{_T("电话号码"),0,8,-1},
//{_T("传真号码"),0,9,-1},
//{_T("Email"),0,10,-1},
//{_T("QQ号码"),0,11,-1},
{_T("备注"),0,12,-1},
};
DLG_User_InportP2 dlg(this);
dlg.SetParam(&Field[0],sizeof(Field)/sizeof(Inport_Field),2);
//DLG_Send_Inport dlg(this);
//dlg.SetInport(true);
dlg.DoModal();
RefreshListCount(); //刷新显示列表上的记录计数
m_wndList.ShowWindow(SW_SHOW); //加快显示速度
}
void DLG_Send::On_User_Inport_LT()
{
BOOL m_bLongSms=m_B_LongSms.GetCheck();
BOOL m_bReMobile=m_B_ReMobile.GetCheck();
m_B_LongSms.SetCheck(true);
m_B_ReMobile.SetCheck(false);
DLG_User_Inport_LT dlg(this);
if ( dlg.DoModal()==IDOK ) //插入备注
{
m_B_ReMobile.SetCheck(m_bReMobile);
m_E_Msg.SetWindowText(_T("") );
OnSendInmemo();
}
else
{
//导入不成功,重新恢复原来数据
m_B_LongSms.SetCheck(m_bLongSms);
m_B_ReMobile.SetCheck(m_bReMobile);
}
}
void DLG_Send::On_User_Inport_Group_Sms()
{
m_B_LongSms.SetCheck(true);
m_B_ReMobile.SetCheck(false);
m_E_Msg.SetWindowText(_T("") );
OnSendInmemo();
}
void DLG_Send::On_User_Export()
{
if ( this->m_pMainFrame->GetUserPurview_HideNum() )
{
return ; //隐藏号码的,不允许导出
}
DLG_Send_Inport dlg(this);
dlg.SetInport(false);
dlg.DoModal();
}
void DLG_Send::On_User_Status()
{
}
BOOL DLG_Send::PreTranslateMessage(MSG* pMsg)
{
//此举是为了用户在输入号码时按了回车然后转到输入内容
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
{
if ( pMsg->hwnd == m_E_Num )
{
OnSendNumadd();
return true;
}
}
if (pMsg->message == WM_KEYUP &&(pMsg->wParam == 'v' || pMsg->wParam =='V') )
{
//if ( pMsg->hwnd != m_E_Num && pMsg->hwnd != m_E_Msg && pMsg->hwnd!=m_D_Date && pMsg->hwnd!=m_D_Time )
if ( pMsg->hwnd == m_wndList)
{
OnSendNumPaste();
return true;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
void DLG_Send::OnSendNumPaste()
{
if (!OpenClipboard())
return ;
HANDLE hclip;
TCHAR *buf=NULL;
#ifdef _UNICODE
hclip=::GetClipboardData(CF_UNICODETEXT);
#else
hclip=::GetClipboardData(CF_TEXT);
#endif
if ( !hclip )
{
CloseClipboard();
return ;
}
buf=(TCHAR*)GlobalLock(hclip);
TCHAR szNum[32]={0};
int lNumLen=0;
int lMaxNumLen=16;
long lLen = _tcslen(buf);
long lMobileCount=0;
m_wndList.ShowWindow( SW_HIDE ); //加快显示速度
for ( int i=0 ; i<lLen ; i++ )
{
BOOL bNum=false;
if ( buf[i]>='0' && buf[i]<='9' )
{
if ( lNumLen<=lMaxNumLen )
{
szNum[lNumLen]=buf[i];
lNumLen ++;
}
bNum = true;
}
#ifdef _UNICODE
if (!bNum && buf[i]>=L'' && buf[i]<=L'' )
{
if ( lNumLen<=lMaxNumLen )
{
szNum[lNumLen]=(buf[i]-L'')+'0';
lNumLen ++;
}
bNum = true;
}
#endif
if( !bNum )
{
if ( lNumLen>=8 && lNumLen<=lMaxNumLen )
{
ExMobileGZM(szNum); //去除国际码
if ( isMobileNum( szNum ) ) //找到新号码
{
lMobileCount ++;
Send_User user={0};
_tcscpy( user.szMobile , szNum );
AddUser(user);
}
}
lNumLen=0;
memset(szNum,0,sizeof(szNum));
}
}
//最后一个号码还是要处理
if ( lNumLen>=8 && lNumLen<=lMaxNumLen )
{
ExMobileGZM(szNum); //去除国际码
if ( isMobileNum( szNum ) ) //找到新号码
{
lMobileCount ++;
Send_User user={0};
_tcscpy( user.szMobile , szNum );
AddUser(user);
}
}
lNumLen=0;
memset(szNum,0,sizeof(szNum));
m_wndList.ShowWindow( SW_SHOW ); //加快显示速度
GlobalUnlock(hclip);
CloseClipboard();
RefreshListCount(); //刷新显示列表上的记录计数
}
void DLG_Send::OnSendNumadd()
{
long lLen2=m_E_Num.GetWindowTextLength();
TCHAR * buf = new TCHAR[lLen2+10];
m_E_Num.GetWindowText( buf , lLen2+10 );
if ( _tcslen( buf ) <=0 )
{
MessageBox( _T("请先输入要添加的手机号码!") , _T("错误") , MB_ICONWARNING );
m_E_Num.SetFocus();
delete buf;
return ;
}
TCHAR szNum[32]={0};
int lNumLen=0;
int lMaxNumLen=20;
long lLen = _tcslen(buf);
long lMobileCount=0;
for ( int i=0 ; i<lLen ; i++ )
{
BOOL bNum=false;
if ( buf[i]>='0' && buf[i]<='9' )
{
if ( lNumLen<=lMaxNumLen )
{
szNum[lNumLen]=buf[i];
lNumLen ++;
}
bNum = true;
}
#ifdef _UNICODE
if (!bNum && buf[i]>=L'' && buf[i]<=L'' )
{
if ( lNumLen<=lMaxNumLen )
{
szNum[lNumLen]=(buf[i]-L'')+'0';
lNumLen ++;
}
bNum = true;
}
#endif
if( !bNum )
{
if ( lNumLen>=8 && lNumLen<=lMaxNumLen )
{
ExMobileGZM(szNum); //去除国际码
if ( isMobileNum( szNum ) ) //找到新号码
{
lMobileCount ++;
Send_User user={0};
_tcscpy( user.szMobile , szNum );
AddUser(user);
}
}
lNumLen=0;
memset(szNum,0,sizeof(szNum));
}
}
//最后一个号码还是要处理
if ( lNumLen>=8 && lNumLen<=lMaxNumLen )
{
ExMobileGZM(szNum); //去除国际码
if ( isMobileNum( szNum ) ) //找到新号码
{
lMobileCount ++;
Send_User user={0};
_tcscpy( user.szMobile , szNum );
AddUser(user);
}
}
lNumLen=0;
memset(szNum,0,sizeof(szNum));
m_E_Num.SetWindowText(_T(""));
m_E_Num.SetFocus();
if ( lMobileCount <= 0 )
{
MessageBox( _T("手机号码输入有误!\r\n多个号码请以\";\"号隔开!") , _T("错误") , MB_ICONWARNING );
}
else
{
RefreshListCount(); //刷新显示列表上的记录计数
}
delete buf;
}
BOOL DLG_Send::List_Save(BOOL bTJ)
{
if ( !bTJ && !m_bModify ) //没有需要修改的内容,直接返回即可
return true;
TCHAR szMsg[1024]={0};
TCHAR szSelect[128]={0};
COleDateTime tTimer; //定时时间
TCHAR szBoxType[8]={0};
m_E_Msg.GetWindowText( szMsg , sizeof(szMsg) );
if ( _tcslen(szMsg) <=0 ) //内容不能为空
{
MessageBox(_T("输入的短信内容不能为空!"),_T("错误"),MB_ICONWARNING);
m_E_Msg.SetFocus();
return false;
}
_tcscpy( m_szMsg , szMsg );
ExChar( m_szMsg , _T("\r") ); //去除,防多行
if ( m_wndList.GetItemCount() <= 0 )
{
MessageBox(_T("列表里没输入要发送的目标号码!"),_T("错误"),MB_ICONWARNING);
return false;
}
if ( m_lBoxType == 0 )
_tcscpy( szBoxType, _T("0") ); //待发
else
_tcscpy( szBoxType, _T("1") ); //已发
memset(&m_tTimer,0,sizeof(m_tTimer));
if ( m_B_DS.GetCheck() ) //定时短信
{
SYSTEMTIME t={0};
SYSTEMTIME t1={0};
DateTime_GetSystemtime( m_D_Date.m_hWnd , &t );
DateTime_GetSystemtime( m_D_Time.m_hWnd , &t1 );
t.wHour = t1.wHour;
t.wMinute = t1.wMinute;
t.wSecond = 0;
tTimer = COleDateTime(t);
if ( !m_bSendSR && tTimer < COleDateTime::GetCurrentTime() ) //如果不是生日祝福,需要判断时间是否过期
{
MessageBox( _T("定时时间不能小于当前时间,请调整!") , _T("错误") , MB_ICONWARNING );
m_D_Date.SetFocus();
return false;
}
tTimer.GetAsSystemTime( m_tTimer ); //取定时时间
}
else
{
tTimer.SetStatus( COleDateTime::null );
}
if ( m_lBoxID ) //有ID,相当于修改
{
_stprintf( szSelect , _T("select * from smsbox where BoxID=%d") , m_lBoxID );
BOOL b = m_AdoRS.Open( szSelect );
if ( b && m_AdoRS.GetRecordCount() )
{
m_AdoRS.MoveFirst();
m_AdoRS.PutCollect( _T("BoxType") , szBoxType );
m_AdoRS.PutCollect( _T("Msg") , szMsg );
m_AdoRS.PutCollect( _T("Timer") , tTimer );
m_AdoRS.PutCollect( _T("Task") , m_B_Task.GetCheck() );
m_AdoRS.PutCollect( _T("LongSms") , m_B_LongSms.GetCheck() );
m_AdoRS.PutCollect( _T("FD") , m_B_FD.GetCheck() );
m_AdoRS.Update();
}
m_AdoRS.Close();
//删除所有原已有记录
if ( m_bModify ) //没做过修改不用修改smsitem
{
_stprintf( szSelect , _T("delete from smsitem where BoxID=%d") , m_lBoxID );
b = m_AdoRS.Open( szSelect );
}
}
else
{
//新增
BOOL b = m_AdoRS.Open( _T("smsbox") , adCmdTable );
if ( b )
{
m_AdoRS.AddNew();
m_AdoRS.PutCollect( _T("BoxType") , szBoxType );
m_AdoRS.PutCollect( _T("Msg") , szMsg );
m_AdoRS.PutCollect( _T("Timer") , tTimer );
SYSTEMTIME t;::GetLocalTime(&t);
COleDateTime ot(t);
m_AdoRS.PutCollect( _T("CreateTime") ,ot );
m_AdoRS.Update();
m_AdoRS.GetCollect( _T("BoxID") , m_lBoxID ); //取得新增的BoxID
}
m_AdoRS.Close();
}
if ( !m_bModify ) //没做过修改不用修改smsitem
{
return true;
}
//启用保存Item的线程
m_bSaveList = true;
//::AfxBeginThread((AFX_THREADPROC)AutoSaveItem,(LPVOID)this,THREAD_PRIORITY_NORMAL/*THREAD_PRIORITY_BELOW_NORMAL*/);
::AfxBeginThread((AFX_THREADPROC)AutoSaveItem,(LPVOID)this,THREAD_PRIORITY_BELOW_NORMAL);
Sleep(500); //秒为延时一会
/*
//将Item添中取BoxItem
BOOL b = m_AdoRS.Open( "smsitem" , adCmdTable );
if ( b )
{
long lCount = m_wndList.GetItemCount();
Send_User user;
for ( int i = 0 ; i< lCount ; i++ )
{
user = GetUser(i);
m_AdoRS.AddNew();
m_AdoRS.PutCollect( "BoxID" , m_lBoxID );
m_AdoRS.PutCollect( "GroupID" , user.szGroup );
m_AdoRS.PutCollect( "Name" , user.szName );
m_AdoRS.PutCollect( "NikeName" , user.szNickName );
m_AdoRS.PutCollect( "Mobile" , user.szMobile );
m_AdoRS.PutCollect( "BZ" , user.szBZ );
m_AdoRS.PutCollect( "Status" , user.szStatus );
//m_AdoRS.PutCollect( "SendID" , user.lSendID );
m_AdoRS.Update();
m_AdoRS.GetCollect( "ItemID" , user.lItemID ); //取新的ItemId
m_wndList.SetItemData( i , user.lItemID ); //设置新的ItemID;
}
m_AdoRS.Close();
}
//因为保存了新内容,所以要刷新显示列表
if ( m_lBoxType == 0 )
m_pMainFrame->m_pBaseView->m_dlgSmsDF.RefreshInfo();//待发
else
m_pMainFrame->m_pBaseView->m_dlgSmsYF.RefreshInfo();//已发
*/
m_bModify = false; //保存完毕,没有要修改的内容
return true;
}
Send_User DLG_Send::GetUser(long lItem , BOOL bDelay)
{
Send_User user={0};
TCHAR szStatus[16]={0};
m_wndList.GetItemText( lItem , 0 , user.szName , sizeof(user.szName)-1);
m_wndList.GetItemText( lItem , 1 , user.szNickName , sizeof(user.szNickName)-1 );
m_wndList.GetItemText( lItem , 2 , user.szMobile , sizeof(user.szMobile)-1 );
m_wndList.GetItemText( lItem , 3 , szStatus , sizeof(szStatus)-1 );
m_wndList.GetItemText( lItem , 4 , user.szGroup , sizeof(user.szGroup)-1 );
m_wndList.GetItemText( lItem , 5 , user.szBZ , sizeof(user.szBZ)-1 );
user.lItemID = m_wndList.GetItemData( lItem );
/*
if ( !bDelay )
{
user.lItemID = m_wndList.GetItemData( lItem );
}
else
{
for ( int i=0 ; i<20 ; i++ ) //延时2秒防止取不取ID;
{
user.lItemID = m_wndList.GetItemData( lItem );
if ( user.lItemID>0 )
{
break;
}
Sleep(100);
}
}
*/
if ( !_tcscmp(szStatus,_T("提交成功")) || !_tcscmp(szStatus,_T("发送成功")) )
_tcscpy(user.szStatus , _T("1") );
else
if ( !_tcscmp(szStatus,_T("提交失败")) )
_tcscpy(user.szStatus , _T("2") );
else
if ( !_tcscmp(szStatus,_T("已提交")) )
_tcscpy(user.szStatus , _T("3") );
else
_tcscpy(user.szStatus , _T("0") ); //未发
return user;
}
BOOL DLG_Send::List_Read(long lBoxID)
{
if ( IsSend() ) //判断是否在正在发送短信
return false;
if ( lBoxID == m_lBoxID ) //要打开的ID与已读入的ID相同不必重做
return true;
if (!CloseList())
return false;
//读入基本信息
TCHAR szSelect[128]={0};
TCHAR szBuf[1024]={0};
COleDateTime ot;
_stprintf( szSelect , _T("select * from smsbox where BoxID=%d") , lBoxID );
BOOL b = m_AdoRS.Open( szSelect );
long lCount=m_AdoRS.GetRecordCount();
if ( b && lCount>0 )
{
m_AdoRS.MoveFirst();
m_AdoRS.GetCollect( _T("BoxType") , szBuf );
m_lBoxType = _ttol(szBuf);
m_AdoRS.GetCollect( _T("Msg") , szBuf );
m_E_Msg.SetWindowText( szBuf );
m_AdoRS.GetCollect( _T("Timer") , ot );
if ( ot.GetStatus() == COleDateTime::valid ) //有效时间
{
m_B_DS.SetCheck( true );
SYSTEMTIME t;
ot.GetAsSystemTime( t );
DateTime_SetSystemtime( m_D_Date.m_hWnd , GDT_VALID , &t );
DateTime_SetSystemtime( m_D_Time.m_hWnd , GDT_VALID , &t );
if ( ot.GetDay()==1960 && ot.GetMonth()==7 && ot.GetDay()==31 ) //生日发送标志
{
SetListSR(true);
}
else
{
SetListSR(false);
}
}
else
{
m_B_DS.SetCheck( false );
SYSTEMTIME t;::GetLocalTime(&t);
DateTime_SetSystemtime( m_D_Date.m_hWnd , GDT_VALID , &t );
DateTime_SetSystemtime( m_D_Time.m_hWnd , GDT_VALID , &t );
}
long lb;
m_AdoRS.GetCollect(_T("Task") , lb );
m_B_Task.SetCheck(lb);
m_AdoRS.GetCollect(_T("LongSms") , lb );
m_B_LongSms.SetCheck(lb);
m_AdoRS.GetCollect(_T("FD") , lb );
m_B_FD.SetCheck(lb);
OnSendDs(); //设置定时
OnSendTask2();
if ( m_lBoxType == 1 ) //已发,不让操作,只能查询
{
EnableModifyWindow( false ); //不可以修改
m_B_New.EnableWindow(true); //新建与重发是可以的。
m_B_New2.EnableWindow(true); //新建与重发是可以的。
}
else
{
EnableModifyWindow( true ); //可以修改
}
_stprintf( szSelect , _T("select * from smsitem where BoxID=%d") , lBoxID );
m_wndList.ShowWindow(SW_HIDE);
m_wndList.DeleteAllItems(); //没有列表
//删除临时数据库
m_strSort.Clear(); //清空数据
m_wndList.ShowWindow(SW_SHOW);
b = m_AdoRS.Open( szSelect );
lCount=m_AdoRS.GetRecordCount();
if ( b && lCount>0 )
{
if ( m_B_ReMobile.GetCheck() && lCount>MAX_SENDLIST_NOTIP )
{
int iRet = MessageBox( _T("准备读取的记录数过大,是否需要判断重复号码?\r\n注:如果需要判断,则读取速度较慢,但可以排除重复号码。") , _T("信息") , MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2);
if ( iRet != IDYES )
m_B_ReMobile.SetCheck(false);
}
m_wndList.ShowWindow( SW_HIDE ); //加快显示速度
CAdoSmsItem adoSms;
m_AdoRS.RecordBinding( adoSms );
m_AdoRS.MoveFirst();
while( !m_AdoRS.IsEOF() )
{
Send_User user={0};
/*
m_AdoRS.GetCollect( "GroupID" , user.szGroup );
m_AdoRS.GetCollect( "Name" , user.szName );
m_AdoRS.GetCollect( "NikeName" , user.szNickName );
m_AdoRS.GetCollect( "Mobile" , user.szMobile );
m_AdoRS.GetCollect( "BZ" , user.szBZ );
m_AdoRS.GetCollect( "Status" , user.szStatus );
m_AdoRS.GetCollect( "SendID" , user.lSendID );
m_AdoRS.GetCollect( "SendID" , user.lItemID );
*/
_tcscpy(user.szGroup , adoSms.m_GroupID );
_tcscpy(user.szName , adoSms.m_Name );
_tcscpy(user.szNickName , adoSms.m_NickName );
_tcscpy(user.szMobile , adoSms.m_Mobile );
_tcscpy(user.szBZ , adoSms.m_BZ );
_tcscpy(user.szStatus , adoSms.m_Status );
user.lSendID = adoSms.m_SendID;
user.lItemID = adoSms.m_ItemID;
memset(&adoSms,0,sizeof(adoSms));
m_AdoRS.MoveNext();
AddUser(user);
}
m_wndList.ShowWindow( SW_SHOW ); //加快显示速度
}
RefreshTJ(); //刷新显示字数
RefreshListCount(); //刷新显示列表上的记录计数
m_lBoxID = lBoxID;
m_bModify = false; //刚刚读入,不需要修改
this->SetFocus();
return true;
}
else
{
return false;
}
return false;
}
void DLG_Send::AddUser(Send_User user,long lItem)
{
ExChar(user.szMobile,_T(" "));
ExChar(user.szMobile,_T("\r"));
ExChar(user.szMobile,_T("\n"));
ExChar(user.szMobile,_T("\t"));
if ( CString(user.szNickName) != CString(_T("任务号码组")) ) //任务方式
{
ExMobileGZM(user.szMobile); //去除国际码
//if ( !isMobileNum( user.szMobile ) ) //不是手机号码,不用添加或修改
if ( !isMmsNum( user.szMobile ) ) //不是手机号码,不用添加或修改,不支持小灵通了
return ;
}
else
{
if ( !m_B_Task.GetCheck() )
{
m_B_Task.SetCheck(true);
OnSendTask();
m_B_Task.EnableWindow(false);
}
if ( m_B_Task.GetCheck() )
{
//为任务模式
m_B_Task.SetCheck(true);
m_B_Task.EnableWindow(false);
}
else
{
return;
}
}
//判断是否黑名单
if ( lItem < 0 )
{
if ( this->IsLocakBack(user.szMobile ) && (m_bBackReMobile || m_lBackReMobileType==0) ) //需要显示警告,或者自动过滤
{
if ( m_bBackReMobile )
{
CString str;
str.Format( _T("%s,%s"),user.szName , user.szMobile);
DLG_AddBack dlg(str,this); //提示重复号码
dlg.DoModal();
m_bBackReMobile = dlg.m_bShowReMobile;
m_lBackReMobileType = dlg.m_lReMobileType;
}
if ( m_lBackReMobileType==0 ) //自动过滤
return;
}
}
if (m_pMainFrame->m_Setup.bAutoGetName && _tcslen(user.szName) <= 0) //从通讯录取姓名
{
CString strSelect;
BOOL bGetAddress = false;
//接收到新的短信,先查询其在电话本里的姓名
if (!bGetAddress && m_pMainFrame->GetUserPurview(PURVIEW_PADDRESS, false)) //有私人电话本查看权限
{
strSelect.Format(_T("select * from paddress where Mobile like '%%%s'"), user.szMobile);
if (m_AdoRS2.Open(strSelect) && !m_AdoRS2.IsEOF())
{
m_AdoRS2.GetCollect(_T("Name"), user.szName);
m_AdoRS2.GetCollect(_T("NickName"), user.szNickName);
m_AdoRS2.GetCollect(_T("BZ"), user.szBZ);
bGetAddress = true;
}
}
if (!bGetAddress && m_pMainFrame->GetUserPurview(PURVIEW_GADDRESS_SEE, false)) //有公用电话本查看权限
{
strSelect.Format(_T("select * from gaddress where Mobile like '%%%s'"), user.szMobile);
if (m_AdoRS2.Open(strSelect) && !m_AdoRS2.IsEOF())
{
m_AdoRS2.GetCollect(_T("Name"), user.szName);
m_AdoRS2.GetCollect(_T("NickName"), user.szNickName);
m_AdoRS2.GetCollect(_T("BZ"), user.szBZ);
}
}
}
BOOL bInsert=false;
if ( lItem < 0 )
{
if ( m_B_ReMobile.GetCheck() && (m_bShowReMobile || m_lReMobileType==0) ) //需要显示警告,或者自动过滤
{
bInsert = true;
if ( !m_strSort.Add(user.szMobile) )
{
if ( m_bShowReMobile )
{
CString str;
str.Format( _T("%s,%s"),user.szName , user.szMobile);
DLG_AddWarning dlg(str,this); //提示重复号码
dlg.DoModal();
m_bShowReMobile = dlg.m_bShowReMobile;
m_lReMobileType = dlg.m_lReMobileType;
}
if ( m_lReMobileType==0 ) //自动过滤
return;
}
}
lItem = m_wndList.GetItemCount();
if ( m_B_Task.GetCheck() && lItem>=100 ) //任务方式不能超过100个号码
{
MessageBox(_T("当前为任务模式最多只允许添加100个号码超出的将会被丢弃\r\n如需发送私人通讯录数据,建议使用普通模式。"), _T("警告"), MB_ICONWARNING);
return ;
}
m_wndList.InsertItem( lItem , user.szName );
//插入到临时数据库
if ( !bInsert )
{
m_strSort.Add(user.szMobile);
}
}
else
{
//修改数据库
CString str,strMobile;
strMobile = m_wndList.GetItemText(lItem,2);
if ( strMobile != CString(user.szMobile) )
{
if ( !m_strSort.Add(user.szMobile) ) //加入成功,否则为重复
{
if ( m_bShowReMobile )
{
CString str;
str.Format( _T("%s,%s"),user.szName , user.szMobile);
DLG_AddWarning dlg(str,this); //提示重复号码
dlg.DoModal();
m_bShowReMobile = dlg.m_bShowReMobile;
m_lReMobileType = dlg.m_lReMobileType;
}
if ( m_lReMobileType==0 ) //自动过滤
return;
}
}
m_wndList.SetItemText( lItem,0,user.szName );
}
m_wndList.SetItemText( lItem,1,user.szNickName );
m_wndList.SetItemText( lItem,2,user.szMobile );
if ( user.szStatus[0] == '1' )
m_wndList.SetItemText( lItem,3,_T("提交成功"));
else
if ( user.szStatus[0] == '2' )
m_wndList.SetItemText( lItem,3,_T("提交失败"));
else
if ( user.szStatus[0] == '3' )
m_wndList.SetItemText( lItem,3,_T("已提交"));
else
m_wndList.SetItemText( lItem,3,_T("未发"));
m_wndList.SetItemText( lItem,4,user.szGroup );
m_wndList.SetItemText( lItem,5,user.szBZ );
m_wndList.SetItemData( lItem,user.lItemID);
m_bModify = true;
}
void DLG_Send::OnDblclkSendList(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
On_User_Modify();
}
void DLG_Send::OnDatetimechangeSendDsD(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
m_bModify = true;//已修改过
}
void DLG_Send::OnDatetimechangeSendDsT(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
m_bModify = true;//已修改过
}
void DLG_Send::OnSendNew()
{
List_New();
}
long DLG_Send::GetBoxID()
{
return m_lBoxID;
}
void DLG_Send::AddLoveToMsg(TCHAR *pLove)
{
m_E_Msg.SendMessage(EM_REPLACESEL,false,(LPARAM)(LPCTSTR)pLove);
m_bModify = true;
}
void DLG_Send::OnSendIname()
{
AddLoveToMsg( _T("\"%Name%\"") );
}
void DLG_Send::OnSendInicename()
{
AddLoveToMsg( _T("\"%NickName%\"") );
}
void DLG_Send::OnSendInmemo()
{
AddLoveToMsg( _T("\"%Memo%\"") );
}
void DLG_Send::OnSendIfalsh()
{
AddLoveToMsg( _T("\"%^%\"") );
}
void DLG_Send::OnSendYl()
{
}
BOOL DLG_Send::List_ReSend(long lBoxID)
{
if ( IsSend() ) //判断是否在正在发送短信
return false;
if (!List_Read(lBoxID))
return false;
EnableModifyWindow( true ); //可以修改
if ( m_B_Task.GetCheck() ) //如果是任务模式,重新读入后里面肯定有批量号码,所以不能再更改为非任务模式
m_B_Task.EnableWindow(false);
OnSendDs(); //设置定时
RefreshTJ(); //刷新显示字数
OnSendTask2(); //刷新任务模式
m_wndList.ShowWindow( SW_HIDE ); //加快显示速度
long lCount = m_wndList.GetItemCount();
//将全部内容置为未发
for ( int i = 0 ; i< lCount ; i++ )
{
m_wndList.SetItemText( i,3,_T("未发"));
}
m_wndList.ShowWindow( SW_SHOW ); //加快显示速度
m_lBoxID = 0; //未保存
m_lBoxType = 0; //待发
m_bModify = true; //已修改
this->SetFocus();
return true;
}
void DLG_Send::EnableModifyWindow(BOOL bModify)
{
m_B_DS.EnableWindow( bModify );
m_D_Date.EnableWindow( bModify );
m_D_Time.EnableWindow( bModify );
m_E_Msg.SetReadOnly( !bModify );
m_E_Num.EnableWindow( bModify );
m_B_Add.EnableWindow( bModify );
m_B_Start.EnableWindow( bModify );
m_B_Save.EnableWindow( bModify );
m_B_DY.EnableWindow( bModify );
m_B_GetMsg.EnableWindow( bModify );
m_B_Memo.EnableWindow(bModify);
m_B_NickName.EnableWindow(bModify);
m_B_Name.EnableWindow(bModify);
m_B_Flash.EnableWindow(bModify);
m_B_New.EnableWindow(bModify);
m_B_New2.EnableWindow(bModify);
m_L_lInterval.EnableWindow(bModify);
m_B_Task.EnableWindow(bModify);
if ( m_pMainFrame->m_Ans_Login2.lLongSmsType==0 )
{
m_B_LongSms.EnableWindow(bModify);
}
if ( m_pMainFrame->m_Ans_Login2.lLongSmsType==1 )
{
m_B_FD.EnableWindow(false); //如果强制了使用长短信,则不能使用分段了
}
else
{
m_B_FD.EnableWindow(bModify);
}
if ( !m_pMainFrame->GetUserPurview( PURVIEW_SENDP , false ) )
{
m_E_Num.EnableWindow( false ); //没有发送私人电话本的权限
m_B_Add.EnableWindow( false );
}
}
int DLG_Send::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
m_UserDrop.Register(this);
return 0;
}
LRESULT DLG_Send::OnDrop(WPARAM wParam, LPARAM lParm)
{
if ( m_lBoxType== 1 ) //已发列表不能编辑
{
MessageBox( _T("对不起,已发的列表不能再添加发送号码!") , _T("错误") , MB_ICONWARNING );
return false;
}
// if ( !m_pMainFrame->GetUserPurview(PURVIEW_SENDG) )
// return false;
COleDataObject * pData = (COleDataObject *)wParam;
UINT iCF = ::RegisterClipboardFormat( _T("CORPSMS_USER") );
if( pData->IsDataAvailable( iCF ) )
{
HGLOBAL hMem = pData->GetGlobalData( iCF );
BYTE * lp = (BYTE *)GlobalLock((HGLOBAL) hMem);//lock source
if (lp != NULL)
{
long lCount = *(long *)lp;
Send_User * pUser = (Send_User *)(lp+sizeof(long));
if (m_B_Task.GetCheck() && CString(pUser[0].szGroup) != CString(_T("公用通讯录")))
{
long lItem = m_wndList.GetItemCount();
if (lItem + lCount> 100)
{
MessageBox(_T("当前为任务模式最多只允许添加100个号码超出的将会被丢弃\r\n如需发送私人通讯录数据,建议使用普通模式。"), _T("警告"), MB_ICONWARNING);
lCount = 100 - lItem;
if (lCount < 0) lCount = 0;
}
}
m_wndList.ShowWindow( SW_HIDE ); //加快显示速度
for ( int i = 0 ; i<lCount;i++ )
{
if ( i==0 && CString(pUser[i].szNickName)==CString(_T("任务号码组")) && CString(pUser[i].szGroup)==CString(_T("公用通讯录")) )
{
if ( m_B_Task.GetCheck() )
{
AddUser( pUser[i] );
break;
}
else
{
pUser ++;
continue; //跳过
}
}
AddUser(*pUser);
pUser ++;
}
m_wndList.ShowWindow( SW_SHOW ); //加快显示速度
RefreshListCount(); //刷新显示列表上的记录计数
}
GlobalUnlock( hMem );//unlock source
return TRUE;
}
return true;
}
BOOL DLG_Send::List_AddUser(long lCount, Send_User *pUser)
{
if ( m_B_ReMobile.GetCheck() && lCount>MAX_SENDLIST_NOTIP )
{
int iRet = MessageBox( _T("准备添加的记录数过大,是否需要判断重复号码?\r\n注:如果需要判断,则添加速度较慢,但可以排除重复号码。") , _T("信息") , MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2);
if ( iRet != IDYES )
m_B_ReMobile.SetCheck(false);
}
if ( m_lBoxType == 1 ) //如果是查看已发短信,直接新建新的短信列表
List_New();
if (m_B_Task.GetCheck())
{
long lItem = m_wndList.GetItemCount();
if (lItem + lCount > 100)
{
MessageBox(_T("当前为任务模式最多只允许添加100个号码超出的将会被丢弃\r\n如需发送私人通讯录数据,建议使用普通模式。"), _T("警告"), MB_ICONWARNING);
lCount = 100 - lItem;
if (lCount < 0) lCount = 0;
}
}
m_wndList.ShowWindow( SW_HIDE ); //加快显示速度
for ( int i = 0 ; i< lCount ; i++ )
{
AddUser( pUser[i] );
}
m_wndList.ShowWindow( SW_SHOW ); //加快显示速度
RefreshListCount(); //刷新显示列表上的记录计数
return true;
}
BOOL DLG_Send::IsSend()
{
if ( m_bSend )
{
MessageBox( _T("正在发送短信中,此操作无效!") , _T("错误") , MB_ICONWARNING );
}
return m_bSend;
}
void DLG_Send::OnSendStart()
{
CString str ;
long lMaxMsgLen = m_pMainFrame->GetMaxSendMsgLen(); //取允许的最大字符数
if ( m_bSend ) //在发,现停止
{
this->SetWindowText( _T("短信发送列表") ); //恢复默认提示信息
m_B_Start.SetUnSelToolTip( _T("立即发送") );
m_B_Start.ActiveToolTip( true );
m_B_Start.SetUnSelBmp( IDB_B_START );
m_B_Start.Invalidate();
m_bSend=false; //不在发送
if ( m_lBoxType == 1 ) //发送完成
{
EnableModifyWindow( false ); //不可修改
m_B_New.EnableWindow(true); //新建与重发是可以的。
m_B_New2.EnableWindow(true); //新建与重发是可以的。
}
else
{
//未发送完成,用户手动停止
EnableModifyWindow( true ); //还可修改
m_B_New.EnableWindow(true); //新建与重发是可以的。
m_B_New2.EnableWindow(true); //新建与重发是可以的。
}
}
else
{
TCHAR szMsg[1024]={0};
m_E_Msg.GetWindowText( szMsg , sizeof(szMsg) );
if ( _tcslen(szMsg) <=0 ) //内容不能为空
{
MessageBox(_T("输入的短信内容不能为空!"),_T("错误"),MB_ICONWARNING);
m_E_Msg.SetFocus();
return ;
}
ExChar( szMsg , _T("\r") ); //去除,防多行
ExChar( szMsg , _T("\1") ); //去除,防多行
m_bNoSupperWord=false;
if ( bNoSupperWord(szMsg , str) )
{
CString str2;
str2.Format( _T("短信内容含有部分手机或地区不支持的字符:%s。\r\n建议修改或先单发测试!是否继续发送?") , str);
long lRet = MessageBox( str2, _T("提问") , MB_ICONQUESTION|MB_YESNO );
if ( lRet != IDYES )
return ;
m_bNoSupperWord=true;
}
/*
//判断内容是否超长
long lMsgAll=0;
long lMsgIndex = 1;
TCHAR szTemp[1024]={0};
//if ( isChinese( szMsg,_tcslen(szMsg) ) )
//{
GetSpiltUnicodeMsg( szMsg , szTemp , lMsgIndex , lMaxMsgLen ,lMsgAll);
//}
//else
//{
// GetSpiltAsciiMsg( szMsg , szTemp , lMsgIndex , lMaxMsgLen*2+lMaxMsgLen*2/7 ,lMsgAll);
//}
if ( lMsgAll > 1 )
*/
if ( m_lPage >1 && !m_B_LongSms.GetCheck() && !m_B_FD.GetCheck() )
{
//_stprintf(szTemp,_T("短信内容过长,将会被分成%d段发送是否继续") ,lMsgAll );
str = _T("短信内容将要被拆分多段发送,需按实际条数进行扣费,是否继续?");
long lRet = MessageBox( str, _T("提问") , MB_ICONQUESTION|MB_YESNO );
if ( lRet != IDYES )
return ;
}
if ( !List_Save(true) ) //保存失败,返回
return;
#ifdef SUPPER_IM_MAS
if ( Mas_Enable() ) //是否启用Mas
{
if ( !Mas_Init() ) //是否已初始化Mas
return ;
}
m_Mas_MobsetEnd=false; //短信易是否发完
m_Mas_MasEnd=false; //Mas是否发完
m_Mas_SendOK = 0;
#endif
m_bSend = true; //开始发送
EnableModifyWindow( false ); //因为发送可以修改
m_B_Start.SetUnSelToolTip( _T("停止发送") );
m_B_Start.ActiveToolTip( true );
m_B_Start.SetUnSelBmp( IDB_B_STOP );
m_B_Start.Invalidate();
m_B_Start.EnableWindow( true ); //允许用户手动停止发送
m_lSendIndex = 0;
m_lSendOK = 0;
m_bShowFiltWarning = true; //允许显示过滤警告
m_bShowFiltFirst = true; //第一次显示过滤警告
m_bFilt = false; //是否含有过滤关键字
m_bFiltOver = false; //是否需要过量审核
m_dwBackCount=0; //黑名单数量
m_dwNoSupCount=0; //不支持号码数量
m_dwNoMsgCount=0; //没内容数量
memset( m_szSendMsg , 0 , sizeof(m_szSendMsg) ); //还没发送,没有发送内容
//记录发送间隔
m_lInterval = 0;
m_L_lInterval.GetWindowText(str);
m_lInterval = _ttol(str);
//判断是否需要通知管理员,此用户发送大于限定值的短信
long lCount = m_wndList.GetItemCount();
if ( m_B_Task.GetCheck() )
{
//以下为发送批量短信
long lSize = sizeof(REQ_PLTaskSms_Add) + sizeof(ANS_PLTaskSms_AddData)*lCount;
BYTE * pData = new BYTE[lSize];
memset(pData , 0 , lSize );
REQ_PLTaskSms_Add * pAdd = (REQ_PLTaskSms_Add *)pData;
ANS_PLTaskSms_AddData * pAddData = (ANS_PLTaskSms_AddData *)(pData+sizeof(REQ_PLTaskSms_Add));
pAdd->lCorpID = this->m_pMainFrame->m_lCorpID;
pAdd->lUserID = this->m_pMainFrame->m_lUserID;
_tcscpy(pAdd->szMsg , szMsg );
pAdd->tTimer = m_tTimer;
pAdd->lLongSms = m_B_LongSms.GetCheck();
pAdd->lFD = m_B_FD.GetCheck();
pAdd->lCount = lCount; //项目数量
pAdd->lMobileCount = 0; //号码数量
CString str;
for ( int i=0 ;i<lCount ; i++ )
{
m_wndList.GetItemText(i , 0 , pAddData->szMobileName , sizeof(pAddData->szMobileName) );
str = m_wndList.GetItemText(i, 1);
pAddData->lType = 0; //普通号码
if ( str == CString(_T("任务号码组")) )
{
str = m_wndList.GetItemText(i, 4);
if ( str == CString(_T("号码文件")) )
{
pAddData->lType = 1; //号码文件
}
if ( str == CString(_T("公用通讯录")) )
{
pAddData->lType = 2; //公用通讯录
}
}
if ( pAddData->lType == 0 )
m_wndList.GetItemText(i , 2 , pAddData->szMobileID , sizeof(pAddData->szMobileID) ); //号码
else
m_wndList.GetItemText(i , 5 , pAddData->szMobileID , sizeof(pAddData->szMobileID) ); //号码
if ( pAddData->lType==0 )
{
pAddData->lMobileCount = 1;
}
else
{
str = m_wndList.GetItemText(i, 2);
pAddData->lMobileCount = _ttol(str);
}
pAdd->lMobileCount += pAddData->lMobileCount;
pAddData ++;
}
//判断过滤关键字
if ( !bFilt( szMsg , pAdd->lMobileCount ) ) //过滤信息
{
if ( m_bSend )
{
OnSendStart(); //停止
}
delete pData;
return ;
}
pAdd->lFilt = m_bFilt;
_tcscpy(pAdd->szFiltWord , m_strFiltWord );
pAdd->lUserAudit =0; //是否需要用户审核
if ( m_pMainFrame->GetUserPurview(PURVIEW_PL_AUDIT,false) && !m_pMainFrame->GetUserPurview(PURVIEW_PL_VERIFY,false)) //需审核,但他不是审核者,就需要先审核后发送
pAdd->lUserAudit =1;
m_pMainFrame->SendFrame(SMSFUNC_PLTASKSMS_ADD , pData , lSize);
m_dwSendStartTime = GetTickCount();
}
else
{
//以下为发送短信
if ( _tcscmp(m_szMsg,m_szMsgEndFilt) ) //两信息不同时,检查是否需要通知管理员客户发送了大量信息。
{
if ( m_pMainFrame->m_Ans_Login.lFiltStep>0 )
{
long lFiltCount = m_pMainFrame->m_Ans_Login.lFiltStep;
if ( m_pMainFrame->m_Ans_Login.lOverBegin>=0 && m_pMainFrame->m_Ans_Login.lOverEnd>=0 && m_pMainFrame->m_Ans_Login.lOverPercent>=0 )
{
SYSTEMTIME t;GetLocalTime(&t);
if ( t.wHour < m_pMainFrame->m_Ans_Login.lOverBegin || t.wHour > m_pMainFrame->m_Ans_Login.lOverEnd )
{
if ( m_pMainFrame->m_Ans_Login.lOverPercent>0 )
lFiltCount = lFiltCount*m_pMainFrame->m_Ans_Login.lOverPercent/10;
}
}
if ( lFiltCount<=lCount )
{
_tcscpy(m_szMsgEndFilt,m_szMsg);
REQ_FiltStep * pStep = new REQ_FiltStep;
memset(pStep , 0 , sizeof(REQ_FiltStep));
pStep->lCorpID = m_pMainFrame->m_lCorpID;
pStep->lUserID = m_pMainFrame->m_lUserID;
pStep->lSendCount=lCount; //发送数据
memcpy( pStep->szLoginName , m_pMainFrame->m_pCurUser->szUser,15);
memcpy(pStep->szMsg , szMsg , sizeof(TCHAR)*480 );
CString strCM;
BOOL bCMFirst = m_pMainFrame->GetQJCM(strCM);
_tcscat(pStep->szMsg,strCM);
//_tcscpy(pStep->szMsg , szMsg );
m_pMainFrame->SendFrame( SMSFUNC_FILTSTEP , (BYTE*)pStep , sizeof(REQ_FiltStep) );
if ( m_pMainFrame->m_Ans_Login.lOverFilt )
{
m_bFiltOver = true;
//MessageBox( _T("由于你提交的短信数量过多,需要管理员审核后才能真正发送!"),_T("提示信息"),MB_ICONINFORMATION);
}
}
}
}
else
{
m_bFiltOver = true;
}
if ( m_B_SaveSendLog.GetCheck() && lCount>MAX_SENDLIST_NOTIP )
{
int iRet = MessageBox( _T("准备发送的记录数过大,是否记录发送日志?\r\n注:记录发送日志的速度稍慢,但可以根据日志查询状态。") , _T("信息") , MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2);
if ( iRet != IDYES )
m_B_SaveSendLog.SetCheck(false);
}
//判断是否为点对点短信,采用哪种方式进行发送
m_bOneToOne=false;
CString csTemp = m_szMsg;
CString strCM;
BOOL bCMFirst = m_pMainFrame->GetQJCM(strCM);
csTemp.Replace( strCM , _T("") ); //删除短信中原有的强制签名,重新生成过
_tcscpy(m_szMsg,csTemp);
m_bOneToOne = csTemp.Find( _T("\"%Name%\""))>=0;
m_bOneToOne = m_bOneToOne || csTemp.Find( _T("\"%NickName%\""))>=0;
m_bOneToOne = m_bOneToOne || csTemp.Find( _T("\"%Memo%\""))>=0;
if ( !m_bFiltOver && !bFilt( m_szMsg ) ) //过滤信息
{
if ( m_bSend )
{
OnSendStart(); //停止
}
return ;
}
m_dwSendStartTime = GetTickCount();
SetTimer( 10 , 200 , NULL ); //启动发送
// SendNextSms();
}
}
}
void DLG_Send::SendNextSms()
{
long lMaxOneSendMobile=100; //每次最多发送的号码
long lMaxOneSendMsg=1020; //每次最多发送的短信内容长度
long lCMLen=0;
long lMaxMsgLen_LongSms=0;
long lMaxMsgLen = m_pMainFrame->GetMaxSendMsgLen(); //取允许的最大字符数
if ( m_B_LongSms.GetCheck() ) //长短信
{
lMaxMsgLen_LongSms = m_pMainFrame->GetMaxSendMsgLen_longSms(lCMLen); //长短信的最大字符数
}
CString strCM;
BOOL bCMFirst = m_pMainFrame->GetQJCM(strCM);
long lMaxSendCount = 10;
long lSpeed = m_pMainFrame->m_Setup.lSendSpeed;
if ( lSpeed <= 0 )
lMaxSendCount = 1;
if ( lSpeed == 1 )
lMaxSendCount = 5;
if ( lSpeed > 1 )
lMaxSendCount = 10 +(lSpeed-2)*10;
if ( lMaxSendCount>lMaxOneSendMobile )
{
MessageBox(_T("发送异常1请与管理员联系") , _T("错误") , MB_ICONWARNING );
return ;
}
if ( m_pMobileMsg == NULL ) //手机号码的分段
{
m_pMobileMsg = new CStringArray();
if ( m_pMobileMsg )
m_pMobileMsg->SetSize(lMaxOneSendMobile);
}
if ( m_pSendData == NULL )
{
m_pSendData = new REQ_SendData3[lMaxOneSendMobile];
}
if ( !m_pMobileMsg || !m_pSendData )
{
MessageBox(_T("发送异常2请与管理员联系") , _T("错误") , MB_ICONWARNING );
return ;
}
for ( int i=0 ; i<lMaxOneSendMobile; i++ )
m_pMobileMsg->SetAt(i,CString(_T("")));
memset(m_pSendData , 0 , sizeof(REQ_SendData3)*lMaxOneSendMobile);
REQ_Send3 send={0};
m_lSendRand = rand();
send.lRand = m_lSendRand;
send.bCMFirst = bCMFirst;
send.lCorpID = m_pMainFrame->m_lCorpID;
send.lUserID = m_pMainFrame->m_lUserID;
send.bLong = m_B_LongSms.GetCheck();
send.bFD = m_B_FD.GetCheck();
send.lMaxMsgLen = lMaxMsgLen;
send.lMaxMsgLen_long = lMaxMsgLen_LongSms;
send.bCMFirst = bCMFirst;
_tcscpy(send.szCM , strCM);
send.lMsgLen = 0;
if ( !m_bOneToOne )
send.lMsgLen = (_tcslen(m_szMsg)+1)*sizeof(TCHAR); //内容长度
long lCount = m_wndList.GetItemCount();
long lSendCount = 0;
long lGet = 0;
for ( ; m_lSendIndex<lCount && lGet<lMaxSendCount ; m_lSendIndex++ )
{
Send_User user = GetUser(m_lSendIndex,true);
//未发或提交失败的重发
if ( (user.szStatus[0] == '0' || user.szStatus[0] == '2') && !Mas_MobileIsSend(user.szMobile) ) //未发送成功的,都要发送
{
CString strSendMsg = m_szMsg;
if ( m_bOneToOne ) //点对点的短信
{
//找到应发送的记录,开始发送
if ( _tcslen(user.szName)<=0)
strSendMsg.Replace( _T("\"%Name%\"") , m_pMainFrame->m_Setup.szDEF_Name ); //替换姓名
else
strSendMsg.Replace( _T("\"%Name%\"") , user.szName ); //替换姓名
if ( _tcslen(user.szNickName)<=0)
strSendMsg.Replace( _T("\"%NickName%\"") , m_pMainFrame->m_Setup.szDEF_NickName ); //替换姓名
else
strSendMsg.Replace( _T("\"%NickName%\"") , user.szNickName ); //替换昵称
if ( _tcslen(user.szBZ)<=0)
strSendMsg.Replace( _T("\"%Memo%\"") , m_pMainFrame->m_Setup.szDEF_BZ ); //替换姓名
else
strSendMsg.Replace( _T("\"%Memo%\"") , user.szBZ ); //替换备注
TCHAR szFalsh[8]={0};
szFalsh[0] = 01;
//strSendMsg.Replace( _T("\"%^%\"") , szFalsh ); //替换闪烁符
if ( !m_bFiltOver && !bFilt( strSendMsg ) ) //过滤信息
{
if ( m_bSend )
{
OnSendStart(); //停止
}
return ;
}
}
//看是否为黑名单
if ( isBack(user.szMobile) )
{
m_wndList.SetItemText( m_lSendIndex , 3 , _T("提交失败") );
m_dwBackCount++; //黑名单数量
continue;
}
if ( strSendMsg.GetLength()<=0 )
{
m_wndList.SetItemText( m_lSendIndex , 3 , _T("提交失败") );
m_dwNoMsgCount++; //内容为空
continue;
}
m_pMobileMsg->SetAt(lSendCount,strSendMsg); //保存信息
//计算生日定时短信
if ( m_bSendSR )
{
SYSTEMTIME t;::GetSystemTime(&t);
m_tTimer.wYear = t.wYear;
m_tTimer.wMonth = (WORD)_ttol(user.szBZ);
m_tTimer.wDay = (WORD)_ttol(user.szBZ+3);
//判断生日是否已过,如果已过,下年再提醒
long lNow=t.wMonth*100+t.wDay;
long lSR =m_tTimer.wMonth*100+m_tTimer.wDay;
if ( lSR<lNow )
m_tTimer.wYear=m_tTimer.wYear+1;
}
if ( m_bFiltOver || m_bFilt )
m_pSendData[lSendCount].lStatus = SEND_STATUS_SUB_FILT; //需要审核
m_pSendData[lSendCount].lItem = m_lSendIndex;
m_pSendData[lSendCount].lItemID = user.lItemID; //ItemID;
m_pSendData[lSendCount].tTimer = m_tTimer; //定时间
BreakChar(user.szName,23); //限制字数
BreakChar(user.szMobile,23); //限制字数
_tcscpy( m_pSendData[lSendCount].szName , user.szName );
_tcscpy( m_pSendData[lSendCount].szMobile , user.szMobile);
m_pSendData[lSendCount].lMsgLen = 0;
if ( m_bOneToOne )
{
m_pSendData[lSendCount].lMsgLen = (_tcslen(strSendMsg)+1)*sizeof(TCHAR); //内容长度
}
lSendCount ++; //记录号加1
lGet++;
}
}
if ( lSendCount <= 0 ) //短信发送完成
{
long lSendAll=m_lSendOK; //发送总数
#ifdef SUPPER_IM_MAS
lSendAll += m_Mas_SendOK; //发送总数加上Mas发送数
m_Mas_MobsetEnd = true;
if ( !Mas_Enable() || m_Mas_MasEnd ) //mas的已发送完成
{
#endif
//短信发送完成
m_lBoxType = 1 ; //因为发送完成,列表的格式为已发
List_Save(true); //保存
if ( m_bSend )
{
OnSendStart(); //停止
}
CString strMsg;
strMsg.Format( _T("短信发送完成,成功提交%d个号码!用时%d秒。%s") , lSendAll,(::GetTickCount()-m_dwSendStartTime)/1000,GetOtherSendRetMsg() );
MessageBox( strMsg , _T("信息") , MB_ICONASTERISK );
RefreshStatusAndLog();
#ifdef SUPPER_IM_MAS
}
#endif
return ;
}
send.lCount = lSendCount;
//发出指令,发送
long lSize = sizeof(REQ_Send3)+send.lMsgLen + sizeof(REQ_SendData3)*lSendCount;
if ( m_bOneToOne ) //加上每条短信的内容长度
{
for ( int i=0 ; i<lSendCount ; i++ )
{
lSize = lSize + m_pSendData[i].lMsgLen;
}
}
BYTE * pData = new BYTE[lSize];
memset(pData , 0 , lSize);
REQ_Send3 * pSendSend = (REQ_Send3 *)pData;
BYTE * pDataSend = pData + sizeof(REQ_Send3);
*pSendSend = send;
if (send.lMsgLen >0 )
{
_tcscpy((TCHAR*)pDataSend , m_szMsg);
pDataSend += send.lMsgLen;
}
for ( int i=0 ; i<lSendCount; i++ )
{
memcpy(pDataSend , &m_pSendData[i] , sizeof(REQ_SendData3 ) );
pDataSend += sizeof(REQ_SendData3);
if ( m_bOneToOne )
{
_tcscpy((TCHAR*)pDataSend , m_pMobileMsg->GetAt(i));
pDataSend += m_pSendData[i].lMsgLen;
}
}
TCHAR szBuf[128]={0};
_stprintf( szBuf , _T("短信发送列表 正在发送... %d/%d") , m_lSendIndex , lCount);
this->SetWindowText( szBuf );
//置状态,防重复提交
/*
for ( int i=0 ; i<lSendCount ; i++ ) //置状态,防重复提交
{
m_wndList.SetItemText(m_pSendData[i].lItem , 3 , _T("已提交"));
}
*/
m_pMainFrame->SendFrame( SMSFUNC_SEND3 , pData , lSize );
SetTimer( 1 , 60000 , NULL ); //超时检测,35秒发不出算超时
}
BOOL DLG_Send::ProcessSocket(Socket_Head_Add *pHead, BYTE *pFrame)
{
CString str;
if ( pHead->lFuncType == SMSFUNC_SEND3) //发送短信返回
{
KillTimer( 1 ); //不用超时检查了
ANS_Send3 * pSend = (ANS_Send3 *)pFrame;
ANS_SendData3 * pSendData = (ANS_SendData3 *)(pFrame+sizeof(ANS_Send3));
if ( pSend->lCount <= 0 )
{
if ( m_bSend )
{
OnSendStart();
}
#ifdef _UNICODE
str.Format(_T("短信提交出错,错误代码:%d。\r\n%s") , pSend->lCount,pSend->szErrMsg );
#else
str.Format(_T("短信提交出错,错误代码:%d。") , pSend->lCount );
#endif
MessageBox(str , _T("错误") , MB_ICONWARNING );
RefreshStatusAndLog();
return true;
}
if ( pSend->lRand != this->m_lSendRand || //随机数不同
pSend->lCorpID != this->m_pMainFrame->m_lCorpID ||
pSend->lUserID != this->m_pMainFrame->m_lUserID ) //非自己提交的短信,不显示
{
return true;
}
for ( int i = 0 ; i< pSend->lCount ; i ++ )
{
TCHAR szStatus[2]={0};
if ( pSendData->lItem>=0 )
{
//将结果写到列表
if ( pSendData->lStatus == SEND_STATUS_SUB_OK || pSendData->lStatus == SEND_STATUS_SUB_FILT )
{
m_wndList.SetItemText( pSendData->lItem , 3 , _T("提交成功") );
szStatus[0] = '1' ; //提交成功
m_lSendOK ++; //提交成功计数
}
else
{
m_wndList.SetItemText( pSendData->lItem , 3 , _T("提交失败") );
szStatus[0] = '2' ; //提交失败
if ( pSendData->lStatus != SEND_STATUS_SUB_NUMNOSUP ) //如果返回不是联通的号码,则不继续发送
{
CString strMsg;
switch (pSendData->lStatus)
{
case SEND_STATUS_SUB_USERNOSMS:
strMsg.Format(_T("提交短信失败,共已发送%d个号码!\r\n错误原因:你的短信可用量不足,请与系统管理员联系!\r\n%s"),m_lSendOK,GetOtherSendRetMsg() );
break;
case SEND_STATUS_SUB_CORPNOSMS:
strMsg.Format(_T("提交短信失败,共已发送%d个号码!\r\n错误原因:企业的短信可用量不足,请与系统管理员联系!\r\n%s"),m_lSendOK,GetOtherSendRetMsg() ) ;
break;
case SEND_STATUS_SUB_CORPOVRDATE:
strMsg.Format(_T("提交短信失败,共已发送%d个号码!\r\n错误原因:企业已过期,请与系统管理员联系!\r\n%s"),m_lSendOK,GetOtherSendRetMsg() ) ;
break;
case SEND_STATUS_OVERCOUNT:
strMsg.Format(_T("提交短信失败,共已发送%d个号码!\r\n错误原因:已超当天最大发送量,请与系统管理员联系!\r\n%s"),m_lSendOK,GetOtherSendRetMsg() ) ;
break;
case SEND_STATUS_NOSY:
strMsg.Format(_T("提交短信失败,共已发送%d个号码!\r\n错误原因:此帐号不支持深夜发送短信,请与系统管理员联系!\r\n%s"),m_lSendOK,GetOtherSendRetMsg() ) ;
break;
default:
#ifdef _UNICODE
strMsg.Format( _T("提交短信失败,共已发送%d个号码!\r\n错误原因:%s\r\n%s"),m_lSendOK,pSend->szErrMsg,GetOtherSendRetMsg() ) ;
#else
strMsg.Format( _T("提交短信失败,共已发送%d个号码!\r\n错误原因:原因未明,请与系统管理员联系!\r\n%s"),m_lSendOK,GetOtherSendRetMsg() ) ;
#endif
break;
}
if ( m_bSend )
{
OnSendStart();
}
MessageBox( strMsg , _T("错误") , MB_ICONWARNING );
RefreshStatusAndLog();
return true;
}
else
{
m_dwNoSupCount++; //不支持号码数量
}
}
}
else
{
if ( pSendData->lStatus == SEND_STATUS_SUB_OK || pSendData->lStatus == SEND_STATUS_SUB_FILT )
{
szStatus[0] = '1' ; //提交成功
}
else
{
szStatus[0] = '2' ; //提交失败
}
}
//将结果插入队列,由线程写入数据库
SaveItemStatus * pStatus = new SaveItemStatus;
memset(pStatus , 0 , sizeof(SaveItemStatus));
pStatus->lSendID = pSendData->lSendID;
_tcscpy(pStatus->szStatus , szStatus );
pStatus->lItemID = pSendData->lItemID;
pStatus->lStatus = pSendData->lStatus;
pStatus->lKF = pSendData->lKF;
_tcscpy(pStatus->szSendNum,pSendData->szSendNum);
_tcscpy(pStatus->szName,m_pSendData[i].szName);
_tcscpy(pStatus->szMsg,m_pMobileMsg->GetAt(i));
_tcscpy(pStatus->szMobile,m_pSendData[i].szMobile);
m_SaveItemStatus.AddTail(pStatus);
/*
//将结果写到数据库
CString str;
str.Format(_T("update smsitem set SendID=%d , Status='%s' where ItemID=%d ") , pSendData->lSendID , szStatus , pSendData->lItemID );
m_AdoRS.Open( str );
*/
/*
if ( m_B_SaveSendLog.GetCheck() )
{
CString strName = pSendData->szName;
CString strMsg = pSendData->szMsg;
strName.Replace( _T("'"),_T("''"));
strMsg.Replace( _T("'"),_T("''"));
str.Format(_T("insert into smslog (SendID,SendNum,Recver,RecvNum,Msg,Status,SubTime) values (%d,'%s','%s','%s','%s',%d,now())"),
pSendData->lSendID,pSendData->szSendNum,strName,pSendData->szMobile,strMsg,pSendData->lStatus);
m_AdoRS.Open( str );
}
*/
/* //记录发送日志
b = m_AdoRS.Open( _T("smslog") , adCmdTable );
if ( b )
{
m_AdoRS.AddNew();
m_AdoRS.PutCollect( _T("SendID") , pSendData->lSendID );
m_AdoRS.PutCollect( _T("SendNum"), pSendData->szSendNum );
m_AdoRS.PutCollect( _T("Recver") , pSendData->szName );
m_AdoRS.PutCollect( _T("RecvNum"), pSendData->szMobile);
m_AdoRS.PutCollect( _T("Msg") , pSendData->szMsg );
m_AdoRS.PutCollect( _T("Status") , pSendData->lStatus );
m_AdoRS.PutCollect( _T("SubTime") , COleDateTime::GetCurrentTime() ); //提交时间,当前
m_AdoRS.Update();
m_AdoRS.Close();
}
*/
pSendData ++; //处理下一条
}
if ( m_bSend ) //还在发送,可以发送下一条
SendNextSms();
return true;
}
if (pHead->lFuncType == SMSFUNC_PLTASKSMS_ADD)
{
KillTimer(1); //收到返回,不会超时。
ANS_PLTaskSms_Add * pSend = (ANS_PLTaskSms_Add *)pFrame;
if ( pSend->lPLTaskSmsID <= 0 )
{
if ( m_bSend )
{
OnSendStart();
}
str.Format( _T("短信任务提交出错,%s。\r\n请转到短信任务刷新验证提交是否成功。") , pSend->szErrMsg);
MessageBox(str , _T("错误") , MB_ICONWARNING );
RefreshStatusAndLog();
return true;
}
else
{
long lCount=m_wndList.GetItemCount();
for ( int i=0 ; i<lCount ; i++ )
{
m_wndList.SetItemText(i , 3 , _T("提交成功") );
}
//短信发送完成
m_lBoxType = 1 ; //因为发送完成,列表的格式为已发
List_Save(true); //保存
//str.Format( _T("update SmsBox set Status='1' where BoxID=%d") ,m_lBoxID );
//m_AdoRS.Open(str);
//m_AdoRS.Close();
if ( m_bSend )
{
OnSendStart(); //停止
}
str.Format( _T("短信任务提交完成,用时%d秒。\r\n可转到短信任务中刷新查看状态。") , (::GetTickCount()-m_dwSendStartTime)/1000 );
MessageBox( str , _T("信息") , MB_ICONASTERISK );
RefreshStatusAndLog();
}
return true;
}
return false;
}
BOOL DLG_Send::ProcessSocket(Socket_Head *pHead)
{
CString str;
if ( pHead->lFuncType == SMSFUNC_SEND2) //发送短信返回
{
KillTimer( 1 ); //不用超时检查了
ANS_Send2 * pSend = (ANS_Send2 *)pHead->pFrame;
ANS_SendData2 * pSendData = (ANS_SendData2 *)(pHead->pFrame+sizeof(ANS_Send2));
if ( pSend->lCount <= 0 )
{
if ( m_bSend )
{
OnSendStart();
}
#ifdef _UNICODE
str.Format(_T("短信提交出错,错误代码:%d。\r\n%s") , pSend->lCount,pSend->szErrMsg );
#else
str.Format(_T("短信提交出错,错误代码:%d。") , pSend->lCount );
#endif
MessageBox(str , _T("错误") , MB_ICONWARNING );
RefreshStatusAndLog();
return true;
}
if ( pSendData->lCorpID != this->m_pMainFrame->m_lCorpID ||
pSendData->lUserID != this->m_pMainFrame->m_lUserID ) //非自己提交的短信,不显示
{
return true;
}
for ( int i = 0 ; i< pSend->lCount ; i ++ )
{
TCHAR szStatus[2]={0};
if ( pSendData->lItem>=0 )
{
//将结果写到列表
if ( pSendData->lStatus == SEND_STATUS_SUB_OK || pSendData->lStatus == SEND_STATUS_SUB_FILT )
{
m_wndList.SetItemText( pSendData->lItem , 3 , _T("提交成功") );
szStatus[0] = '1' ; //提交成功
m_lSendOK ++; //提交成功计数
}
else
{
m_wndList.SetItemText( pSendData->lItem , 3 , _T("提交失败") );
szStatus[0] = '2' ; //提交失败
if ( pSendData->lStatus != SEND_STATUS_SUB_NUMNOSUP ) //如果返回不是联通的号码,则不继续发送
{
CString strMsg;
switch (pSendData->lStatus)
{
case SEND_STATUS_SUB_USERNOSMS:
strMsg.Format(_T("提交短信失败,共已发送%d条短信!\r\n错误原因:你的短信可用量不足,请与系统管理员联系!\r\n%s"),m_lSendOK,GetOtherSendRetMsg() );
break;
case SEND_STATUS_SUB_CORPNOSMS:
strMsg.Format(_T("提交短信失败,共已发送%d条短信!\r\n错误原因:企业的短信可用量不足,请与系统管理员联系!\r\n%s"),m_lSendOK,GetOtherSendRetMsg() ) ;
break;
case SEND_STATUS_SUB_CORPOVRDATE:
strMsg.Format(_T("提交短信失败,共已发送%d条短信!\r\n错误原因:企业已过期,请与系统管理员联系!\r\n%s"),m_lSendOK,GetOtherSendRetMsg() ) ;
break;
case SEND_STATUS_OVERCOUNT:
strMsg.Format(_T("提交短信失败,共已发送%d条短信!\r\n错误原因:已超当天最大发送量,请与系统管理员联系!\r\n%s"),m_lSendOK,GetOtherSendRetMsg() ) ;
break;
case SEND_STATUS_NOSY:
strMsg.Format(_T("提交短信失败,共已发送%d条短信!\r\n错误原因:此帐号不支持深夜发送短信,请与系统管理员联系!\r\n%s"),m_lSendOK,GetOtherSendRetMsg() ) ;
break;
default:
#ifdef _UNICODE
strMsg.Format( _T("提交短信失败,共已发送%d条短信!\r\n错误原因:%s\r\n%s"),m_lSendOK,pSend->szErrMsg,GetOtherSendRetMsg() ) ;
#else
strMsg.Format( _T("提交短信失败,共已发送%d条短信!\r\n错误原因:原因未明,请与系统管理员联系!\r\n%s"),m_lSendOK,GetOtherSendRetMsg() ) ;
#endif
break;
}
if ( m_bSend )
{
OnSendStart();
}
MessageBox( strMsg , _T("错误") , MB_ICONWARNING );
RefreshStatusAndLog();
return true;
}
else
{
m_dwNoSupCount++; //不支持号码数量
}
}
}
else
{
if ( pSendData->lStatus == SEND_STATUS_SUB_OK || pSendData->lStatus == SEND_STATUS_SUB_FILT )
{
szStatus[0] = '1' ; //提交成功
}
else
{
szStatus[0] = '2' ; //提交失败
}
}
//将结果插入队列,由线程写入数据库
SaveItemStatus * pStatus = new SaveItemStatus;
memset(pStatus , 0 , sizeof(SaveItemStatus));
pStatus->lSendID = pSendData->lSendID;
_tcscpy(pStatus->szStatus , szStatus );
pStatus->lItemID = pSendData->lItemID;
pStatus->lStatus = pSendData->lStatus;
_tcscpy(pStatus->szSendNum,pSendData->szSendNum);
_tcscpy(pStatus->szName,pSendData->szName);
_tcscpy(pStatus->szMsg,pSendData->szMsg);
_tcscpy(pStatus->szMobile,pSendData->szMobile);
m_SaveItemStatus.AddTail(pStatus);
/*
//将结果写到数据库
CString str;
str.Format(_T("update smsitem set SendID=%d , Status='%s' where ItemID=%d ") , pSendData->lSendID , szStatus , pSendData->lItemID );
m_AdoRS.Open( str );
*/
/*
if ( m_B_SaveSendLog.GetCheck() )
{
CString strName = pSendData->szName;
CString strMsg = pSendData->szMsg;
strName.Replace( _T("'"),_T("''"));
strMsg.Replace( _T("'"),_T("''"));
str.Format(_T("insert into smslog (SendID,SendNum,Recver,RecvNum,Msg,Status,SubTime) values (%d,'%s','%s','%s','%s',%d,now())"),
pSendData->lSendID,pSendData->szSendNum,strName,pSendData->szMobile,strMsg,pSendData->lStatus);
m_AdoRS.Open( str );
}
*/
/* //记录发送日志
b = m_AdoRS.Open( _T("smslog") , adCmdTable );
if ( b )
{
m_AdoRS.AddNew();
m_AdoRS.PutCollect( _T("SendID") , pSendData->lSendID );
m_AdoRS.PutCollect( _T("SendNum"), pSendData->szSendNum );
m_AdoRS.PutCollect( _T("Recver") , pSendData->szName );
m_AdoRS.PutCollect( _T("RecvNum"), pSendData->szMobile);
m_AdoRS.PutCollect( _T("Msg") , pSendData->szMsg );
m_AdoRS.PutCollect( _T("Status") , pSendData->lStatus );
m_AdoRS.PutCollect( _T("SubTime") , COleDateTime::GetCurrentTime() ); //提交时间,当前
m_AdoRS.Update();
m_AdoRS.Close();
}
*/
pSendData ++; //处理下一条
}
if ( m_bSend ) //还在发送,可以发送下一条
SendNextSms();
return true;
}
return false;
}
void DLG_Send::OnTimer(UINT_PTR nIDEvent)
{
CDialog::OnTimer(nIDEvent);
if ( nIDEvent == 1 )
{
KillTimer( 1 );
if ( m_bSend )
{
OnSendStart();
if ( m_pMainFrame->m_Setup.bAutoReSend ) //如果设置了自动重发,则重新发送多一次
{
TCHAR szBuf[128]={0};
_stprintf( szBuf , _T("短信发送列表 提交超时,准备重发!"));
this->SetWindowText( szBuf );
Sleep(2000);
OnSendStart();
}
else
{
MessageBox( _T("提交短信超时,请检查网络连接!") , _T("错误") , MB_ICONWARNING );
}
return ;
}
}
if ( nIDEvent == 2 )
{
KillTimer(nIDEvent);
#ifdef SUPPER_IM_MAS
if ( Mas_Enable() ) //是否启用Mas
{
Mas_Init();
}
#endif
return;
}
if ( nIDEvent == 10 )
{
KillTimer(nIDEvent);
SendNextSms();
#ifdef SUPPER_IM_MAS
if ( Mas_Enable() ) //是否启用Mas
{
::AfxBeginThread((AFX_THREADPROC)Mas_SendT,(LPVOID)this,/*THREAD_PRIORITY_LOWEST*/THREAD_PRIORITY_BELOW_NORMAL);
}
#endif
return ;
}
}
BOOL DLG_Send::bFilt(const TCHAR *pMsg,long lCount2)
{
if ( !_tcscmp(m_szMsg,m_szMsgEndFilt) ) //两次审核的短信相同,不用再次审核了
{
m_bFilt = true;
return true;
}
BOOL bFilt = false;
BOOL bSDisable = false;
CString str = pMsg;
CString str2;
long lLen = _tcslen( pMsg );
TCHAR szWord[30]={0};
TCHAR szByte[8]={0};
long lCount = m_wndList.GetItemCount();
if ( lCount2>=0 )
lCount = lCount2;
for ( int i = 0 ; i< m_pMainFrame->m_lFiltCount; i++ )
{
if ( m_pMainFrame->m_pFilt[i].lFiltBegin <= lCount && _tcslen(m_pMainFrame->m_pFilt[i].szWord)>0 ) //大于起始点的才开始计算过滤
{
_tcscpy( szWord , m_pMainFrame->m_pFilt[i].szWord );
if ( m_pMainFrame->m_pFilt[i].szFilt[0] == '0' )
{
//精确过滤
//bFilt = FoundChar( pMsg , szWord , lLen );
//bFilt = FoundChar( pMsg , m_pMainFrame->m_pFilt[i].szWord , lLen );
if ( str.Find(szWord)>=0 )
{
bFilt = true;
if ( m_bNoSupperWord ) //已提示有不支持的关键字,如果继续发,则敏感字不检查这些内容
{
if ( bNoSupperWord(szWord,str2) )
{
bFilt = false; //不当作关键字
}
}
}
}
else
{
//模糊过滤
long lSplit=1;
long lSplitCount=0;
bFilt = true;
memset( szByte , 0 , sizeof(szByte) );
while(GetSpiltUnicodeMsg( szWord , szByte , lSplit , 1 , lSplitCount ))
{
//if ( !FoundChar( pMsg , szByte, lLen ) )
if ( str.Find(szByte)<0 )
{
bFilt = false;
break;
}
memset( szByte , 0 , sizeof(szByte) );
lSplit++;
}
}
}
if ( bFilt ) //有需要过滤的
{
bSDisable = m_pMainFrame->m_pFilt[i].bSDisable; //是否为发即死
break;
}
}
m_bFilt = bFilt; //记录此信息是否含有过滤关键字
m_strFiltWord = szWord;
if ( m_bShowFiltWarning && bFilt)
{
if ( m_bShowFiltFirst ) //第一次出现此信息,通知后台管理员
{
m_bShowFiltFirst = false;
if (bSDisable || !m_B_Task.GetCheck() ) //任务模式上传任务完成后再通知
{
_tcscpy(m_szMsgEndFilt,m_szMsg);
REQ_FiltWarning * pWarning = new REQ_FiltWarning;
memset(pWarning , 0 , sizeof(REQ_FiltWarning));
pWarning->lCorpID = m_pMainFrame->m_lCorpID;
pWarning->lUserID = m_pMainFrame->m_lUserID;
pWarning->bSDisable= bSDisable; //是否为发即死
memcpy( pWarning->szLoginName , m_pMainFrame->m_pCurUser->szUser,15);
pWarning->lSendCount=lCount; //发送数据
memcpy(pWarning->szMsg,pMsg,sizeof(TCHAR)*500);
//_tcscpy(pWarning->szMsg , pMsg );
_tcscpy(pWarning->szFilt , szWord );
pWarning->lTask = m_B_Task.GetCheck();
m_pMainFrame->SendFrame( SMSFUNC_FILTWARNING , (BYTE*)pWarning , sizeof(REQ_FiltWarning) );
}
if ( bSDisable )
{
MessageBox( _T("由于你发送了重点禁用关键字,你的帐号暂时已被禁用,请与管理员联系!"),_T("错误"),MB_ICONWARNING);
Sleep(500);
m_pMainFrame->PostMessage( WM_CLOSE ,0,0); //自动关闭
return false;
}
}
m_bShowFiltWarning = false;//继续提交,下次不再警告
/*
DLG_FiltWarning dlg(this);
dlg.SetParam( pMsg , szWord );
dlg.DoModal();
if ( dlg.GetParam() != 0 )
{
if ( dlg.GetParam() == 2 ) //继续提交,下次不再警告
m_bShowFiltWarning = false;
return true;
}
else
{
return false;
}
*/
}
return true;
}
BOOL DLG_Send::bNoSupperWord(TCHAR *pMsg,CString & strWord)
{
BOOL bFilt = false;
CString str = pMsg;
for ( int i = 0 ; i< m_pMainFrame->m_lNoSupperWordCount; i++ )
{
if ( str.Find(m_pMainFrame->m_pNoSupperWord[i].szWord)>=0 )
{
strWord = m_pMainFrame->m_pNoSupperWord[i].szWord;
bFilt = true;
break;
}
}
return bFilt;
}
void DLG_Send::List_SetMsg(TCHAR *pMsg)
{
m_E_Msg.SetWindowText( pMsg );
RefreshTJ(); //刷新显示字数
}
void DLG_Send::OnKeydownSendList(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
*pResult = 0;
if ( pLVKeyDow->wVKey == VK_DELETE )
{
On_User_Del();
}
if ( pLVKeyDow->wVKey == VK_INSERT)
{
On_User_Add();
}
if ( pLVKeyDow->wVKey == VK_SPACE)
{
On_User_Modify();
}
if ( pLVKeyDow->wVKey == 'S' || pLVKeyDow->wVKey == 's')
{
On_User_Status();
}
if ( pLVKeyDow->wVKey == 'R' || pLVKeyDow->wVKey == 'r')
{
On_User_Status();
}
if ( pLVKeyDow->wVKey == 'C' || pLVKeyDow->wVKey == 'c')
{
On_User_Clear();
}
if ( pLVKeyDow->wVKey == 'I' || pLVKeyDow->wVKey == 'i')
{
On_User_Inport();
}
if ( pLVKeyDow->wVKey == 'E' || pLVKeyDow->wVKey == 'e')
{
On_User_Export();
}
if ( pLVKeyDow->wVKey == 'A' || pLVKeyDow->wVKey == 'a')
{
m_wndList.SetItemState(-1, LVIS_SELECTED, LVIS_SELECTED); //全选
//m_wndList.SelectAllItems();
}
}
void DLG_Send::RefreshStatusAndLog()
{
//再次点击此类项目后刷新
m_pMainFrame->m_pBaseView->m_dlgSmsDF.m_bRefresh = false;
m_pMainFrame->m_pBaseView->m_dlgSmsYF.m_bRefresh = false;
m_pMainFrame->m_pBaseView->m_dlgSmsLog.m_bRefresh = false;
/*
//发送完成,需要刷新列表
m_pMainFrame->m_pBaseView->m_dlgSmsDF.RefreshInfo();//待发
m_pMainFrame->m_pBaseView->m_dlgSmsYF.RefreshInfo();//已发
//发送完成,刷新状态
m_pMainFrame->m_pBaseView->m_dlgSmsLog.RefreshInfo(); //发送日志
*/
}
void DLG_Send::RefreshListCount()
{
long lCount = m_wndList.GetItemCount();
CString strMsg;
strMsg.Format( _T("发送列表 共有%d条记录") , lCount );
m_S_ListCount.SetWindowText( strMsg );
}
void DLG_Send::OnSendDy()
{
DLG_SmsDY dlg(this);
dlg.SetParam( &m_AdoRS );
if ( dlg.DoModal() == IDOK )
{
this->AddLoveToMsg( (TCHAR*)(LPCTSTR)dlg.m_strDY );
/*
m_E_Msg.SetWindowText(dlg.m_strDY);
m_E_Msg.SetSel(m_E_Msg.GetWindowTextLength(),m_E_Msg.GetWindowTextLength());
if ( m_pMainFrame->m_Ans_Login.bCM ) //启用签名
{
//this->AddLoveToMsg( _T("\r\n") );
this->AddLoveToMsg( m_pMainFrame->m_Ans_Login.szCM );
}
*/
this->OnChangeSendMsg();
}
}
BOOL DLG_Send::isBack(const TCHAR *pMobile)
{
BOOL bBack = false;
for ( int i=0;i<m_pMainFrame->m_lBackCount;i++ )
{
if ( !_tcscmp(m_pMainFrame->m_pBack[i].szMobile , pMobile ) )
{
bBack = true;
break;
}
}
return bBack;
}
void DLG_Send::SetListSR(BOOL bSendSR)
{
//生日祝福专用
m_bSendSR = bSendSR;
if ( m_bSendSR )
{
m_D_Date.ShowWindow(SW_HIDE);
SYSTEMTIME t;::GetLocalTime(&t);
//为生日祝福发送标志
t.wYear = 1979;
t.wMonth=7;
t.wDay = 31;
t.wHour= 10;
t.wMinute=0;
t.wSecond=0;
t.wMilliseconds=0;
DateTime_SetSystemtime( m_D_Date.m_hWnd , GDT_VALID , &t );
DateTime_SetSystemtime( m_D_Time.m_hWnd , GDT_VALID , &t );
m_B_DS.SetCheck(true);
m_D_Time.EnableWindow(true);
}
else
{
m_D_Date.ShowWindow(SW_SHOW);
}
}
void DLG_Send::OnSendGetmsg()
{
DLG_Setup_SZGJ_GetMsg dlg(this);
dlg.SetParam( this->m_pMainFrame->m_Setup );
if ( dlg.DoModal() == IDOK )
{
m_E_Msg.SetWindowText(dlg.m_strMsg);
m_E_Msg.SetSel(m_E_Msg.GetWindowTextLength(),m_E_Msg.GetWindowTextLength());
if ( m_pMainFrame->m_Ans_Login.bCM ) //启用签名
{
// this->AddLoveToMsg( _T("\r\n") );
this->AddLoveToMsg( m_pMainFrame->m_Ans_Login.szCM );
}
this->OnChangeSendMsg();
}
}
void DLG_Send::CloseAutoSave(void)
{
m_bInit = false;
}
UINT DLG_Send::AutoSaveLog(void *pParam)
{
DLG_Send * pDlg = (DLG_Send *)pParam;
CString str;
try
{
while( pDlg->m_bInit )
{
//取队列中的内容并且开发处理
while ( pDlg->m_bInit && !pDlg->m_SaveItemStatus.IsEmpty() )
{
SaveItemStatus * pData = pDlg->m_SaveItemStatus.GetHead();
str.Format(_T("update smsitem set SendID=%d , Status='%s' where ItemID=%d ") , pData->lSendID , pData->szStatus , pData->lItemID );
pDlg->m_AdoRS2.Open( str );
if ( pDlg->m_B_SaveSendLog.GetCheck() )
{
CString strName = pData->szName;
CString strMsg = pData->szMsg;
//if ( pDlg->m_B_LongSms.GetCheck() ) //长短信
// strMsg = pData->szMsg+_tcslen(_T("长信4C11:"));
strName.Replace( _T("'"),_T("''"));
strMsg.Replace( _T("'"),_T("''"));
str.Format(_T("insert into smslog (SendID,SendNum,Recver,RecvNum,Msg,Status,SubTime,KF) values (%d,'%s','%s','%s','%s',%d,now(),%d)"),
pData->lSendID,pData->szSendNum,strName,pData->szMobile,strMsg,pData->lStatus,pData->lKF);
pDlg->m_AdoRS2.Open( str );
}
pDlg->m_SaveItemStatus.RemoveHead();
delete pData;
Sleep(2);
}
Sleep(50);
}
//清除队列中的内容
while (pDlg->m_bInit && !pDlg->m_SaveItemStatus.IsEmpty())
{
SaveItemStatus * pData = pDlg->m_SaveItemStatus.GetHead();
pDlg->m_SaveItemStatus.RemoveHead();
delete pData;
}
}
catch(...)
{
return 0;
}
return 1;
}
void DLG_Send::OnDestroy()
{
m_bInit = false;
#ifdef SUPPER_IM_MAS
m_Mas_Init = false;
#endif
Sleep(200);
#ifdef SUPPER_IM_MAS
if ( m_Mas_Lib )
{
(*m_Mas_release)(); //释放接口
FreeLibrary(m_Mas_Lib);
m_Mas_Lib = NULL;
}
#endif
if ( m_pMobileMsg ) //手机号码的分段
{
delete m_pMobileMsg;
m_pMobileMsg = NULL;
}
if ( m_pSendData )
{
delete m_pSendData;
m_pSendData = NULL;
}
CDialog::OnDestroy();
// TODO: Add your message handler code here
}
UINT DLG_Send::AutoSaveItem(void *pParam)
{
DLG_Send * pDlg = (DLG_Send *)pParam;
CString str;
try
{
//将Item添中取BoxItem
BOOL b = pDlg->m_AdoRS3.Open( _T("smsitem") , adCmdTable );
if ( b )
{
long lCount = pDlg->m_wndList.GetItemCount();
Send_User user;
for ( int i = 0 ; i< lCount && pDlg->m_bInit ; i++ )
{
user = pDlg->GetUser(i);
pDlg->m_AdoRS3.AddNew();
pDlg->m_AdoRS3.PutCollect( _T("BoxID") , pDlg->m_lBoxID );
pDlg->m_AdoRS3.PutCollect( _T("GroupID") , user.szGroup );
pDlg->m_AdoRS3.PutCollect( _T("Name") , user.szName );
pDlg->m_AdoRS3.PutCollect( _T("NikeName") , user.szNickName );
pDlg->m_AdoRS3.PutCollect( _T("Mobile") , user.szMobile );
pDlg->m_AdoRS3.PutCollect( _T("BZ") , user.szBZ );
pDlg->m_AdoRS3.PutCollect( _T("Status") , user.szStatus );
//m_AdoRS.PutCollect( _T("SendID") , user.lSendID );
pDlg->m_AdoRS3.Update();
pDlg->m_AdoRS3.GetCollect( _T("ItemID") , user.lItemID ); //取新的ItemId
pDlg->m_wndList.SetItemData( i , user.lItemID ); //设置新的ItemID;
}
pDlg->m_AdoRS3.Close();
}
if ( pDlg->m_bInit )
{
//因为保存了新内容,所以要刷新显示列表
if ( pDlg->m_lBoxType == 0 )
pDlg->m_pMainFrame->m_pBaseView->m_dlgSmsDF.RefreshInfo();//待发
else
pDlg->m_pMainFrame->m_pBaseView->m_dlgSmsYF.RefreshInfo();//已发
}
pDlg->m_bSaveList = false;
}
catch(...)
{
return 0;
}
return 1;
}
void DLG_Send::OnSendLongsms()
{
if ( m_B_LongSms.GetCheck() )
{
/*
//2025.02.27,不需要再询问长短信的情况
int iRet = MessageBox(_T("将要设置以长短信方式发送短信,长短信有以下特点:\r\n1、分开多条发送的短信在手机屏幕上显示的是一整条。\r\n2、每条拆分的短信比普通短信支持的最大字数少3-4个字。\r\n3、长短信是拆分发送再由手机端组合某些手机可能无法接收或无法显示长短信。\r\n4、长短信仍会按实际拆分条数进行扣费。\r\n是否继续以长短信方式发送"),_T("提问") , MB_ICONQUESTION|MB_YESNO);
if ( iRet!= IDYES )
{
m_B_LongSms.SetCheck(false);
}
else
{
m_B_FD.SetCheck(false);
}
*/
m_B_FD.SetCheck(false);
}
RefreshTJ();
}
BOOL DLG_Send::isSendingSms()
{
return m_bSend;
}
CString DLG_Send::GetOtherSendRetMsg()
{
CString str=_T("\r\n\r\n其中:");
CString strTemp;
BOOL bFirst=true;
if (m_dwBackCount>0 )
{
if ( !bFirst )
{
str += _T("   ");
}
else
{
bFirst = false;
}
strTemp.Format( _T("黑名单数量:%d\r\n") , m_dwBackCount );
str += strTemp;
}
if (m_dwNoSupCount>0 )
{
if ( !bFirst )
{
str += _T("   ");
}
else
{
bFirst = false;
}
strTemp.Format( _T("不支持数量:%d\r\n") , m_dwNoSupCount );
str += strTemp;
}
if (m_dwNoMsgCount>0 )
{
if ( !bFirst )
{
str += _T("   ");
}
else
{
bFirst = false;
}
strTemp.Format( _T("内容空数量:%d\r\n") , m_dwNoMsgCount );
str += strTemp;
}
if ( bFirst ) //没有任何数据
str = _T("");
return str;
}
void DLG_Send::OnSendNew2()
{
if ( m_lBoxID<=0 )
return ;
CString strTemp = _T("你选择的是\"重新发送\",本任务中所有短信将会被再次重新发送!\r\n") \
_T("是否继续?");
int iRet = MessageBox( strTemp,_T("提问") , MB_ICONQUESTION|MB_YESNO );
if ( iRet != IDYES )
return ;
List_ReSend( m_lBoxID );
}
void DLG_Send::OnSendFd()
{
if ( m_B_FD.GetCheck() )
{
int iRet = MessageBox(_T("将要设置加入分段标志,加入分段标志有以下特点:\r\n1、分开多条发送的短信自动在前面添加分段标志1/2、2/2...。\r\n2、添加分段标志后每条短信内容最大长度缩短4个字。\r\n3、添加分段标志后仍是按实际拆分条数进行扣费。\r\n是否继续以添加分段标志方式发送?"),_T("提问") , MB_ICONQUESTION|MB_YESNO);
if ( iRet!= IDYES )
{
m_B_FD.SetCheck(false);
}
else
{
m_B_LongSms.SetCheck(false);
}
}
RefreshTJ();
}
BOOL DLG_Send::Mas_Enable()
{
#ifdef SUPPER_IM_MAS
return this->m_pMainFrame->m_Setup.Mas_Enable;
#else
return false;
#endif
}
BOOL DLG_Send::Mas_Init()
{
#ifdef SUPPER_IM_MAS
if ( m_Mas_Init ) //已初始化
return m_Mas_Init;
CString str;
//装入函数
m_Mas_Lib=LoadLibrary( _T("ImApi.dll") );
if (!m_Mas_Lib)
{
MessageBox( _T("Mas装入动态库ImApi.dll失败无法继续发送"),_T("错误"),MB_ICONWARNING );
return false;
}
m_Mas_initWithDB = (MAS_initWithDB)GetProcAddress( m_Mas_Lib , "initWithDB" );
m_Mas_release = (MAS_release)GetProcAddress( m_Mas_Lib , "release" );
m_Mas_sendSMAdvTime= (MAS_sendSMAdvTime)GetProcAddress( m_Mas_Lib , "sendSMAdvTime" );
m_Mas_receiveSM = (MAS_receiveSM)GetProcAddress( m_Mas_Lib , "receiveSM" );
m_Mas_receiveRPT = (MAS_receiveRPT)GetProcAddress( m_Mas_Lib , "receiveRPT" );
if ( !m_Mas_initWithDB || !m_Mas_release || !m_Mas_sendSMAdvTime || !m_Mas_receiveSM || !m_Mas_receiveRPT )
{
FreeLibrary(m_Mas_Lib);
m_Mas_Lib = NULL;
MessageBox( _T("Mas导出ImApi.dll函数失败无法继续发送"),_T("错误"),MB_ICONWARNING );
return false;
}
//初始化
CStringA IP = CW2A(m_pMainFrame->m_Setup.Mas_IP);
CStringA User = CW2A(m_pMainFrame->m_Setup.Mas_User);
CStringA Passwd = CW2A(m_pMainFrame->m_Setup.Mas_Passwd);
CStringA DBName = CW2A(m_pMainFrame->m_Setup.Mas_DBName);
CStringA Code = CW2A(m_pMainFrame->m_Setup.Mas_Code);
int nResult = (*m_Mas_initWithDB)(IP, User, Passwd,DBName,Code);
if(nResult != 0)
{
FreeLibrary(m_Mas_Lib);
m_Mas_Lib = NULL;
str.Format( _T("Mas初始化失败错误代码%d无法继续发送") , nResult);
MessageBox(str,_T("错误"),MB_ICONWARNING );
return false;
}
//初始化号段表
//取得共用参数
//连接到号段表
TCHAR szPath[512]={0};
m_pMainFrame->GetCurrentPath( szPath );
_tcscat( szPath , _T("SMSData.dat") ); //数据库文件名
//解密码
char szPasswd[64]={0};strcpy(szPasswd , ACCESS_PASSWD );
char szKey[64]={0};strcpy( szKey , ACCESS_KEY );
char szNew2[64]={0};long lOut=sizeof(szNew2);
TCHAR szNew[64]={0};
CDes des;
des.Decrypt( szPasswd , strlen(szPasswd),szNew2,lOut,szKey,8);
#ifdef UNICODE
_tcscpy(szNew,CA2W(szNew2));
#else
strcpy(szNew,szNew2);
#endif
if ( !m_HDadoConnection.ConnectAccess(szPath,szNew ) ) //连接数据库错误,需要重新创建
{
MessageBox( _T("系统文件丢失6请重新安装!") , _T("致命错误") , MB_ICONWARNING );
return false;
}
m_HDAdoRS.SetAdoConnection( &m_HDadoConnection ); //设置连接
m_Mas_Init = true;
//启用接收短信
::AfxBeginThread((AFX_THREADPROC)Mas_RecvT,(LPVOID)this,/*THREAD_PRIORITY_LOWEST*/THREAD_PRIORITY_BELOW_NORMAL);
return m_Mas_Init;
#else
return false;
#endif
}
UINT DLG_Send::Mas_SendT(void *pParam)
{
#ifdef SUPPER_IM_MAS
DLG_Send * pDlg = (DLG_Send *)pParam;
CString str;
try
{
long lCount = pDlg->m_wndList.GetItemCount();
long lMaxMsgLen = pDlg->m_pMainFrame->m_Setup.Mas_MaxLen; //取允许的最大字符数
BOOL bLongSms = pDlg->m_B_LongSms.GetCheck();
for ( int i=0 ; i<lCount && pDlg->m_bSend ; i++ )
{
Send_User user = pDlg->GetUser(i,true);
if ( user.szStatus[0] != '1' && pDlg->Mas_MobileIsSend(user.szMobile) ) //未发送成功的,是重庆地区的号码
{
CString strCM;
BOOL bCMFirst = pDlg->m_pMainFrame->GetQJCM(strCM);
//找到应发送的记录,开始发送
TCHAR szSendMsg2[1024]={0};
CString csTemp(pDlg->m_szMsg);
//if ( _tcsncmp(user.szName,_T("IP"),2) ) //名称不是以IP开头,因为IP开头的自动导入的用户姓名
// csTemp.Replace( _T("\"%Name%\"") , user.szName ); //替换姓名
//else
// csTemp.Replace( _T("\"%Name%\"") , _T("") ); //替换姓名
csTemp.Replace( _T("\"%Name%\"") , user.szName ); //替换姓名
csTemp.Replace( _T("\"%NickName%\"") , user.szNickName ); //替换昵称
csTemp.Replace( _T("\"%Memo%\"") , user.szBZ ); //替换备注
char szFalsh[8]={0};
szFalsh[0] = 01;
//csTemp.Replace( _T("\"%^%\"") , szFalsh ); //替换闪烁符
csTemp.Replace( strCM , _T("") ); //删除短信中原有的强制签名,重新生成过
_tcscpy( szSendMsg2 , (LPCTSTR)csTemp ); //取得当前发送内容
/*
if ( !m_bFiltOver && !bFilt( szSendMsg ) ) //过滤信息
{
if ( m_bSend )
{
OnSendStart(); //停止
}
return ;
}
//看是否为黑名单
if ( isBack(user.szMobile) )
{
m_wndList.SetItemText( m_lSendIndex , 3 , _T("提交失败") );
m_dwBackCount++; //黑名单数量
continue;
}
*/
SYSTEMTIME tTimer=pDlg->m_tTimer;
//计算生日定时短信
if ( pDlg->m_bSendSR )
{
SYSTEMTIME t;::GetSystemTime(&t);
tTimer.wYear = t.wYear;
tTimer.wMonth = _ttol(user.szBZ);
tTimer.wDay = _ttol(user.szBZ+3);
//判断生日是否已过,如果已过,下年再提醒
long lNow=t.wMonth*100+t.wDay;
long lSR =tTimer.wMonth*100+tTimer.wDay;
if ( lSR<lNow )
tTimer.wYear=tTimer.wYear+1;
}
//分隔信息
TCHAR szSendMsg[1024];
long lMsgAll=0;
long lMsgIndex = 1;
//以下计算分段标志相关信息"1/2:"
BOOL bFD=false;
BOOL bYDFD=false;
BOOL bXLTFD=false;
long lFDYDLen = lMaxMsgLen-4;
long lFDXLTLen= lMaxMsgLen-12-4;
if ( pDlg->m_B_FD.GetCheck() ) //选择了强制加入分段标志
{
long lFDMsgLen = UCS2Len_2(szSendMsg2);
if ( lFDMsgLen>lMaxMsgLen)
bYDFD = true;
if ( lFDMsgLen>(lMaxMsgLen-12))
bXLTFD = true;
}
if ( !bYDFD && bLongSms ) //如果选择了长短信可以发1500个字
{
lFDYDLen = 1500;
lFDXLTLen= 1500;
lMaxMsgLen=1500;
}
BOOL bGetMsg;
while ( true )
{
memset( szSendMsg , 0 , sizeof(szSendMsg) );
if (!_tcsncmp(user.szMobile, _T("12"), 2) ||
!_tcsncmp( user.szMobile , _T("13") , 2 ) ||
!_tcsncmp( user.szMobile , _T("15") , 2 ) ||
!_tcsncmp( user.szMobile , _T("14") , 2 ) ||
!_tcsncmp( user.szMobile , _T("16") , 2 ) ||
!_tcsncmp( user.szMobile , _T("17") , 2 ) ||
!_tcsncmp( user.szMobile , _T("18") , 2 ) ||
!_tcsncmp( user.szMobile , _T("19") , 2 ))
{
//手机号码可以支持70个汉字
if ( bYDFD )
{
bGetMsg = GetSpiltUnicodeMsg( szSendMsg2 , szSendMsg , lMsgIndex , lFDYDLen ,lMsgAll);
bFD = true;
}
else
{
bGetMsg = GetSpiltUnicodeMsg( szSendMsg2 , szSendMsg , lMsgIndex , lMaxMsgLen ,lMsgAll);
}
}
else
{
//小灵通手机号码可以支持58个汉字
if ( bXLTFD )
{
bGetMsg = GetSpiltUnicodeMsg( szSendMsg2 , szSendMsg , lMsgIndex , lFDXLTLen ,lMsgAll);
bFD = true;
}
else
{
bGetMsg = GetSpiltUnicodeMsg( szSendMsg2 , szSendMsg , lMsgIndex , lMaxMsgLen-12 ,lMsgAll);
}
}
if ( bGetMsg ) //能取到信息,发送
{
CString strSendNowMsg;
if ( !pDlg->m_pMainFrame->m_Setup.Mas_CM )
{
strCM = _T(""); //已设置无需要引入短信签名
}
if ( bFD )
{
strSendNowMsg.Format(_T("%d/%d:%s%s") ,lMsgIndex,lMsgAll,szSendMsg,strCM);
}
else
{
if ( bCMFirst )
strSendNowMsg.Format(_T("%s%s") , strCM,szSendMsg);
else
strSendNowMsg.Format(_T("%s%s") , szSendMsg,strCM);
}
CString strSendTime=_T("");
if ( COleDateTime(tTimer).GetStatus() == COleDateTime::valid )
strSendTime.Format(_T("%04d-%02d-%02d %02d:%02d:%02d"),tTimer.wYear,tTimer.wMonth,tTimer.wDay,tTimer.wHour,tTimer.wMinute,tTimer.wSecond );
//计算mas发送短信时的SmID
pDlg->m_lMasAllSendCount ++;
SYSTEMTIME tsm;GetLocalTime(&tsm);
long lSmID=(tsm.wDay%10)*10000000+tsm.wHour*100000+tsm.wMinute*1000+pDlg->m_lMasAllSendCount; //日+时+分+序号
long lSrcID=0;
CStringA Mobile = CW2A(user.szMobile);
CStringA Msg = CW2A(strSendNowMsg);
CStringA Time = CW2A(strSendTime);
int iRet = (*pDlg->m_Mas_sendSMAdvTime)(Mobile, Msg,Time, lSmID,lSrcID);
//int iRet = sendSMAdvTime(user.szMobile, strSendNowMsg,strSendTime, user.lItemID,lSrcID);
if ( iRet!=0 )
{
pDlg->m_pMainFrame->SaveSetup(); //保存计数
pDlg->OnSendStart(); //先停止发送
str.Format( _T("Mas发送短信出错错误代码%d") , iRet );
pDlg->MessageBox(str , _T("错误") ,MB_ICONWARNING );
pDlg->RefreshStatusAndLog();
return 0;
}
//保存到日志中
SaveItemStatus * pStatus = new SaveItemStatus;
memset(pStatus , 0 , sizeof(SaveItemStatus));
pStatus->lSendID = lSmID;
pStatus->lItemID = user.lItemID;
pDlg->m_wndList.SetItemText( i , 3 , _T("发送成功") );
_tcscpy(pStatus->szStatus , _T("1") );
pStatus->lStatus = 10; //提交成功
_tcscpy(pStatus->szSendNum,_T(""));
_tcscpy(pStatus->szName,user.szName);
if ( bLongSms ) //只记录前面70个字
{
lMsgIndex=1;
GetSpiltUnicodeMsg((TCHAR*)(const TCHAR*)strSendNowMsg , szSendMsg , lMsgIndex , 70 ,lMsgAll);
_tcscpy(pStatus->szMsg , _T("长信0000:"));
_tcscpy(pStatus->szMsg+_tcslen(_T("长信0000:")),szSendMsg);
}
else
{
_tcscpy(pStatus->szMsg,strSendNowMsg);
}
_tcscpy(pStatus->szMobile,user.szMobile);
pDlg->m_SaveItemStatus.AddTail(pStatus);
pDlg->m_pMainFrame->m_Setup.Mas_Count++; //记录号加1
if ( pDlg->m_pMainFrame->m_Setup.Mas_Count % 200 ==0 ) //第200条保存一次
{
pDlg->m_pMainFrame->SaveSetup();
}
pDlg->m_Mas_SendOK ++; //记录号加1
lMsgIndex ++; //分隔加1
}
else
{
if ( lMsgAll<=0 ) //没有短信内容
{
pDlg->m_dwNoMsgCount++; //没内容数量
}
break;
}
}
Sleep(10);
}
}
pDlg->m_pMainFrame->SaveSetup(); //保存计数
pDlg->m_Mas_MasEnd = true;
if ( pDlg->m_Mas_MobsetEnd ) //短信易的已发送完成
{
//短信发送完成
pDlg->m_lBoxType = 1 ; //因为发送完成,列表的格式为已发
pDlg->List_Save(true); //保存
if ( pDlg->m_bSend )
{
pDlg->OnSendStart(); //停止
}
CString strMsg;
strMsg.Format( _T("短信发送完成,成功提交%d个号码!用时%d秒。%s") , pDlg->m_lSendOK+pDlg->m_Mas_SendOK,(::GetTickCount()-pDlg->m_dwSendStartTime)/1000,pDlg->GetOtherSendRetMsg() );
pDlg->MessageBox( strMsg , _T("信息") , MB_ICONASTERISK );
pDlg->RefreshStatusAndLog();
}
return 0;
}
catch(...)
{
return 0;
}
#endif
return 1;
}
BOOL DLG_Send::Mas_MobileIsSend(CString strMobile)
{
#ifdef SUPPER_IM_MAS
if ( !Mas_Enable() )
return false;
// if ( !Mas_Init() )
// return false;
if ( m_pMainFrame->m_Setup.Mas_MaxSend>0 && m_pMainFrame->m_Setup.Mas_Count>=m_pMainFrame->m_Setup.Mas_MaxSend)
{
//超出当月发送量了暂停mas发送。
return false;
}
CString str;
if ( !m_pMainFrame->m_Setup.Mas_WW )
{
str = strMobile.Left(2);
if (str == _T("12") || str == _T("13") || str==_T("15") || str==_T("14") ||str==_T("16") ||str==_T("17") || str==_T("18") || str==_T("19") )
{
str = strMobile.Left(3);
if ( str==_T("130") || str==_T("131") || str==_T("132") || str==_T("133")|| str==_T("153") || str==_T("155") || str==_T("156") || str==_T("189") || str==_T("186") || str==_T("180") )
{
return false;
}
}
else
{
return false;
}
}
if ( m_pMainFrame->m_Setup.Mas_Prov==1 ) //仅发送广东地区的号码
{
if ( strMobile.Left(1)==CString(_T("0")) )
{
for ( int i=3 ; i<5 ; i++ )
{
str.Format(_T("select * from HDB_XLT where Code='%s' and Prov='广东' ") , strMobile.Left(i));
if ( m_HDAdoRS.Open(str) && !m_HDAdoRS.IsEOF() )
{
return true;
}
}
}
else
{
str.Format( _T("select * from HDB where Head='%s' and Province='广东'") , strMobile.Left(7) );
if ( m_HDAdoRS.Open(str) && !m_HDAdoRS.IsEOF() )
{
return true;
}
}
return false;
}
else
{
return true; //mas发送全国移动号码
}
#else
return false;
#endif
return false;
}
UINT DLG_Send::Mas_RecvT(void *pParam)
{
#ifdef SUPPER_IM_MAS
DLG_Send * pDlg = (DLG_Send *)pParam;
CString str;
try
{
while ( pDlg->m_Mas_Init )
{
if ( !pDlg->m_bSend ) //在发送过程中不收短信
{
//接收短信
MOItem moBody[1];
memset(&moBody, 0, sizeof(moBody));
//nCount = receiveSMAdv(moBody, -1, -1);
int nCount = (* pDlg->m_Mas_receiveSM)(moBody, 1);
if ( nCount > 0)
{
ANS_RecvData2 sms={0};
_tcscpy( sms.szSendNum , CA2W(moBody[0].mobile) );
_tcscpy( sms.szRecvNum , _T("Mas") );
_tcscpy( sms.szMsg , CA2W(moBody[0].smContent) );
::GetLocalTime(&sms.tRecv);
ExMobileGZM(sms.szSendNum);
pDlg->m_pMainFrame->m_pBaseView->m_dlgSmsJS.RecvNewSms(sms,false); //收到新的信息;
Sleep(500);
}
//接收状态报告
RptItem rptBody[5];
memset(&rptBody, 0, sizeof(rptBody));
//nCount = receiveRPTAdv(rptBody, -1, -1);
nCount = (* pDlg->m_Mas_receiveRPT)(rptBody, 5);
if ( nCount > 0)
{
for ( int j=0 ; j<nCount ; j++ )
{
CString strRecvTime = _T("NULL") ;
if ( strlen(rptBody[j].rptTime)>3 )
{
strRecvTime.Format( _T("#%s#") , CA2W(rptBody[j].rptTime) );
}
//if ( CString(rptBody[j].rptDesc) == CString( _T("发送成功。") ) )
if ( rptBody[j].rptId ==0 )
{
str.Format( _T("Update SmsLog Set Status=12, RecvTime=%s where SendID=%d") , strRecvTime , rptBody[j].smId );
}
else
{
str.Format( _T("Update SmsLog Set Status=13, RecvTime=%s where SendID=%d") , strRecvTime , rptBody[j].smId );
}
pDlg->m_AdoRS5.Open(str);
Sleep(500);
}
int i=0;
}
}
Sleep(2000); //1秒钟才收一次短信
}
}
catch(...)
{
}
#endif
return 1;
}
BOOL DLG_Send::IsLocakBack(CString strMobile)
{
CString str;
str.Format( _T("select * from back where Mobile='%s' and Status=1") , strMobile );
if ( m_AdoRS6.Open(str) && !m_AdoRS6.IsEOF() )
return true;
else
return false;
}
BOOL DLG_Send::Mas_OK()
{
#ifdef SUPPER_IM_MAS
if ( !this->m_pMainFrame->m_Setup.Mas_Enable )
return false;
if ( !m_Mas_Init )
return false;
return true;
#else
return false;
#endif
}
void DLG_Send::On_User_Inport_MasSDK_DGWL_FP()
{
}
void DLG_Send::On_User_Inport_MasSDK_DGWL_SP()
{
}
void DLG_Send::On_User_Inport_MasSDK_DGWL_KF()
{
}
void DLG_Send::On_User_Inport_MasSDK_DGWL_ZC()
{
}
void DLG_Send::SEND_USER_INPORT_MasSDK_DGWL(long lType)
{
}
void DLG_Send::OnSendTask()
{
if ( m_B_Task.GetCheck() )
{
long lCount=m_wndList.GetItemCount();
if ( lCount>=100 )
{
MessageBox(_T("号码数超100不能启用任务方式请删除部分号码后重试!") , _T("错误") , MB_ICONWARNING );
m_B_Task.SetCheck(false);
return ;
}
/*
int iRet = MessageBox(_T("将要设置以任务方式发送短信,任务方式有以下特点:\r\n1、任务方式为批量上传到服务后由服务器进行发送。\r\n2、任务方式支持按号码文件发送每组任务不超过100组号码。\r\n3、任务方式本地没有详细发送日志。\r\n4、任务为临时性质定时时间不可过长。\r\n是否继续以任务方式发送"),_T("提问") , MB_ICONQUESTION|MB_YESNO);
if ( iRet!= IDYES )
{
m_B_Task.SetCheck(false);
}
*/
}
else
{
#ifdef SUPPER_IM_MAS
m_B_SaveSendLog.SetCheck(true);//选中记录日志
m_B_ReMobile.SetCheck(true);//选中查重
#endif
}
OnSendTask2();
}
void DLG_Send::OnSendTask2()
{
if ( m_B_Task.GetCheck() )
{
m_B_SaveSendLog.EnableWindow(false);
m_B_SaveSendLog.SetCheck(false);
m_B_FD.EnableWindow(false);
m_B_FD.SetCheck(false);
m_L_lInterval.EnableWindow(false);
m_L_lInterval.SetCurSel(0);
m_B_Name.EnableWindow(false);
m_B_NickName.EnableWindow(false);
//m_B_Memo.EnableWindow(false);
}
else
{
m_B_SaveSendLog.EnableWindow(true);
if (m_pMainFrame->m_Ans_Login2.lLongSmsType != 1)
m_B_FD.EnableWindow(true);
m_L_lInterval.EnableWindow(true);
m_B_Name.EnableWindow(true);
m_B_NickName.EnableWindow(true);
//m_B_Memo.EnableWindow(true);
}
}
void DLG_Send::OnOK()
{
return ;
CDialog::OnOK();
}
void DLG_Send::OnCancel()
{
CDialog::OnCancel();
}
void DLG_Send::OnClickedSendRemobile()
{
if (m_B_ReMobile.GetCheck())
{
m_bShowReMobile = true;
m_lReMobileType = 0;
}
}