// ProcessSocket3.cpp : implementation file
//

#include "stdafx.h"
#include "SmsCenter.h"
#include "ProcessSocket.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CProcessSocket

#include "SmsCenterDlg.h"
#include "..\public\pop3\pop3.h"
#include "..\public\ProxySocket\CBase64Coding.hpp"
#include "..\public\AutoBuffer\AutoBuffer.h"
#include "..\public\md53\MD5_L.h"

#include "..\public\mailclient\SMTPClient.h"



long CProcessSocket::Process_TDSet_Signature_See(REQ_TD2Signature_See* pSee)
{
	try
	{
		if (!(m_ulPurview & PURVIEW_LIST))  //没有权限修改资料
		{
			ANS_TD2Signature_See* pSeeRet = new ANS_TD2Signature_See;  //权限不够,什么也不返回
			memset(pSeeRet, 0, sizeof(ANS_TD2Signature_See));
			pSeeRet->req = *pSee;
			pSeeRet->lCount = -1;
			_tcscpy(pSeeRet->szErrMsg, _T("查询权限异常1"));
			SendFrame(SMSFUNC_TD2SIGNATURETITLE_SEE, (BYTE*)pSeeRet, sizeof(ANS_TD2Signature_See));  //发送返回
			return 1;
		}

		CString str;

		CString strWhere = _T(" 1=1 ");

		if (pSee->lSignatureID > 0)  //查询单一签名数据ID
		{
			str.Format(_T(" and SignatureID=%d"), pSee->lSignatureID);
			strWhere.Append(str);
		}
		if (pSee->iTDID > 0)  //查询单一通道ID
		{
			str.Format(_T(" and TDID=%d"), pSee->iTDID);
			strWhere.Append(str);
		}
		if (pSee->lCorpID > 0)  //查询单一企业ID
		{
			str.Format(_T(" and CorpID=%d"),pSee->lCorpID);
			strWhere.Append(str);
		}
		if (_tcslen(pSee->szKey) > 0)  //关键字查询企业
		{
			str.Format(_T(" and ( signature like '%%%%%s%%%%' or corpanyname like '%%%%%s%%%%' or smsnum like '%%%%%s%%%%' )"), pSee->szKey, pSee->szKey, pSee->szKey);
			strWhere.Append(str);
		}
		if (pSee->lStatus > 0)  //查询单一状态
		{
			str.Format(_T(" and status=%d"), pSee->lStatus-1);
			strWhere.Append(str);
		}
		if (pSee->lOperType > 0)  //查询单一操作类型
		{
			str.Format(_T(" and opertype=%d"), pSee->lOperType - 1);
			strWhere.Append(str);
		}
		if (pSee->bAddTime) //添加时间
		{
			str.Format(_T(" and AddTime>='%04d%02d%02d %02d:%02d:%02d' and  AddTime<='%04d%02d%02d %02d:%02d:%02d'"), pSee->tAddTimeBegin.wYear, pSee->tAddTimeBegin.wMonth, pSee->tAddTimeBegin.wDay, pSee->tAddTimeBegin.wHour, pSee->tAddTimeBegin.wMinute, pSee->tAddTimeBegin.wSecond, pSee->tAddTimeEnd.wYear, pSee->tAddTimeEnd.wMonth, pSee->tAddTimeEnd.wDay, pSee->tAddTimeEnd.wHour, pSee->tAddTimeEnd.wMinute, pSee->tAddTimeEnd.wSecond );
			strWhere.Append(str);
		}
		if (pSee->bModifyTime) //更新时间
		{
			str.Format(_T(" and UploadTime>='%04d%02d%02d %02d:%02d:%02d' and  UploadTime<='%04d%02d%02d %02d:%02d:%02d'"), pSee->tModifyTimeBegin.wYear, pSee->tModifyTimeBegin.wMonth, pSee->tModifyTimeBegin.wDay, pSee->tModifyTimeBegin.wHour, pSee->tModifyTimeBegin.wMinute, pSee->tModifyTimeBegin.wSecond, pSee->tModifyTimeEnd.wYear, pSee->tModifyTimeEnd.wMonth, pSee->tModifyTimeEnd.wDay, pSee->tModifyTimeEnd.wHour, pSee->tModifyTimeEnd.wMinute, pSee->tModifyTimeEnd.wSecond);
			strWhere.Append(str);
		}
		if (pSee->bAuditTime) //审核时间
		{
			str.Format(_T(" and AuditTime>='%04d%02d%02d %02d:%02d:%02d' and  AuditTime<='%04d%02d%02d %02d:%02d:%02d'"), pSee->tAuditTimeBegin.wYear, pSee->tAuditTimeBegin.wMonth, pSee->tAuditTimeBegin.wDay, pSee->tAuditTimeBegin.wHour, pSee->tAuditTimeBegin.wMinute, pSee->tAuditTimeBegin.wSecond, pSee->tAuditTimeEnd.wYear, pSee->tAuditTimeEnd.wMonth, pSee->tAuditTimeEnd.wDay, pSee->tAuditTimeEnd.wHour, pSee->tAuditTimeEnd.wMinute, pSee->tAuditTimeEnd.wSecond);
			strWhere.Append(str);
		}
		m_bCheckTimeOut = false;  //不允许检测超时时间

		str.Format(_T("select * from TD2Signature with(nolock) where %s"), strWhere);
		BOOL b = m_AdoRS.Open(str);
		long lCount = m_AdoRS.GetRecordCount();
		if (lCount < 0) lCount = 0;
		m_AdoRS.MoveFirst();  //移动第一条记录
		//计算页数
		long lPageRecords = LISTPAGE_RECORD;
		long lPageMax = lCount / lPageRecords;
		if (lPageMax * lPageRecords != lCount) lPageMax++;
		long lAllCount = 0;
		for (int j = 0; j < lPageMax; j++)
		{
			//lFrameCount,计算当前页的记录数
			long lFrameCount = lPageRecords;
			if (lFrameCount * (j + 1) > lCount)
				lFrameCount = lCount - lFrameCount * j;

			long lSize = sizeof(ANS_TD2Signature_See) + sizeof(ANS_TD2Signature_Data) * lFrameCount;
			BYTE* pData = new BYTE[lSize]; memset(pData, 0, lSize);
			ANS_TD2Signature_See* pListRet = (ANS_TD2Signature_See*)pData;
			ANS_TD2Signature_Data* pListDataRet = (ANS_TD2Signature_Data*)(pData + sizeof(ANS_TD2Signature_See));
			pListRet->lCount = lFrameCount;
			pListRet->lPageAll = lPageMax;
			pListRet->lPageCount = j + 1;

			COleDateTime t;
			long lTempCount = 0;
			while (!m_AdoRS.IsEOF() && lTempCount < lFrameCount)
			{
				m_AdoRS.GetCollect(_T("SignatureID"), pListDataRet->iSignatureID);
				m_AdoRS.GetCollect(_T("Status"), pListDataRet->iStatus);
				m_AdoRS.GetCollect(_T("TDID"), pListDataRet->iTDID);
				m_AdoRS.GetCollect(_T("Signature"), pListDataRet->szSignature);
				m_AdoRS.GetCollect(_T("SmsNum"), pListDataRet->szSmsNum);
				m_AdoRS.GetCollect(_T("CorpID"), pListDataRet->iCorpID);
				m_AdoRS.GetCollect(_T("UserID"), pListDataRet->iUserID);
				m_AdoRS.GetCollect(_T("SendCount"), pListDataRet->iSendCount);
				m_AdoRS.GetCollect(_T("AddTime"), pListDataRet->tAddTime);
				m_AdoRS.GetCollect(_T("OperType"), pListDataRet->iOperType);
				m_AdoRS.GetCollect(_T("UploadTime"), pListDataRet->tUploadTime);
				m_AdoRS.GetCollect(_T("AuditTime"), pListDataRet->tAuditTime);
				m_AdoRS.GetCollect(_T("MainSmsNum"), pListDataRet->szMainSmsNum);
				m_AdoRS.GetCollect(_T("CorpanyName"), pListDataRet->szCorpanyName);
				m_AdoRS.GetCollect(_T("CorpanyNum"), pListDataRet->szCorpanyNum);
				m_AdoRS.GetCollect(_T("Provvince"), pListDataRet->szProvvince);
				m_AdoRS.GetCollect(_T("City"), pListDataRet->szCity);
				m_AdoRS.GetCollect(_T("LegalName"), pListDataRet->szLegalName);
				m_AdoRS.GetCollect(_T("LegalCertType"), pListDataRet->szLegalCertType);
				m_AdoRS.GetCollect(_T("LegalCertID"), pListDataRet->szLegalCertID);
				m_AdoRS.GetCollect(_T("AgencyName"), pListDataRet->szAgencyName);
				m_AdoRS.GetCollect(_T("AgencyCertType"), pListDataRet->szAgencyCertType);
				m_AdoRS.GetCollect(_T("AgencyCertID"), pListDataRet->szAgencyCertID);
				m_AdoRS.GetCollect(_T("PortUsage"), pListDataRet->szPortUsage);
				m_AdoRS.GetCollect(_T("PortType"), pListDataRet->szPortType);
				m_AdoRS.GetCollect(_T("PortUsageCategory"), pListDataRet->szPortUsageCategory);
				m_AdoRS.GetCollect(_T("SignatureSource"), pListDataRet->szSignatureSource);
				m_AdoRS.GetCollect(_T("LocationServerRoom"), pListDataRet->szLocationServerRoom);
				m_AdoRS.GetCollect(_T("ContentTemplate"), pListDataRet->szContentTemplate);
				m_AdoRS.GetCollect(_T("fileId"), pListDataRet->szfileId);
				m_AdoRS.GetCollect(_T("errData"), pListDataRet->szerrData);
				m_AdoRS.GetCollect(_T("errType"), pListDataRet->szerrType);
				m_AdoRS.GetCollect(_T("BZ"), pListDataRet->szBZ);


				m_AdoRS.MoveNext();
				pListDataRet++;
				lTempCount++;

				lAllCount++;
			}
			SendFrame(SMSFUNC_TD2SIGNATURE_SEE, (BYTE*)pData, lSize);  //发送返回
		}
		if (lAllCount <= 0) //什么也找不到的返回
		{
			ANS_TD2Signature_See* pSeeRet = new ANS_TD2Signature_See;  //权限不够,什么也不返回
			memset(pSeeRet, 0, sizeof(ANS_TD2Signature_See));

			pSeeRet->lCount = 0;
			_tcscpy(pSeeRet->szErrMsg, _T("查询成功,没有记录"));
			pSeeRet->lPageCount = 0;
			pSeeRet->lPageAll = 0;
			SendFrame(SMSFUNC_TD2SIGNATURE_SEE, (BYTE*)pSeeRet, sizeof(ANS_TD2Signature_See));  //发送返回
		}
		m_bCheckTimeOut = true;  //允许检测超时时间
		return 1;
	}
	catch (...)
	{
		LOG_APPERROR(_T("T"));
		return 0;
	}
	return 0;
}


