#if !defined(AFX_SENDTHREAD_H__25693B28_4ADE_405D_A48D_E71E7850D4FD__INCLUDED_)
#define AFX_SENDTHREAD_H__25693B28_4ADE_405D_A48D_E71E7850D4FD__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// SendThread.h : header file
//

typedef struct _SmsSendData
{
	long lStatus;      //发送状态,0-提交成功,1-提交失败,2-用户余额不足,3-企业余额不足,4-企业已过期
	long lSendID;      //发送返回的ID
	long lCorpID;      //发送的企业ID
	long lUserID;      //发送的用户ID
	TCHAR szGroupID[32];
	long lReSendCount;
	TCHAR szMsgID[32];
	TCHAR szSender[32];
	TCHAR szSendNum[32];
	TCHAR szRecver[32];
	TCHAR szRecvNum[32];
	long lRecvNumType;
	BOOL bStatusReport;    //是否需要状态报告
	TCHAR szRecvStatus[32]; //接收状态
	TCHAR szMsg[512];   //短信内容
	long lMsgType;
	long lSendRet;     //SubmitAExEx的返回值
	long lSendFCS;     //SubmitAExEx fcs的返回值
	SYSTEMTIME tTimer; //定时时间
	SYSTEMTIME tOvrTime; //超时时间
	SYSTEMTIME tSendTime;
	SYSTEMTIME tSubTime;
}SmsSendData;

typedef struct _SubmitData_Mobile
{
	TCHAR szName[32];
	TCHAR szMobile[32];
	CString * pMsg;
}SubmitData_Mobile;

#define SubmitData_Mobile_Max 100

typedef struct _SubmitData
{
	long lStatus;      //发送状态,0-提交成功,1-提交失败,2-用户余额不足,3-企业余额不足,4-企业已过期
	long lItem;        //保存Item
	long lItemID;      //保存在smsitem里的ID
	long lSendID;      //发送返回的ID
	long lCorpID;      //发送的企业ID
	long lUserID;      //发送的用户ID
	TCHAR szSendNum[32];//发送号码
	TCHAR szName[32];   //目标姓名
	TCHAR szMobile[32]; //目标号码
	TCHAR szMsg[2048];   //短信内容

	long  lMobileCount;  //目标号码数量,如果数量小于=0,则以szName,szMobile为准
	SubmitData_Mobile Mobile[SubmitData_Mobile_Max];//最多100个号码
	long  lKFCount;      //扣费数量

	long  lPrority;      //优先级
	SYSTEMTIME tTimer; //定时时间
	SYSTEMTIME tOvrTime; //超时时间
}SubmitData;

typedef struct _UpSmsS
{
	long  lCorpID;
	long  lUserID;
	long  lType;
	LPVOID pDlg;   //主窗口
	TCHAR szSendNum[32];
	TCHAR szRecvNum[32];
	TCHAR szMsg[256];   //短信内容
	TCHAR szUrl[128];   //短信内容
	TCHAR szAddNum[32];
	SYSTEMTIME tSendTime;

	long lSendID;
	long lStatus;
	TCHAR szAddStatus[32];
}UpSmsS;



typedef struct _MmsRecv
{

	long lSendID;      //发送返回的ID
	long lCorpID;      //发送的企业ID
	long lUserID;      //发送的用户ID
	long lMmsFileID;
	long lmmSize;
	TCHAR szTitle[256];
	TCHAR szSendNum[32];
	TCHAR szRecvNum[32];
	long lRecvNumType;
	SYSTEMTIME tSendTime;
}MmsRecv;

///////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// CSendThread thread
#define TH_SEND           WM_USER + 400       //发送短消息
#define TH_RECV           WM_USER + 401       //发送短消息

#define SEND_SMS_MAXRESEND 3    //发送短信时,最大重试次数

