// 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); } }