long CProcessSocket::Process_TDSet_SignatureTitle_See(REQ_TD2SignatureTitle_See* pSee)
{
	try
	{
		ANS_TD2SignatureTitle_See* pSeeRet = new ANS_TD2SignatureTitle_See;  //权限不够,什么也不返回
		memset(pSeeRet, 0, sizeof(ANS_TD2SignatureTitle_See));
		pSeeRet->req = *pSee;

		if (!(m_ulPurview & PURVIEW_LIST))  //没有权限修改资料
		{
			pSeeRet->lCount = -1;
			_tcscpy(pSeeRet->szErrMsg, _T("查询权限异常1"));
			SendFrame(SMSFUNC_TD2SIGNATURETITLE_SEE, (BYTE*)pSeeRet, sizeof(ANS_TD2SignatureTitle_See));  //发送返回
			return 1;
		}

		CString str;

		str.Format(_T("select * from TD2 with(nolock) where len(SignatureTitle)>0 order by tdid"));
		m_AdoRS.Open(str);
		long lCount = m_AdoRS.GetRecordCount();

		if (lCount <= 0)
		{
			pSeeRet->lCount = 0;
			_tcscpy(pSeeRet->szErrMsg, _T("查询成功,没记录"));
			SendFrame(SMSFUNC_TD2SIGNATURETITLE_SEE, (BYTE*)pSeeRet, sizeof(ANS_TD2SignatureTitle_See));  //发送返回
			return 1;
		}

		long lSize = sizeof(ANS_TD2SignatureTitle_See) + sizeof(ANS_TD2SignatureTitle_Data) * lCount;
		BYTE* pData = new BYTE[lSize];
		memset(pData, 0, lSize);
		ANS_TD2SignatureTitle_See* pRet = (ANS_TD2SignatureTitle_See*)pData;
		ANS_TD2SignatureTitle_Data* pRetData = (ANS_TD2SignatureTitle_Data*)(pData + sizeof(ANS_TD2SignatureTitle_See));
		*pRet = *pSeeRet;
		delete pSeeRet;  //删除之前新增的返回头数据

		for (int i = 0; i < lCount && !m_AdoRS.IsEOF(); i++)
		{
			m_AdoRS.GetCollect(_T("TDID"), pRetData->iTDID);
			m_AdoRS.GetCollect(_T("SignatureTitle"), pRetData->szSignatureTitle);
			m_AdoRS.GetCollect(_T("SignatureNum"), pRetData->szSmsNum);

			m_AdoRS.MoveNext();
			pRetData++;
		}
		pRet->lCount = i;  //返回记录数
		_tcscpy(pRet->szErrMsg, _T("查询成功"));

		SendFrame(SMSFUNC_TD2SIGNATURETITLE_SEE, (BYTE*)pData, lSize);  //发送返回
		return 1;
	}
	catch (...)
	{
		LOG_APPERROR(_T("T"));
		return 0;
	}
	return 0;
}


