SmsManager/DLG_C_TDSet_Signature_Upload.cpp

577 lines
17 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// DLG_C_TDSet_Signature_Upload.cpp: 实现文件
//
#include "StdAfx.h"
#include "SmsManager.h"
#include "afxdialogex.h"
#include "DLG_C_TDSet_Signature_Upload.h"
#include "MainFrm.h"
#include "ProcessSocket.h"
// DLG_C_TDSet_Signature_Upload 对话框
IMPLEMENT_DYNAMIC(DLG_C_TDSet_Signature_Upload, CDialogEx)
DLG_C_TDSet_Signature_Upload::DLG_C_TDSet_Signature_Upload(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_C_TDSET_SIGNATURE_UPLOAD, pParent)
, m_lConflct(0)
, m_strFileName(_T(""))
, m_strInfo(_T(""))
, m_lType(0)
{
m_pMainFrame = NULL;
m_pTitleData = NULL;
m_TitleCurPos = NULL;
m_bUploading = false;
m_lNeedUploadCount = 0;
}
DLG_C_TDSet_Signature_Upload::~DLG_C_TDSet_Signature_Upload()
{
}
void DLG_C_TDSet_Signature_Upload::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDD_C_TDSET_SIGNATURE_UPLOAD_TD, m_L_TD);
DDX_CBIndex(pDX, IDD_C_TDSET_SIGNATURE_UPLOAD_CONFLICT, m_lConflct);
DDX_Text(pDX, IDD_C_TDSET_SIGNATURE_UPLOAD_FILE, m_strFileName);
DDX_Text(pDX, IDD_C_TDSET_SIGNATURE_UPLOAD_INFO, m_strInfo);
DDX_CBIndex(pDX, IDD_C_TDSET_SIGNATURE_UPLOAD_TYPE, m_lType);
DDX_Control(pDX, IDD_C_TDSET_SIGNATURE_UPLOAD_UPLOAD, m_B_Upload);
DDX_Control(pDX, IDD_C_TDSET_SIGNATURE_UPLOAD_AUTOPORT, m_B_AutoPort);
DDX_Control(pDX, IDD_C_TDSET_SIGNATURE_UPLOAD_PROCESS, m_P_GDT);
}
BEGIN_MESSAGE_MAP(DLG_C_TDSet_Signature_Upload, CDialogEx)
ON_BN_CLICKED(IDCANCEL, &DLG_C_TDSet_Signature_Upload::OnBnClickedCancel)
ON_WM_CLOSE()
ON_BN_CLICKED(IDD_C_TDSET_SIGNATURE_UPLOAD_FILE_SEL, &DLG_C_TDSet_Signature_Upload::OnBnClickedCTdsetSignatureUploadFileSel)
ON_BN_CLICKED(IDD_C_TDSET_SIGNATURE_UPLOAD_UPLOAD, &DLG_C_TDSet_Signature_Upload::OnBnClickedCTdsetSignatureUploadUpload)
ON_CBN_SELCHANGE(IDD_C_TDSET_SIGNATURE_UPLOAD_TYPE, &DLG_C_TDSet_Signature_Upload::OnSelchangeIddCTdsetSignatureUploadType)
ON_CBN_SELCHANGE(IDD_C_TDSET_SIGNATURE_UPLOAD_TD, &DLG_C_TDSet_Signature_Upload::OnSelchangeIddCTdsetSignatureUploadTd)
ON_CBN_SELCHANGE(IDD_C_TDSET_SIGNATURE_UPLOAD_CONFLICT, &DLG_C_TDSet_Signature_Upload::OnSelchangeIddCTdsetSignatureUploadConflict)
ON_BN_CLICKED(IDD_C_TDSET_SIGNATURE_UPLOAD_AUTOPORT, &DLG_C_TDSet_Signature_Upload::OnClickedIddCTdsetSignatureUploadAutoport)
END_MESSAGE_MAP()
// DLG_C_TDSet_Signature_Upload 消息处理程序
void DLG_C_TDSet_Signature_Upload::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
CDialogEx::OnCancel();
}
void DLG_C_TDSet_Signature_Upload::SetParam(CMainFrame* pFrame, CTD2SignatureTitle_Data * titleData, POSITION TitleCurPos)
{
m_pMainFrame = pFrame;
m_pTitleData = titleData;
m_TitleCurPos = TitleCurPos;
}
BOOL DLG_C_TDSet_Signature_Upload::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化
int iCurSel = -1;
POSITION pos = m_pTitleData->GetHeadPosition();
while (pos != NULL )
{
POSITION pos2 = pos;
ANS_TD2SignatureTitle_Data * pTitle = m_pTitleData->GetNext(pos);
CString str;
str.Format(_T("%s - %s"), pTitle->szSignatureTitle, pTitle->szSmsNum);
int iItem = m_L_TD.AddString(str);
m_L_TD.SetItemData(iItem, (DWORD)pos2);
if (pos2 == m_TitleCurPos)
{
iCurSel = iItem;
}
}
m_L_TD.SetCurSel(iCurSel);
m_B_Upload.EnableWindow(false); //上传按扭不给按
UpdateData(true);
m_lConflct = 0; //冲突处理
m_lType = 0; //上传类型
UpdateData(false);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
void DLG_C_TDSet_Signature_Upload::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialogEx::OnClose();
}
BOOL DLG_C_TDSet_Signature_Upload::ProcessSocket(Socket_Head_Add* pHead, BYTE* pFrame)
{
CString strTemp;
CString str;
//查看签名报备信息
if (pHead->lFuncType == SMSFUNC_TD2SIGNATURE_UPLOAD)
{
ANS_TD2Signature_Upload* pUpload = (ANS_TD2Signature_Upload*)pFrame;
ANS_TD2Signature_Data* pData = (ANS_TD2Signature_Data*)(pFrame + sizeof(ANS_TD2Signature_Upload));
UploadNext(pUpload);
return true;
}
return false;
}
void DLG_C_TDSet_Signature_Upload::OnBnClickedCTdsetSignatureUploadFileSel()
{
UpdateData(true);
CString str;
int iCurSel = m_L_TD.GetCurSel();
if (iCurSel < 0)
{
MessageBox(_T("请先选择一个通道再进行签名上传!"), _T("错误"), MB_ICONERROR);
return;
}
ANS_TD2SignatureTitle_Data* pTitle = NULL;
POSITION pos = (POSITION)m_L_TD.GetItemData(iCurSel);
if (pos)
{
pTitle = m_pTitleData->GetNext(pos);
}
if (!pTitle)
{
MessageBox(_T("请先选择一个通道再进行签名上传2"), _T("错误"), MB_ICONERROR);
return;
}
m_TDSmsNum = pTitle->szSmsNum;
m_TDID = pTitle->iTDID;
m_bAutoPort = m_B_AutoPort.GetCheck();
if (m_lType == 1) //存量签名
{
if (m_lConflct == 3) //换端口号申请
{
MessageBox(_T("注意,你选择的是上传存量签名,不能再选择换端口申请选项!"), _T("错误"), MB_ICONERROR);
return;
}
m_bAutoPort = false; //存量签名,不存在自动端口功能
}
#define FILE_FILTER_TEXT \
TEXT("Excel 文件 (*.xls,*.xlsx)\0*.xls\0*.xlsx\0")\
TEXT("所有文件 (*.*)\0*.*;\0\0")
TCHAR szFile[256];
TCHAR szFileB[256];
*szFileB = NULL;
_stprintf(szFile, _T("*.xls"));
OPENFILENAME sOpen;
sOpen.lStructSize = sizeof(sOpen);
sOpen.hwndOwner = this->m_hWnd;
sOpen.Flags = OFN_EXPLORER | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY;
sOpen.lpstrFilter = FILE_FILTER_TEXT;
sOpen.lpstrDefExt = _T("签名文件.xls");
sOpen.lpstrCustomFilter = NULL;
sOpen.nMaxCustFilter = 0;
sOpen.lpstrFile = szFile;
sOpen.nMaxFile = sizeof(szFile);
sOpen.lpstrFileTitle = szFileB;
sOpen.nMaxFileTitle = sizeof(szFileB);
sOpen.lpstrInitialDir = NULL;
sOpen.lpstrTitle = _T("选择上传的签名文件");
if (::GetOpenFileName(&sOpen))
{
CString strFileName = sOpen.lpstrFile;
//第一步连接到Excel数据库
CAdoRecordSet adoRSX3;
if (m_AdoConnectX.ConnectExcel(strFileName))
{
m_AdoRSX.SetAdoConnection(&m_AdoConnectX);
m_AdoRSX2.SetAdoConnection(&m_AdoConnectX);
//查找第一个工作区
//创建QueryLog表
CString strTableName = _T("Sheet1$");
adoRSX3 = m_AdoConnectX.OpenSchema(adSchemaColumns);
if (!adoRSX3.IsEOF())
{
adoRSX3.GetCollect(_T("TABLE_NAME"), strTableName);
//strTableName.Replace(_T("$"), _T(""));
//strTableName.Replace(_T("'"), _T(""));
}
str.Format(_T("select * from [%sA1:IV65536]"), strTableName);
//adoRSX.Open(_T("select * from [Sheet1$A1:IV65536]"));
m_AdoRSX.Open(str);
long lAllCount = 0;
long lCorpNameError = 0; //企业名称有误数量
long lSignatureError = 0; //签名有误数量
long lSmsNumError = 0; //端口号有误数量
long lSucessCount = 0; //有效数量
lAllCount = m_AdoRSX.GetRecordCount();
m_AdoRSX.MoveFirst();
for (int i = 0; i < lAllCount && !m_AdoRSX.IsEOF(); i++)
{
CString strCorpName;
CString strSignature;
CString strSmsNum;
m_AdoRSX.GetCollect(_T("企业名称"), strCorpName); strCorpName.Trim();
m_AdoRSX.GetCollect(_T("短信签名"), strSignature); strSignature.Trim();
m_AdoRSX.GetCollect(_T("短信子端口号"), strSmsNum); strSmsNum.Trim();
if (strCorpName.GetLength() < 4) //企业名称<4认为是失败
{
lCorpNameError++;
}
else
{
if (strSignature.GetLength() < 2) //签名<2认为是失败
{
lCorpNameError++;
}
else
{
if (strSmsNum.GetLength() > 0)
{
if (strSmsNum.Find(m_TDSmsNum) == 0) //以主端口号开始的子端口号
{
lSucessCount++; //正常的记录
}
else
{
lSmsNumError++;
}
}
else
{
if (m_bAutoPort) //端口号为空的,可以选择自动生成端口号
{
lSucessCount++; //正常的记录
}
else
{
lSmsNumError++;
}
}
}
}
m_AdoRSX.MoveNext();
}
UpdateData(true);
m_strInfo.Format(_T("%s\r\n总记录数:%d\r\n企业名称有误:%d\r\n签名有误:%d\r\n端口号有误:%d\r\n有效记录数:%d\r\n"), strFileName, lAllCount, lCorpNameError, lSignatureError, lSmsNumError, lSucessCount);
m_strFileName = strFileName;
UpdateData(false);
if (lSucessCount>0)
{
m_bUploading = false;
m_B_Upload.EnableWindow(true);
m_lNeedUploadCount = lSucessCount;
}
}
else
{
str.Format(_T("打开文件失败:%s"), strFileName);
MessageBox(str, _T("错误"), MB_ICONWARNING);
return;
}
return;
}
}
void DLG_C_TDSet_Signature_Upload::OnSelchangeIddCTdsetSignatureUploadType()
{
UpdateData(true);
if (m_lType == 0) //已审核签名,不用新生成端口号
{
m_B_AutoPort.EnableWindow(true);
}
else
{
m_B_AutoPort.EnableWindow(false);
m_B_AutoPort.SetCheck(false);
}
ReSelFile();
}
void DLG_C_TDSet_Signature_Upload::OnSelchangeIddCTdsetSignatureUploadTd()
{
ReSelFile();
}
void DLG_C_TDSet_Signature_Upload::OnSelchangeIddCTdsetSignatureUploadConflict()
{
ReSelFile();
}
void DLG_C_TDSet_Signature_Upload::OnClickedIddCTdsetSignatureUploadAutoport()
{
ReSelFile();
}
void DLG_C_TDSet_Signature_Upload::ReSelFile()
{
UpdateData(true);
m_strInfo = _T("");
//m_strFileName = _T("");
UpdateData(false);
m_B_Upload.EnableWindow(false);
m_P_GDT.ShowWindow(SW_HIDE);
m_TDSmsNum = _T("");
m_TDID = 0;
m_bAutoPort = false;
m_lNeedUploadCount = 0;
m_bUploading = false;
}
void DLG_C_TDSet_Signature_Upload::EnableSel(BOOL bEnable)
{
GetDlgItem(IDD_C_TDSET_SIGNATURE_UPLOAD_TD)->EnableWindow(bEnable);
GetDlgItem(IDD_C_TDSET_SIGNATURE_UPLOAD_TYPE)->EnableWindow(bEnable);
GetDlgItem(IDD_C_TDSET_SIGNATURE_UPLOAD_AUTOPORT)->EnableWindow(bEnable);
GetDlgItem(IDD_C_TDSET_SIGNATURE_UPLOAD_CONFLICT)->EnableWindow(bEnable);
GetDlgItem(IDD_C_TDSET_SIGNATURE_UPLOAD_FILE_SEL)->EnableWindow(bEnable);
}
void DLG_C_TDSet_Signature_Upload::OnBnClickedCTdsetSignatureUploadUpload()
{
if (!m_bUploading)
{
if (m_lNeedUploadCount > 0 && m_AdoRSX.GetRecordCount()>= m_lNeedUploadCount )
{
m_B_Upload.SetWindowText(_T("取消上传"));
m_B_Upload.EnableWindow(true);
EnableSel(false); //正在上传中,不允许更改选项
m_bUploading = true;
m_P_GDT.SetRange(0, m_lNeedUploadCount); //设置滚动条位置
m_P_GDT.ShowWindow(SW_SHOW);
ANS_TD2Signature_Upload SignatureUpload = { 0 };
SignatureUpload.iAllCount = m_lNeedUploadCount;
SignatureUpload.iCount = 0;
SignatureUpload.iType = m_lType;
SignatureUpload.iConflict = m_lConflct;
SignatureUpload.iAutoPort = m_bAutoPort;
SignatureUpload.iTDID = m_TDID;
SignatureUpload.iStatus = 0;
m_AdoRSX.MoveFirst();
UploadNext(&SignatureUpload);
}
}
else
{
//停止
m_B_Upload.SetWindowText(_T("上传签名"));
m_B_Upload.EnableWindow(false);
EnableSel(true); //取消后可以重新选择上传
ReSelFile(); //可以重新选择文件
m_bUploading = false;
}
}
void DLG_C_TDSet_Signature_Upload::UploadNext(ANS_TD2Signature_Upload * pAnsUpload)
{
CString str;
if (pAnsUpload->iUpCount >= pAnsUpload->iAllCount || m_AdoRSX.IsEOF() || !m_bUploading || pAnsUpload->iStatus!=0 ) //上传已完成
{
//上传已完成
m_P_GDT.SetPos(pAnsUpload->iUpCount); //设置滚动条位置
m_B_Upload.SetWindowText(_T("上传签名"));
m_B_Upload.EnableWindow(false);
EnableSel(true); //取消后可以重新选择上传
m_bUploading = false;
ReSelFile(); //可以重新选择文件
//显示上传记录数
UpdateData(true);
m_strInfo.Format(_T("%s\r\n有效总记录数:%d\r\n已上传记录数:%d\r\n覆盖数:%d\r\n新增数:%d\r\n删除数:%d\r\n忽略数:%d\r\n失败数:%d\r\n"), m_strFileName, pAnsUpload->iAllCount, pAnsUpload->iUpCount, pAnsUpload->iCover, pAnsUpload->iAdd, pAnsUpload->iDel,pAnsUpload->iIgnore, pAnsUpload->iFail);
if (pAnsUpload->iStatus != 0)
{
m_strInfo.Append(_T("\r\n上传异常:"));
m_strInfo.Append(pAnsUpload->szErrMsg);
}
UpdateData(false);
str.Format(_T("上传%s签名数据成功\r\n共上传%d条记录"), m_strFileName, pAnsUpload->iUpCount);
MessageBox(str, _T("信息"), MB_ICONINFORMATION);
}
else
{
m_P_GDT.SetPos(pAnsUpload->iUpCount); //设置滚动条位置
//上传下一个数据包
//先取20条记录看能不能取到
long lMaxCount = 50;
#ifdef _DEBUG
lMaxCount = 10;
#endif
ANS_TD2Signature_Data* pData = new ANS_TD2Signature_Data[lMaxCount];
memset(pData, 0, sizeof(ANS_TD2Signature_Data) * lMaxCount);
int i = 0;
while( !m_AdoRSX.IsEOF() && i< lMaxCount)
{
CString strCorpName;
CString strSignature;
CString strSmsNum;
BOOL bNeedUpload = false;
m_AdoRSX.GetCollect(_T("企业名称"), strCorpName); strCorpName.Trim();
m_AdoRSX.GetCollect(_T("短信签名"), strSignature); strSignature.Trim();
m_AdoRSX.GetCollect(_T("短信子端口号"), strSmsNum); strSmsNum.Trim();
if (strCorpName.GetLength() < 4) //企业名称<4认为是失败
{
//lCorpNameError++;
}
else
{
if (strSignature.GetLength() < 2) //签名<2认为是失败
{
//lCorpNameError++;
}
else
{
if (strSmsNum.GetLength() > 0)
{
if (strSmsNum.Find(m_TDSmsNum) == 0) //以主端口号开始的子端口号
{
//lSucessCount++; //正常的记录
bNeedUpload = true;
}
else
{
//lSmsNumError++;
}
}
else
{
if (m_bAutoPort) //端口号为空的,可以选择自动生成端口号
{
//lSucessCount++; //正常的记录
bNeedUpload = true;
}
else
{
//lSmsNumError++;
}
}
}
}
if (bNeedUpload)
{
pData[i].iTDID = m_TDID;
strCorpName.Replace(_T("'"), _T(""));
strSignature.Replace(_T("'"), _T(""));
strSmsNum.Replace(_T("'"), _T(""));
_tcscpy(pData[i].szCorpanyName, strCorpName);
_tcscpy(pData[i].szSignature, strSignature);
_tcscpy(pData[i].szSmsNum, strSmsNum);
m_AdoRSX.GetCollect(_T("操作类型"), str); str.Trim(); str.Replace(_T("'"), _T(""));
pData[i].iOperType = 0; //默认操作类型为新增
if (str == CString(_T("修改")) ){ pData[i].iOperType = 1; } //修改
if (str == CString(_T("删除"))) { pData[i].iOperType = 2; } //删除
m_AdoRSX.GetCollect(_T("短信主端口号"), str); str.Trim(); str.Replace(_T("'"), _T(""));
_tcscpy(pData[i].szMainSmsNum, str);
m_AdoRSX.GetCollect(_T("接入省"), str); str.Trim(); str.Replace(_T("'"), _T(""));
_tcscpy(pData[i].szProvvince, str);
m_AdoRSX.GetCollect(_T("接入地市"), str); str.Trim(); str.Replace(_T("'"), _T(""));
_tcscpy(pData[i].szCity, str);
m_AdoRSX.GetCollect(_T("端口类型"), str); str.Trim(); str.Replace(_T("'"), _T(""));
_tcscpy(pData[i].szPortType, str);
m_AdoRSX.GetCollect(_T("用途类别"), str); str.Trim(); str.Replace(_T("'"), _T(""));
_tcscpy(pData[i].szPortUsageCategory, str);
m_AdoRSX.GetCollect(_T("企业统一社会信用代码"), str); str.Trim(); str.Replace(_T("'"), _T(""));
_tcscpy(pData[i].szCorpanyNum, str);
m_AdoRSX.GetCollect(_T("责任人名称"), str); str.Trim(); str.Replace(_T("'"), _T(""));
_tcscpy(pData[i].szLegalName, str);
m_AdoRSX.GetCollect(_T("责任人证件类型"), str); str.Trim(); str.Replace(_T("'"), _T(""));
_tcscpy(pData[i].szLegalCertType, str);
m_AdoRSX.GetCollect(_T("责任人证件号码"), str); str.Trim(); str.Replace(_T("'"), _T(""));
_tcscpy(pData[i].szLegalCertID, str);
m_AdoRSX.GetCollect(_T("经办人名称"), str); str.Trim(); str.Replace(_T("'"), _T(""));
_tcscpy(pData[i].szAgencyName, str);
m_AdoRSX.GetCollect(_T("经办人证件类型"), str); str.Trim(); str.Replace(_T("'"), _T(""));
_tcscpy(pData[i].szAgencyCertType, str);
m_AdoRSX.GetCollect(_T("经办人证件号码"), str); str.Trim(); str.Replace(_T("'"), _T(""));
_tcscpy(pData[i].szAgencyCertID, str);
m_AdoRSX.GetCollect(_T("具体用途"), str); str.Trim(); str.Replace(_T("'"), _T(""));
_tcscpy(pData[i].szPortUsage, str);
m_AdoRSX.GetCollect(_T("签名来源"), str); str.Trim(); str.Replace(_T("'"), _T(""));
_tcscpy(pData[i].szSignatureSource, str);
m_AdoRSX.GetCollect(_T("短信端口企业接入机房及设备"), str); str.Trim(); str.Replace(_T("'"), _T(""));
_tcscpy(pData[i].szLocationServerRoom, str);
m_AdoRSX.GetCollect(_T("短信模板"), str); str.Trim(); str.Replace(_T("'"), _T(""));
_tcscpy(pData[i].szContentTemplate, str);
i++;
}
m_AdoRSX.MoveNext();
}
long lSize = sizeof(REQ_TD2Signature_Upload) + sizeof(ANS_TD2Signature_Data) * i;
BYTE* pDataByte = new BYTE[lSize];
memset(pDataByte, 0, lSize);
REQ_TD2Signature_Upload* pUpload = (REQ_TD2Signature_Upload * )pDataByte;
ANS_TD2Signature_Data * pUploadData = (ANS_TD2Signature_Data*)(pDataByte+sizeof(REQ_TD2Signature_Upload));
memcpy((BYTE*)pUploadData, (BYTE*)pData, sizeof(ANS_TD2Signature_Data)* i); //复制数据
delete [] pData;
pUpload->iTDID = pAnsUpload->iTDID;
pUpload->iType = pAnsUpload->iType;
pUpload->iConflict = pAnsUpload->iConflict;
pUpload->iAutoPort = pAnsUpload->iAutoPort;
pUpload->iAllCount = pAnsUpload->iAllCount;
pUpload->iCount = i;
pUpload->iUpCount = pAnsUpload->iUpCount;
pUpload->iCover = pAnsUpload->iCover;
pUpload->iAdd = pAnsUpload->iAdd;
pUpload->iDel = pAnsUpload->iDel;
pUpload->iIgnore = pAnsUpload->iIgnore;
pUpload->iFail = pAnsUpload->iFail;
m_pMainFrame->SendFrame(SMSFUNC_TD2SIGNATURE_UPLOAD, pDataByte, lSize);
}
}