class CSmsCenterDlg;
class CSendThread : public CWinThread
{
public:
	typedef struct _BBS_Insert
	{
		long BBSID;
		long SCorpID;
		long SUserID;
		TCHAR SCorpName[128];
		TCHAR SUserName[128];
		long RCorpID;
		long RUserID;
		long RAgentID;
		long Status;
		TCHAR Type[128];
		TCHAR Name[128];
		TCHAR Tel[128];
		TCHAR Email[128];
		TCHAR BZ[512];
		long BBSType;
		long CorpID;
		long UserID;
		TCHAR CM[128];
		long AgentID;
		long AgentYJ;
		SYSTEMTIME expTime;
	}BBS_Insert;

public:
	BOOL m_bSend;           //现在是否在发送短信中
	CAdoConnection m_adoConnection;
	CAdoRecordSet   m_AdoRS;
	CAdoRecordSet   m_AdoRS1;
	CAdoRecordSet   m_AdoRS2;
	CSmsCenterDlg * m_pSMSDlg;

	long            m_lSendCount;
	
	DECLARE_DYNCREATE(CSendThread)
public:
	CSendThread();           // protected constructor used by dynamic creation

// Attributes
public:

// Operations
public:

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CSendThread)
	public:
	virtual BOOL InitInstance();
	virtual int ExitInstance();
	//}}AFX_VIRTUAL

// Implementation
public:
	static BOOL Recv_QQT(long lCorpID,long lUserID,long lRtx_GroupTaskID, CAdoRecordSet *pAdoRS, CAdoRecordSet *pAdoRS2, CSmsCenterDlg *pSMSDlg);
	static BOOL PushRecvSmsToOtherCenter(HANDLE & hPipe,SmsSendData data, CString strProv,CString strCity);
	static BOOL PushRecvSmsToOtherCenter(long lType,CAdoRecordSet *pAdoRS, SmsSendData data, CString strProv, CString strCity);
	static BOOL Bbs_Insert_Sys(CAdoRecordSet *pAdoRS,CString strBZ, COleDateTime * pExpTime=NULL);
	static BOOL Bbs_Insert(CAdoRecordSet *pAdoRS,BBS_Insert & bbs);
	static BOOL ProcessUp(CSmsCenterDlg * pSMSDlg,DWORD dwType,long lMobileType,SmsSendData sms , CAdoRecordSet * pAdoRS, CAdoRecordSet * pAdoRS2,CAdoRecordSet * pAdoRS3,BOOL bReportNumber,long lCorpID,long lUserID,long lTDMode,CString strSName);
	static BOOL Recv_Mms(MmsRecv mms,CAdoRecordSet * pAdoRS,CAdoRecordSet * pAdoRS2,CSmsCenterDlg * pSMSDlg);
	//static BOOL SetSmsAddOne(CAdoRecordSet *pAdoRS,long lSendID,long lType=0);
	//static BOOL SetSmsAddOne(CAdoRecordSet * pAdoRS , long lCorpID , long lUserID , long lKF , const TCHAR * pRecvStatus,long lSendRet,BOOL bAdc );
	static DWORD WINAPI Recv_Sms_UpSms(LPVOID pParam);
	static BOOL SplitNum( TCHAR * pCorp , TCHAR * pMan );
	static long SubmitSms(SubmitData & SendData,CAdoRecordSet * pAdoRS,CAdoRecordSet * pAdoRS2,CSmsCenterDlg * pSMSDlg,long lMobileType,long lSmsType,long lSmsKF=0);
	static BOOL Recv_Sms(HANDLE & hPipe,SmsSendData sms,CAdoRecordSet * pAdoRS,CAdoRecordSet * pAdoRS2,CAdoRecordSet * pAdoRS3,CSmsCenterDlg * pSMSDlg);
	virtual ~CSendThread();
protected:
	// Generated message map functions
	//{{AFX_MSG(CSendThread)
		// NOTE - the ClassWizard will add and remove member functions here.
	//}}AFX_MSG


	DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_SENDTHREAD_H__25693B28_4ADE_405D_A48D_E71E7850D4FD__INCLUDED_)