long CProcessSocket::Process_TDSet_Signature_Modify(REQ_TD2Signature_Modify* pModify)
{
	try
	{
		CString str;
		ANS_TD2Signature_Modify* pModifyRet = new ANS_TD2Signature_Modify;  //权限不够,什么也不返回
		memset(pModifyRet, 0, sizeof(ANS_TD2Signature_Modify));

		pModifyRet->req = *pModify;

		if (!(m_ulPurview & PURVIEW_LIST))  //没有权限修改资料
		{
			pModifyRet->iErrCode = -1;
			_tcscpy(pModifyRet->szErrMsg, _T("权限异常1"));
			SendFrame(SMSFUNC_TD2SIGNATURE_MODIFY, (BYTE*)pModifyRet, sizeof(ANS_TD2Signature_Modify));  //发送返回
			return 1;
		}
		ANS_TD2Signature_Data* pData = (ANS_TD2Signature_Data*)((BYTE*)pModify + sizeof(REQ_TD2Signature_Modify));

		pModifyRet->iCount = pModify->iCount;

		int iAllCover=0;
		int iAllAdd = 0;
		int iAllDel = 0;
		int iAllIgnore = 0;
		int iAllFail = 0;

		for (int i = 0; i < pModify->iCount; i++)
		{
			CString strSignature = pData[i].szSignature;
			CString strSmsNum = pData[i].szSmsNum;
			CString strBZ;
			CString strOldSignature;
			BOOL bExist = false;
			int iCover = 0;
			int iAdd = 0;
			int iDel = 0;
			int iIgnore = 0;
			int iError = 0;
			BOOL bGetNewPort = false;
			int iStatus = pData[i].iStatus;
			BOOL bSql = true;

			if (strSmsNum.GetLength() > 0)
			{
				//第一步,先查询端口号是否存在
				if (pModify->iOperType == 0)//新增
					str.Format(_T("select * from TD2Signature where SmsNum='%s' and TDID=%d order by SignatureID desc"), strSmsNum, pModify->iTDID);
				if (pModify->iOperType == 1)//修改
					str.Format(_T("select * from TD2Signature where SignatureID<>%d and SmsNum='%s' and TDID=%d order by SignatureID desc"), pData->iSignatureID, strSmsNum, pModify->iTDID);
				if (strSmsNum.GetLength() > 0 && m_AdoRS.Open(str) && !m_AdoRS.IsEOF())
				{
					bExist = true;
					if (pData[i].iOperType == 2)  ////操作类型:0-新增,1-修改,2-删除
					{
						iDel = 1;
					}

					//int  iConflict;  //冲突处理如0-已存在-覆盖;1-如已存在-仍然新增;2-如已存在-忽略;3-如已存在-换端口申请;
					switch (pModify->iConflict)
					{
					case 0:  //覆盖
						iCover = 1;
						break;
					case 2:
						iAdd = 1; //新增
						bGetNewPort = true; //换新端口号
						break;
					case 3:
						iAdd = 1; //仍然新增
						bGetNewPort = false; //换新端口号
						break;
					default:  //1-忽略
						iIgnore = 1;
						break;
					}


					if (iCover == 1) //属于覆盖,需要记录原信息
					{
						//增加备注信息
						int lOldStatus = 0;
						m_AdoRS.GetCollect(_T("SignatureID"), pData[i].iSignatureID);
						m_AdoRS.GetCollect(_T("Status"), lOldStatus);
						m_AdoRS.GetCollect(_T("Signature"), strOldSignature);
						m_AdoRS.GetCollect(_T("BZ"), strBZ);
						str.Format(_T("原状态:%d,原签名:%s  "), lOldStatus, strOldSignature);
						strBZ.Append(str);

					}
				}
				else
				{
					if (pModify->iOperType == 0)//新增
						iAdd = 1;  //没找到端口记录,属于新增
					if (pModify->iOperType == 1)//修改
						iCover = 1;
				}
			}
			else
			{
				if (pModify->iConflict == 2)  //换新端口
				{
					iAdd = 1; //新增
					bGetNewPort = true; //换新端口号
				}
			}

			if (bGetNewPort)  //生成新端口号
			{
				//生成了新端口号,状态肯定是待上传
				iStatus = 0;  ////状态,0-待上报;1-已上报;2-已审核通过;3-已审核未通过;4-已删除
				CString strNewSmsNum;
				//生成新端口号
				str.Format(_T("select * from TD2 with(nolock) where TDID=%d"), pModify->iTDID);
				if (m_AdoRS.Open(str) && !m_AdoRS.IsEOF())
				{
					m_AdoRS.GetCollect(_T("SignatureNum"), strNewSmsNum);

					if (strNewSmsNum.GetLength() >= 6)
					{
#ifdef SMSCENTER_ONE
						strNewSmsNum.Append(_T("1550000"));
#endif
#ifdef SMSCENTER_THREE
						strNewSmsNum.Append(_T("3550000"));
#endif
						CString strLeftSmsNum = strNewSmsNum.Left(10);
						str.Format(_T("select top 1 * from TD2Signature where TDID=%d and left(smsnum,10)='%s' order by smsnum desc"), pModify->iTDID, strLeftSmsNum);
						if (m_AdoRS.Open(str) && !m_AdoRS.IsEOF())
						{
							m_AdoRS.GetCollect(_T("SmsNum"), strNewSmsNum);
						}
						LONGLONG llSmsNum = _ttoll(strNewSmsNum);
						llSmsNum++;
						strNewSmsNum.Format(_T("%lld"), llSmsNum);

					}
				}
				if (strNewSmsNum.GetLength() >= 10)
				{
					_tcscpy(pData[i].szSmsNum, strNewSmsNum);
					strSmsNum = strNewSmsNum;  //新端口号
				}
				else
				{
					iError = 1;
				}
			}
			if (strSmsNum.GetLength() <= 0)  //没有端口号的有问题
			{
				iError = 1;
			}
			if (iError == 0 && iIgnore == 0) //上面没出错并且没有忽略,继续
			{
				CString strStatus;
				CString strTDID;
				CString strOperType;
				CString strAuditTime = _T("NULL");
				if (pData[i].iOperType == 2)  //如果操作是删除,并且是上传已审核记录,则状态为4-已删除
				{
					if (iStatus == 2)
					{
						iStatus = 4;////状态,0-待上报;1-已上报;2-已审核通过;3-已审核未通过;4-已删除

						strAuditTime = _T("GetDate()");  //审核时间为上传记录时间
					}
				}
				strStatus.Format(_T("%d"), iStatus);
				strTDID.Format(_T("%d"), pData[i].iTDID);
				strOperType.Format(_T("%d"), pData[i].iOperType);

				if (iAdd == 1)
				{
					//添加记录
					str.Format(_T("insert into TD2Signature (Status,TDID,Signature,SmsNum,CorpID,UserID,OperType,AuditTime,MainSmsNum,CorpanyName,CorpanyNum,Provvince,City,LegalName,LegalCertType,LegalCertID,AgencyName,AgencyCertType,AgencyCertID,PortUsage,PortType,PortUsageCategory,SignatureSource,LocationServerRoom,ContentTemplate,BZ,OperUser) " \
						"values(% d, % d, '%s', '%s', % d, % d, % d, % s, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s','%s')"),
						iStatus,
						pData[i].iTDID,
						SqlStr(strSignature),
						SqlStr(strSmsNum),
						0, 0,  //corpID,UserID
						pData[i].iOperType,
						strAuditTime,
						SqlStr(pData[i].szMainSmsNum),
						SqlStr(pData[i].szCorpanyName),
						SqlStr(pData[i].szCorpanyNum),
						SqlStr(pData[i].szProvvince),
						SqlStr(pData[i].szCity),
						SqlStr(pData[i].szLegalName),
						SqlStr(pData[i].szLegalCertType),
						SqlStr(pData[i].szLegalCertID),
						SqlStr(pData[i].szAgencyName),
						SqlStr(pData[i].szAgencyCertType),
						SqlStr(pData[i].szAgencyCertID),
						SqlStr(pData[i].szPortUsage),
						SqlStr(pData[i].szPortType),
						SqlStr(pData[i].szPortUsageCategory),
						SqlStr(pData[i].szSignatureSource),
						SqlStr(pData[i].szLocationServerRoom),
						SqlStr(pData[i].szContentTemplate),
						SqlStr(strBZ),
						SqlStr(m_szLoginName));
					if (m_AdoRS.Open(str))  //执行成功,取ID值
					{
						str= _T("SELECT SCOPE_IDENTITY()");
						bSql = m_AdoRS.Open(str);
						if (bSql)
						{
							m_AdoRS.GetCollect((long)0, pData[i].iSignatureID);
						}
					}
					else
					{
						bSql = false;
					}
				}
				else
				{
					//修改记录
					CString strSignatureID;
					strSignatureID.Format(_T("%d"), pData[i].iSignatureID);

					str = CString("update TD2Signature set ") +
						CString("Status='") + strStatus + CString("',") +
						CString("TDID=") + strTDID + CString(",") +
						CString("Signature='") + SqlStr(strSignature) + CString("',") +
						CString("SmsNum='") + SqlStr(strSmsNum) + CString("',") +
						CString("CorpID='") + CString(_T("0")) + CString("',") +
						CString("UserID='") + CString(_T("0")) + CString("',") +
						CString("OperType='") + strOperType + CString("',") +
						CString("AuditTime=") + strAuditTime + CString(",") +
						CString("MainSmsNum='") + SqlStr(pData[i].szMainSmsNum) + CString("',") +
						CString("CorpanyName='") + SqlStr(pData[i].szCorpanyName) + CString("',") +
						CString("CorpanyNum='") + SqlStr(pData[i].szCorpanyNum) + CString("',") +
						CString("Provvince='") + SqlStr(pData[i].szProvvince) + CString("',") +
						CString("City='") + SqlStr(pData[i].szCity) + CString("',") +
						CString("LegalName='") + SqlStr(pData[i].szLegalName) + CString("',") +
						CString("LegalCertType='") + SqlStr(pData[i].szLegalCertType) + CString("',") +
						CString("LegalCertID='") + SqlStr(pData[i].szLegalCertID) + CString("',") +
						CString("AgencyName='") + SqlStr(pData[i].szAgencyName) + CString("',") +
						CString("AgencyCertType='") + SqlStr(pData[i].szAgencyCertType) + CString("',") +
						CString("AgencyCertID='") + SqlStr(pData[i].szAgencyCertID) + CString("',") +
						CString("PortUsage='") + SqlStr(pData[i].szPortUsage) + CString("',") +
						CString("PortType='") + SqlStr(pData[i].szPortType) + CString("',") +
						CString("PortUsageCategory='") + SqlStr(pData[i].szPortUsageCategory) + CString("',") +
						CString("SignatureSource='") + SqlStr(pData[i].szSignatureSource) + CString("',") +
						CString("LocationServerRoom='") + SqlStr(pData[i].szLocationServerRoom) + CString("',") +
						CString("ContentTemplate='") + SqlStr(pData[i].szContentTemplate) + CString("',") +
						CString("BZ='") + SqlStr(strBZ) + CString("', ") +
						CString("OperUser='") + SqlStr(m_szLoginName) + CString("' ") +
						CString("where SignatureID=") + strSignatureID;
					bSql = m_AdoRS.Open(str);
				}

				if (!bSql)  //执行失败
				{
					iCover = 0;  //
					iAdd = 0;
					iDel = 0;
					iError = 1;
				}


			}
			if (iIgnore == 1 || iError == 1)
			{
				pData[i].iSignatureID = 0;  //不成功标志
			}

			iAllCover = iAllCover + iCover;
			iAllAdd = iAllAdd + iAdd;
			iAllDel = iAllDel + iDel;
			iAllIgnore = iAllIgnore + iIgnore;
			iAllFail = iAllCover + iError;
		}

		long lSize = sizeof(ANS_TD2Signature_Modify) + sizeof(ANS_TD2Signature_Data) * pModify->iCount;// pUploadRet->iCount;  //暂时不返回具体数据
		BYTE* pDataRet = new BYTE[lSize];
		memset(pDataRet, 0, lSize);
		ANS_TD2Signature_Modify* pRet = (ANS_TD2Signature_Modify*)pDataRet;
		ANS_TD2Signature_Data* pRetData = (ANS_TD2Signature_Data*)(pDataRet + sizeof(ANS_TD2Signature_Modify));
		memcpy((BYTE*)pRetData, (BYTE*)pData, sizeof(ANS_TD2Signature_Data)* pModify->iCount);  //复制数据
		*pRet = *pModifyRet;
		delete pModifyRet;  //删除之前新增的返回头数据
		/*
		for (int i = 0; i < lCount && !m_AdoRS.IsEOF(); i++)
		{
			m_AdoRS.GetCollect(_T("TDID"), pRetData->iTDID);
			m_AdoRS.GetCollect(_T("AccessPort"), pRetData->szSmsNum);
			m_AdoRS.GetCollect(_T("SignatureTitle"), pRetData->szSignatureTitle);

			m_AdoRS.MoveNext();
			pRetData++;
		}
		*/
		pRet->iErrCode = 0;  //返回错误代码
		_stprintf(pRet->szErrMsg, _T("处理成功\r\n添加记录:%d条\r\n修改记录:%d条\r\n忽略记录:%d条\r\n错误记录:%d\r\n"), iAllAdd, iAllCover, iAllIgnore, iAllFail);

		SendFrame(SMSFUNC_TD2SIGNATURE_MODIFY, (BYTE*)pDataRet, lSize);  //发送返回
		return 1;
	}
	catch (...)
	{
		LOG_APPERROR(_T("T"));
		return 0;
	}
	return 0;
}



long CProcessSocket::Process_TDSet_Signature_ModifyStatus(REQ_TD2Signature_ModifyStatus* pModify)
{
	try
	{

		if (!(m_ulPurview & PURVIEW_LIST))  //没有权限修改资料
		{
			ANS_TD2Signature_ModifyStatus* pSeeRet = new ANS_TD2Signature_ModifyStatus;  //权限不够,什么也不返回
			memset(pSeeRet, 0, sizeof(ANS_TD2Signature_ModifyStatus));
			pSeeRet->lCount = -1;
			_tcscpy(pSeeRet->szErrMsg, _T("查询权限异常1"));
			SendFrame(SMSFUNC_TD2SIGNATURE_MODIFYSTATUS, (BYTE*)pSeeRet, sizeof(ANS_TD2Signature_ModifyStatus));  //发送返回
			return 1;
		}
		ANS_TD2Signature_ModifyStatus_Data* pReqData = (ANS_TD2Signature_ModifyStatus_Data*)( ((BYTE*)pModify) + sizeof(REQ_TD2Signature_ModifyStatus));

		long lSize = sizeof(ANS_TD2Signature_ModifyStatus) + sizeof(ANS_TD2Signature_ModifyStatus_Data) * pModify->lCount;
		BYTE* pData = new BYTE[lSize];
		memset(pData, 0, lSize);
		ANS_TD2Signature_ModifyStatus* pRet = (ANS_TD2Signature_ModifyStatus*)pData;
		ANS_TD2Signature_ModifyStatus_Data* pRetData = (ANS_TD2Signature_ModifyStatus_Data*)(pData + sizeof(ANS_TD2Signature_ModifyStatus));

		CString str;

		for (int i = 0; i < pModify->lCount; i++)
		{
			long lCount1 = 0;
			str.Format(_T("update TD2Signature set Status=%d, UploadTime=GetDate(), OperUser='%s' where SignatureID=%d"), pReqData->iNewStatus, SqlStr(this->m_szLoginName),pReqData->iSignatureID);
			if (m_AdoRS2.GetConnection()->Execute(str, lCount1) && lCount1>0)
			//if (m_AdoRS.Open(str))
			{
				pRetData->iItem = pReqData->iItem;
				pRetData->iNewStatus = pReqData->iNewStatus;
				pRetData->iSignatureID = pReqData->iSignatureID;
			}

			pReqData++;
			pRetData++;
		}
		pRet->lCount = i;  //返回记录数
		_tcscpy(pRet->szErrMsg, _T("查询成功"));

		pRet->iNewStatus = pModify->iNewStatus;
		pRet->iTDID = pModify->iTDID;
		pRet->lPageAll = pModify->lPageAll;
		pRet->lPageCount = pModify->lPageCount;

		SendFrame(SMSFUNC_TD2SIGNATURE_MODIFYSTATUS, (BYTE*)pData, lSize);  //发送返回
		return 1;
	}
	catch (...)
	{
		LOG_APPERROR(_T("T"));
		return 0;
	}
	return 0;
}


long CProcessSocket::Process_TDSet_Signature_GetMaxSmsNum(REQ_TD2Signature_GetMaxSmsNum* pGet)
{
	try
	{
		ANS_TD2Signature_GetMaxSmsNum* pGetRet = new ANS_TD2Signature_GetMaxSmsNum;  //权限不够,什么也不返回
		memset(pGetRet, 0, sizeof(ANS_TD2Signature_GetMaxSmsNum));

		if (!(m_ulPurview & PURVIEW_LIST))  //没有权限修改资料
		{
			pGetRet->iErrCode = -1;
			_tcscpy(pGetRet->szErrMsg, _T("查询权限异常1"));
			SendFrame(SMSFUNC_TD2SIGNATURE_GETMAXSMSNUM, (BYTE*)pGetRet, sizeof(ANS_TD2Signature_GetMaxSmsNum));  //发送返回
			return 1;
		}

		CString str;

		str.Format(_T("select * from TD2 with(nolock) where TDID=%d"), pGet->iTDID);
		if (!m_AdoRS.Open(str) || m_AdoRS.IsEOF())
		{
			pGetRet->iErrCode = -2;
			_tcscpy(pGetRet->szErrMsg, _T("通道ID不存在"));
			SendFrame(SMSFUNC_TD2SIGNATURE_GETMAXSMSNUM, (BYTE*)pGetRet, sizeof(ANS_TD2Signature_GetMaxSmsNum));  //发送返回
			return 1;
		}
		CString strNewSmsNum;
		m_AdoRS.GetCollect(_T("SignatureNum"), strNewSmsNum);
		m_AdoRS.GetCollect(_T("SignatureTitle"), pGetRet->szSignatureTitle);
		_tcscpy(pGetRet->szSmsNum, strNewSmsNum);

		if (strNewSmsNum.GetLength() < 6)
		{
			pGetRet->iErrCode = -3;
			_tcscpy(pGetRet->szErrMsg, _T("未正确配置通道号码"));
			SendFrame(SMSFUNC_TD2SIGNATURE_GETMAXSMSNUM, (BYTE*)pGetRet, sizeof(ANS_TD2Signature_GetMaxSmsNum));  //发送返回
			return 1;
		}
#ifdef SMSCENTER_ONE
		strNewSmsNum.Append(_T("1550000"));
#endif
#ifdef SMSCENTER_THREE
		strNewSmsNum.Append(_T("3550000"));
#endif

		CString strLeftSmsNum = strNewSmsNum.Left(10);
		str.Format(_T("select top 1 * from TD2Signature where TDID=%d and left(smsnum,10)='%s' order by smsnum desc"), pGet->iTDID, strLeftSmsNum);
		if (m_AdoRS.Open(str) && !m_AdoRS.IsEOF())
		{
			m_AdoRS.GetCollect(_T("SmsNum"), strNewSmsNum);
		}
		LONGLONG llSmsNum = _ttoll(strNewSmsNum);
		llSmsNum++;
		str.Format(_T("%lld"), llSmsNum);
		if (str.GetLength() < 10)
		{
			pGetRet->iErrCode = -4;
			_tcscpy(pGetRet->szErrMsg, _T("生成新的端口号错误"));
			SendFrame(SMSFUNC_TD2SIGNATURE_GETMAXSMSNUM, (BYTE*)pGetRet, sizeof(ANS_TD2Signature_GetMaxSmsNum));  //发送返回
			return 1;
		}
		pGetRet->iTDID = pGet->iTDID;
		pGetRet->iErrCode = 0;
		_tcscpy(pGetRet->szErrMsg, _T("取新端口号成功"));
		_tcscpy(pGetRet->szMaxSmsNum, str);


		SendFrame(SMSFUNC_TD2SIGNATURE_GETMAXSMSNUM, (BYTE*)pGetRet, sizeof(ANS_TD2Signature_GetMaxSmsNum));  //发送返回

		return 1;
	}
	catch (...)
	{
		LOG_APPERROR(_T("T"));
		return 0;
	}
	return 0;
}
long CProcessSocket::Process_TDSet_Signature_Upload(REQ_TD2Signature_Upload* pUpload)
{
	try
	{
		CString str;
		ANS_TD2Signature_Upload* pUploadRet = new ANS_TD2Signature_Upload;  //权限不够,什么也不返回
		memset(pUploadRet, 0, sizeof(ANS_TD2Signature_Upload));

		pUploadRet->iTDID = pUpload->iTDID;
		pUploadRet->iType = pUpload->iType;
		pUploadRet->iConflict = pUpload->iConflict;
		pUploadRet->iAutoPort = pUpload->iAutoPort;
		pUploadRet->iAllCount = pUpload->iAllCount;
		pUploadRet->iUpCount = pUpload->iUpCount + pUpload->iCount;  //已上传数量增加
		pUploadRet->iCount = pUpload->iCount;
		pUploadRet->iCover = pUpload->iCover;
		pUploadRet->iAdd = pUpload->iAdd;
		pUploadRet->iDel = pUpload->iDel;
		pUploadRet->iIgnore = pUpload->iIgnore;
		pUploadRet->iFail = pUpload->iFail;


		if (!(m_ulPurview & PURVIEW_LIST))  //没有权限修改资料
		{
			pUploadRet->iStatus = -1;
			_tcscpy(pUploadRet->szErrMsg, _T("权限异常1"));
			SendFrame(SMSFUNC_TD2SIGNATURE_UPLOAD, (BYTE*)pUploadRet, sizeof(ANS_TD2Signature_Upload));  //发送返回
			return 1;
		}
		ANS_TD2Signature_Data* pData = (ANS_TD2Signature_Data*)((BYTE*)pUpload + sizeof(REQ_TD2Signature_Upload));

		for (int i = 0; i < pUploadRet->iCount; i++)
		{
			CString strSignature = pData[i].szSignature;
			CString strSmsNum = pData[i].szSmsNum;
			CString strBZ;
			CString strOldSignature;
			BOOL bExist = false;
			int iCover = 0;
			int iAdd = 0;
			int iDel = 0;
			int iIgnore = 0;
			int iError = 0;
			BOOL bGetNewPort = false;
			int iStatus = 0;

			//第一步,先查询端口号是否存在
			str.Format(_T("select * from TD2Signature where SmsNum='%s' and TDID=%d order by SignatureID desc"), strSmsNum, pUploadRet->iTDID);
			if (strSmsNum.GetLength() > 0 && m_AdoRS.Open(str) && !m_AdoRS.IsEOF())
			{
				bExist = true;
				if (pData[i].iOperType == 2)  ////操作类型:0-新增,1-修改,2-删除
				{
					iDel = 1;
				}

				//int  iConflict;  //冲突处理如0-已存在-覆盖;1-如已存在-仍然新增;2-如已存在-忽略;3-如已存在-换端口申请;
				switch (pUploadRet->iConflict)
				{
				case 0:  //覆盖
					iCover = 1;
					break;
				case 1:  //新增
					iAdd = 1;
					break;
				case 3:
					iAdd = 1; //新增
					bGetNewPort = true; //换新端口号
					break;
				default:  //忽略
					iIgnore = 1;
					break;
				}


				if (iCover == 1) //属于覆盖,需要记录原信息
				{
					//增加备注信息
					int lOldStatus = 0;
					m_AdoRS.GetCollect(_T("SignatureID"), pData[i].iSignatureID);
					m_AdoRS.GetCollect(_T("Status"), lOldStatus);
					m_AdoRS.GetCollect(_T("Signature"), strOldSignature);
					m_AdoRS.GetCollect(_T("BZ"), strBZ);
					str.Format(_T("原状态:%d,原签名:%s  "), lOldStatus, strOldSignature);
					strBZ.Append(str);

				}
			}
			else
			{
				iAdd = 1;  //没找到端口记录,属于新增
			}
			if (pUploadRet->iType == 0) //0-需要报备,1为已报备,只上传
			{
				iStatus = 0;  ////状态,0-待上报;1-已上报;2-已审核通过;3-已审核未通过;4-已删除
				if (pUploadRet->iAutoPort && _tcslen(pData[i].szSmsNum) <= 0)  //自动生成新端口号,并且端口号为空
				{
					bGetNewPort = true; //换新端口号
				}
			}
			else
			{
				iStatus = 2;  ////状态,0-待上报;1-已上报;2-已审核通过;3-已审核未通过;4-已删除
			}
			if (bGetNewPort)  //生成新端口号
			{
				//生成了新端口号,状态肯定是待上传
				iStatus = 0;  ////状态,0-待上报;1-已上报;2-已审核通过;3-已审核未通过;4-已删除
				CString strNewSmsNum;
				//生成新端口号
				str.Format(_T("select * from TD2 with(nolock) where TDID=%d"), pUploadRet->iTDID);
				if (m_AdoRS.Open(str) && !m_AdoRS.IsEOF())
				{
					m_AdoRS.GetCollect(_T("SignatureNum"), strNewSmsNum);

					if (strNewSmsNum.GetLength() >= 6)
					{
#ifdef SMSCENTER_ONE
						strNewSmsNum.Append(_T("1550000"));
#endif
#ifdef SMSCENTER_THREE
						strNewSmsNum.Append(_T("3550000"));
#endif
						CString strLeftSmsNum = strNewSmsNum.Left(10);
						str.Format(_T("select top 1 * from TD2Signature where TDID=%d and left(smsnum,10)='%s' order by smsnum desc"), pUploadRet->iTDID, strLeftSmsNum);
						if (m_AdoRS.Open(str) && !m_AdoRS.IsEOF())
						{
							m_AdoRS.GetCollect(_T("SmsNum"), strNewSmsNum);
						}
						LONGLONG llSmsNum = _ttoll(strNewSmsNum);
						llSmsNum++;
						strNewSmsNum.Format(_T("%lld"), llSmsNum);

					}
				}
				if (strNewSmsNum.GetLength() >= 10)
				{
					_tcscpy(pData[i].szSmsNum, strNewSmsNum);
					strSmsNum = strNewSmsNum;  //新端口号
				}
				else
				{
					iError = 1;
				}
			}
			if (strSmsNum.GetLength() <= 0)  //没有端口号的有问题
			{
				iError = 1;
			}
			if (iError == 0 && iIgnore == 0) //上面没出错并且没有忽略,继续
			{
				CString strStatus;
				CString strTDID;
				CString strOperType;
				CString strAuditTime = _T("NULL");
				if (pData[i].iOperType == 2)  //如果操作是删除,并且是上传已审核记录,则状态为4-已删除
				{
					if (iStatus == 2)
					{
						iStatus = 4;////状态,0-待上报;1-已上报;2-已审核通过;3-已审核未通过;4-已删除

						strAuditTime = _T("GetDate()");  //审核时间为上传记录时间
					}
				}
				strStatus.Format(_T("%d"), iStatus);
				strTDID.Format(_T("%d"), pData[i].iTDID);
				strOperType.Format(_T("%d"), pData[i].iOperType);

				if (iAdd == 1)
				{
					//添加记录
					str.Format(_T("insert into TD2Signature (Status,TDID,Signature,SmsNum,CorpID,UserID,OperType,AuditTime,MainSmsNum,CorpanyName,CorpanyNum,Provvince,City,LegalName,LegalCertType,LegalCertID,AgencyName,AgencyCertType,AgencyCertID,PortUsage,PortType,PortUsageCategory,SignatureSource,LocationServerRoom,ContentTemplate,BZ,OperUser) " \
						"values(% d, % d, '%s', '%s', % d, % d, % d, % s, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s','%s')"),
						iStatus,
						pData[i].iTDID,
						SqlStr(strSignature),
						SqlStr(strSmsNum),
						0, 0,  //corpID,UserID
						pData[i].iOperType,
						strAuditTime,
						SqlStr(pData[i].szMainSmsNum),
						SqlStr(pData[i].szCorpanyName),
						SqlStr(pData[i].szCorpanyNum),
						SqlStr(pData[i].szProvvince),
						SqlStr(pData[i].szCity),
						SqlStr(pData[i].szLegalName),
						SqlStr(pData[i].szLegalCertType),
						SqlStr(pData[i].szLegalCertID),
						SqlStr(pData[i].szAgencyName),
						SqlStr(pData[i].szAgencyCertType),
						SqlStr(pData[i].szAgencyCertID),
						SqlStr(pData[i].szPortUsage),
						SqlStr(pData[i].szPortType),
						SqlStr(pData[i].szPortUsageCategory),
						SqlStr(pData[i].szSignatureSource),
						SqlStr(pData[i].szLocationServerRoom),
						SqlStr(pData[i].szContentTemplate),
						SqlStr(strBZ),
						SqlStr(m_szLoginName) );
				}
				else
				{
					//修改记录
					CString strSignatureID;
					strSignatureID.Format(_T("%d"), pData[i].iSignatureID);

					str = CString("update TD2Signature set ") +
						CString("Status='") + strStatus + CString("',") +
						CString("TDID=") + strTDID + CString(",") +
						CString("Signature='") + SqlStr(strSignature) + CString("',") +
						CString("SmsNum='") + SqlStr(strSmsNum) + CString("',") +
						CString("CorpID='") + CString(_T("0")) + CString("',") +
						CString("UserID='") + CString(_T("0")) + CString("',") +
						CString("OperType='") + strOperType + CString("',") +
						CString("AuditTime=") + strAuditTime + CString(",") +
						CString("MainSmsNum='") + SqlStr(pData[i].szMainSmsNum) + CString("',") +
						CString("CorpanyName='") + SqlStr(pData[i].szCorpanyName) + CString("',") +
						CString("CorpanyNum='") + SqlStr(pData[i].szCorpanyNum) + CString("',") +
						CString("Provvince='") + SqlStr(pData[i].szProvvince) + CString("',") +
						CString("City='") + SqlStr(pData[i].szCity) + CString("',") +
						CString("LegalName='") + SqlStr(pData[i].szLegalName) + CString("',") +
						CString("LegalCertType='") + SqlStr(pData[i].szLegalCertType) + CString("',") +
						CString("LegalCertID='") + SqlStr(pData[i].szLegalCertID) + CString("',") +
						CString("AgencyName='") + SqlStr(pData[i].szAgencyName) + CString("',") +
						CString("AgencyCertType='") + SqlStr(pData[i].szAgencyCertType) + CString("',") +
						CString("AgencyCertID='") + SqlStr(pData[i].szAgencyCertID) + CString("',") +
						CString("PortUsage='") + SqlStr(pData[i].szPortUsage) + CString("',") +
						CString("PortType='") + SqlStr(pData[i].szPortType) + CString("',") +
						CString("PortUsageCategory='") + SqlStr(pData[i].szPortUsageCategory) + CString("',") +
						CString("SignatureSource='") + SqlStr(pData[i].szSignatureSource) + CString("',") +
						CString("LocationServerRoom='") + SqlStr(pData[i].szLocationServerRoom) + CString("',") +
						CString("ContentTemplate='") + SqlStr(pData[i].szContentTemplate) + CString("',") +
						CString("BZ='") + SqlStr(strBZ) + CString("', ") +
						CString("OperUser='") + SqlStr(m_szLoginName) + CString("' ") +
						CString("where SignatureID=") + strSignatureID;
				}

				if (!m_AdoRS.Open(str))  //执行失败
				{
					iCover = 0;  //
					iAdd = 0;
					iDel = 0;
					iError = 1;
				}
			}

			pUploadRet->iCover = pUploadRet->iCover + iCover;
			pUploadRet->iAdd = pUploadRet->iAdd + iAdd;
			pUploadRet->iDel = pUploadRet->iDel + iDel;
			pUploadRet->iIgnore = pUploadRet->iIgnore + iIgnore;
			pUploadRet->iFail = pUploadRet->iFail + iError;
		}

		long lSize = sizeof(ANS_TD2Signature_Upload) + sizeof(ANS_TD2Signature_Data) * 0;// pUploadRet->iCount;  //暂时不返回具体数据
		BYTE* pDataRet = new BYTE[lSize];
		memset(pDataRet, 0, lSize);
		ANS_TD2Signature_Upload* pRet = (ANS_TD2Signature_Upload*)pDataRet;
		ANS_TD2Signature_Data* pRetData = (ANS_TD2Signature_Data*)(pDataRet + sizeof(ANS_TD2Signature_Upload));
		*pRet = *pUploadRet;
		delete pUploadRet;  //删除之前新增的返回头数据
		/*
		for (int i = 0; i < lCount && !m_AdoRS.IsEOF(); i++)
		{
			m_AdoRS.GetCollect(_T("TDID"), pRetData->iTDID);
			m_AdoRS.GetCollect(_T("AccessPort"), pRetData->szSmsNum);
			m_AdoRS.GetCollect(_T("SignatureTitle"), pRetData->szSignatureTitle);

			m_AdoRS.MoveNext();
			pRetData++;
		}
		*/
		pRet->iStatus = 0;  //返回记录数
		_tcscpy(pRet->szErrMsg, _T("上传成功"));

		SendFrame(SMSFUNC_TD2SIGNATURE_UPLOAD, (BYTE*)pDataRet, lSize);  //发送返回
		return 1;
	}
	catch (...)
	{
		LOG_APPERROR(_T("T"));
		return 0;
	}
	return 0;
}