// DLG_ChangeCM.cpp : implementation file // #include "stdafx.h" #include "smsmanager.h" #include "DLG_ChangeCM.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // DLG_ChangeCM dialog DLG_ChangeCM::DLG_ChangeCM(CWnd* pParent /*=NULL*/) : CDialog(DLG_ChangeCM::IDD, pParent) , m_strCorpID(_T("")) , m_strCorpName(_T("")) , m_strUserName(_T("")) , m_strFileName1(_T("")) , m_lDocument1Type(0) , m_strFileName2(_T("")) , m_lDocument2Type(0) , m_strRemark(_T("")) , m_lSignNameType(0) , m_lBelongTo(0) { //{{AFX_DATA_INIT(DLG_ChangeCM) m_strCM = _T(""); m_lModifyType=0; m_lCorpID=0; m_lUserID = 0; m_lAgentID = 0; m_pMainFrame = 0; // m_strMsg = _T(""); //}}AFX_DATA_INIT m_bProcess = false; memset(&m_SignNameData, 0, sizeof(m_SignNameData)); m_lUpAllSize = 0; m_lUpUpSize = 0; m_lUpFileID = 0; m_lUploadFileIndex = 0; } void DLG_ChangeCM::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(DLG_ChangeCM) DDX_Text(pDX, IDC_CHANGECM_CM, m_strCM); DDV_MaxChars(pDX, m_strCM, 20); // DDX_Text(pDX, IDC_CHANGECM_MSG, m_strMsg); // DDV_MaxChars(pDX, m_strMsg, 510); //}}AFX_DATA_MAP DDX_Text(pDX, IDC_CHANGECM_CORPID, m_strCorpID); DDX_Text(pDX, IDC_CHANGECM_CORPNAME, m_strCorpName); DDX_Text(pDX, IDC_CHANGECM_USERNAME, m_strUserName); // DDX_Text(pDX, IDC_CHANGECM_DOCUMENT1FILE, m_strFileName); DDX_Control(pDX, IDC_CHANGECM_DOCUMENT1FILE, m_E_FileName1); DDX_Text(pDX, IDC_CHANGECM_DOCUMENT1FILE, m_strFileName1); DDX_CBIndex(pDX, IDC_CHANGECM_DOCUMENT1TYPE, m_lDocument1Type); // DDX_Control(pDX, IDC_CHANGECM_DOCUMENT2FILE, m_E_File2); DDX_Control(pDX, IDC_CHANGECM_DOCUMENT2FILE, m_E_FileName2); DDX_Text(pDX, IDC_CHANGECM_DOCUMENT2FILE, m_strFileName2); DDX_CBIndex(pDX, IDC_CHANGECM_DOCUMENT2TYPE, m_lDocument2Type); DDX_Text(pDX, IDC_CHANGECM_REMARK, m_strRemark); DDV_MaxChars(pDX, m_strRemark, 100); DDX_CBIndex(pDX, IDC_CHANGECM_SIGNNMETYPE, m_lSignNameType); DDX_CBIndex(pDX, IDC_CHANGECM_BELONGTO, m_lBelongTo); } BEGIN_MESSAGE_MAP(DLG_ChangeCM, CDialog) //{{AFX_MSG_MAP(DLG_ChangeCM) //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_CHANGECM_DOCUMENT1FILESEL, &DLG_ChangeCM::OnBnClickedChangecmDocument1filesel) ON_BN_CLICKED(IDOK, &DLG_ChangeCM::OnBnClickedOk) ON_BN_CLICKED(IDC_CHANGECM_DOCUMENT2FILESEL, &DLG_ChangeCM::OnBnClickedChangecmDocument2filesel) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // DLG_ChangeCM message handlers void DLG_ChangeCM::SetBZ(const TCHAR *pType, const TCHAR *pBZ) { m_strType2 = pType; m_strBZ2 = pBZ; } BOOL DLG_ChangeCM::OnInitDialog() { CDialog::OnInitDialog(); m_strCorpID.Format(_T("%d"), m_lCorpID); m_lSignNameType = 0; m_lBelongTo = 0; m_lDocument1Type = 0; m_lDocument2Type = 0; if (m_lModifyType == 0) { GetDlgItem(IDC_CHANGECM_USERNAME)->ShowWindow(SW_HIDE); GetDlgItem(IDC_CHANGECM_USERNAME_S)->ShowWindow(SW_HIDE); } UpdateData(false); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void DLG_ChangeCM::OnBnClickedChangecmDocument1filesel() { CString str; TCHAR szFile[256] = { 0 }; TCHAR szFileB[256] = { 0 }; *szFileB = NULL; OPENFILENAME sOpen; sOpen.lStructSize = sizeof(sOpen); sOpen.hwndOwner = this->m_hWnd; sOpen.Flags = OFN_EXPLORER | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY; sOpen.lpstrFilter = TEXT("证明文件 (*.jpg,*.png,*.pdf)\0*.jpg;*.png;*.pdf\0\0"); sOpen.lpstrDefExt = NULL; 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("打开签名证明文件,支持jpg,png,pdf格式"); if (!::GetOpenFileName(&sOpen)) { return; } CString strName = sOpen.lpstrFile; m_strSortFileName1 = sOpen.lpstrFileTitle; if (m_strSortFileName1.GetLength() > 32) m_strSortFileName1 = m_strSortFileName1.Right(32); CFile file; if (!file.Open(strName, CFile::modeRead)) { str.Format(_T("无法打开证明文件!\r\n%s"), strName); MessageBox(str, _T("错误"), MB_ICONWARNING); return; } if (file.GetLength() > 2*1024* 1024) { file.Close(); str.Format(_T("证明文件最大为2M,请缩小!\r\n%s"), strName); MessageBox(str, _T("错误"), MB_ICONWARNING); return; } file.Close(); m_E_FileName1.SetWindowText(strName); } void DLG_ChangeCM::OnBnClickedOk() { if (!UpdateData(true)) return; if (m_strCM.GetLength() < 3 || m_strCM.GetLength() > 30) { MessageBox(_T("填写的签名长度不符合要求,请确认!"), _T("错误"), MB_ICONWARNING); GetDlgItem(IDC_CHANGECM_CM)->SetFocus(); return; } if (m_strFileName1.GetLength() <= 0 && m_strFileName2.GetLength() <= 0) { MessageBox(_T("必须上传签名证明文件!"), _T("错误"), MB_ICONWARNING); GetDlgItem(IDC_CHANGECM_DOCUMENT1FILESEL)->SetFocus(); return; } m_lUploadFileIndex = 0; UpSignName(0); //CDialog::OnOK(); } void DLG_ChangeCM::SetParam(long lCorpID, long lUserID, long lAgentID, CMainFrame * pFrame, CString strCorpName, CString strUserName,long lModifyType) { m_lCorpID = lCorpID; m_lUserID = lUserID; m_lAgentID = lAgentID; m_pMainFrame = pFrame; m_strCorpName = strCorpName; m_strUserName = strUserName; m_lModifyType = lModifyType; } void DLG_ChangeCM::OnBnClickedChangecmDocument2filesel() { CString str; TCHAR szFile[256] = { 0 }; TCHAR szFileB[256] = { 0 }; *szFileB = NULL; OPENFILENAME sOpen; sOpen.lStructSize = sizeof(sOpen); sOpen.hwndOwner = this->m_hWnd; sOpen.Flags = OFN_EXPLORER | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY; sOpen.lpstrFilter = TEXT("证明文件 (*.jpg,*.png,*.pdf)\0*.jpg;*.png;*.pdf\0\0"); sOpen.lpstrDefExt = NULL; 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("打开签名证明文件,支持jpg,png,pdf格式"); if (!::GetOpenFileName(&sOpen)) { return; } CString strName = sOpen.lpstrFile; m_strSortFileName2=sOpen.lpstrFileTitle; if (m_strSortFileName2.GetLength() > 32) m_strSortFileName2 = m_strSortFileName2.Right(32); CFile file; if (!file.Open(strName, CFile::modeRead)) { str.Format(_T("无法打开证明文件!\r\n%s"), strName); MessageBox(str, _T("错误"), MB_ICONWARNING); return; } if (file.GetLength() > 2 * 1024 * 1024) { file.Close(); str.Format(_T("证明文件最大为2M,请缩小!\r\n%s"), strName); MessageBox(str, _T("错误"), MB_ICONWARNING); return; } file.Close(); m_E_FileName2.SetWindowText(strName); } BOOL DLG_ChangeCM::UpFileOpen() { CString strFileName; CString strSortFileName; long lDocumentType = 0; if (m_lUploadFileIndex == 0) { strFileName = m_strFileName1; strSortFileName = m_strSortFileName1; lDocumentType = m_lDocument1Type; } try { if (m_UpFile.m_hFile != CFile::hFileNull) m_UpFile.Close(); } catch (...) { } BOOL bOpenFile = false; if (strFileName.GetLength() > 0 && m_UpFile.Open(strFileName, CFile::modeRead)) { bOpenFile = true; } else { if (m_lUploadFileIndex == 1) { strFileName = m_strFileName2; strSortFileName = m_strSortFileName2; lDocumentType = m_lDocument2Type; } if (strFileName.GetLength() > 0 && m_UpFile.Open(strFileName, CFile::modeRead)) { bOpenFile = true; } } if (bOpenFile) { long lSize = sizeof(REQ_Corp_File) + sizeof(ANS_Corp_FileData); BYTE * pData = new BYTE[lSize]; memset(pData, 0, lSize); REQ_Corp_File * pPayRet = (REQ_Corp_File *)pData; ANS_Corp_FileData * pPayDataRet = (ANS_Corp_FileData *)(pData + sizeof(REQ_Corp_File)); pPayRet->lCorpID = m_lCorpID; pPayRet->lCorpType = 0;//0终端客户,1代理商 pPayRet->lReqType = 1; //添加 pPayDataRet->lCorpID = m_lCorpID; pPayDataRet->lCorpType = 0;//0终端客户,1代理商 _stprintf(pPayDataRet->szFileType, _T("签名【%s】证明材料-%d"),m_strCM,lDocumentType); _tcscpy(pPayDataRet->szFileName, strSortFileName); m_strUpFileName = strSortFileName; _tcscpy(pPayDataRet->szBZ, _T("申请签名")); ::GetLocalTime(&pPayDataRet->tFileTime); SendFrame(SMSFUNC_CORP_FILE, pData, lSize); m_lUpAllSize = m_UpFile.GetLength(); m_lUpUpSize = 0; CString strTitle; strTitle.Format(_T("正在上传证明文件:%s..."), strSortFileName); m_Process.SetProcessTitle(strTitle); return true; } else { return UpSignName(1); //添加FileID号 } return false; } BOOL DLG_ChangeCM::UpSignName(long bAddType) { if (bAddType == 0) { memset(&m_SignNameData, 0, sizeof(m_SignNameData)); m_SignNameData.lSignNameID = 0; m_SignNameData.lDefaultSignName = 1; } m_SignNameData.lCorpID = m_lCorpID; m_SignNameData.lUserID = m_lUserID; m_SignNameData.lAgentID = m_lAgentID; //if (m_lUserID > 0) m_SignNameData.lUserSignName = 1; //用户签名 m_SignNameData.lUserSignName = m_lModifyType; m_SignNameData.lSignNameType = m_lSignNameType; m_SignNameData.lSignNameBelongTo = m_lBelongTo; _tcscpy(m_SignNameData.szSignName, m_strCM); m_SignNameData.lDocument1Type = m_lDocument1Type; m_SignNameData.lDocument2Type = m_lDocument2Type; _tcscpy(m_SignNameData.szRemark, m_strRemark); REQ_SignName_Add * pAdd = new REQ_SignName_Add; memset(pAdd, 0, sizeof(REQ_SignName_Add)); pAdd->lAddType = bAddType; pAdd->data = m_SignNameData; SendFrame(SMSFUNC_SIGNNAME_ADD, (BYTE*)pAdd, sizeof(REQ_SignName_Add)); return false; } BOOL DLG_ChangeCM::UpFileNext() { #define MAXUPFILESIZE 32*1024 //每次上传32K long lSize = sizeof(REQ_Corp_File) + MAXUPFILESIZE; BYTE * pData = new BYTE[lSize]; memset(pData, 0, lSize); REQ_Corp_File * pFile = (REQ_Corp_File *)pData; BYTE * pBuf = pData + sizeof(REQ_Corp_File); pFile->lFileID = m_lUpFileID; pFile->lReqType = 4; //上传 _tcscpy(pFile->szCorpName, m_strUpFileName); pFile->lAllSize = m_lUpAllSize; DWORD dwRead = 0; dwRead = m_UpFile.Read(pBuf, MAXUPFILESIZE); if (dwRead > 0) { m_lUpUpSize += dwRead; pFile->lUpSize = m_lUpUpSize; pFile->lSize = dwRead; SendFrame(SMSFUNC_CORP_FILE, pData, lSize); return true; } return false; } BOOL DLG_ChangeCM::SendFrame(DWORD lFuncType, unsigned char *pFrame, unsigned long lFrameLen) { try { if (m_pMainFrame) return m_pMainFrame->SendFrame(lFuncType, pFrame, lFrameLen); } catch(...) { } return false; } BOOL DLG_ChangeCM::ProcessSocket(Socket_Head *pHead) { //添加文件 if (pHead->lFuncType == SMSFUNC_CORP_FILE) { ANS_Corp_File * pFile = (ANS_Corp_File *)pHead->pFrame; ANS_Corp_FileData * pFileData = (ANS_Corp_FileData *)(pHead->pFrame + sizeof(ANS_Corp_File)); if (pFile->lCount < 0) //权限不足,返回错误 return true; if (pFile->ret.lReqType == 1) //添加 { if (pFile->bOK && pFile->lCount > 0) { m_lUpFileID = pFileData->lFileID; if (m_lUploadFileIndex == 0) m_SignNameData.lDocument1FileID = m_lUpFileID; if (m_lUploadFileIndex == 1) m_SignNameData.lDocument2FileID = m_lUpFileID; UpFileNext(); } } if (pFile->ret.lReqType == 4) //上传 { if (pFile->bOK && pFile->lCount > 0) { if (pFile->ret.lAllSize == pFile->ret.lUpSize) //已上传完毕 { m_lUploadFileIndex++; UpFileOpen(); } else { m_Process.SetProcess(pFile->ret.lAllSize+1, pFile->ret.lUpSize); UpFileNext(); } } } return true; } return false; } BOOL DLG_ChangeCM::ProcessSocket(Socket_Head_Add *pHead, BYTE *pFrame) { //添加签名 if (pHead->lFuncType == SMSFUNC_SIGNNAME_ADD) { ANS_SignName_Add * pAdd = (ANS_SignName_Add *)pFrame; if (pAdd->lErrCode == 0) { if (pAdd->lAddType == 0) { m_SignNameData = pAdd->data; m_lUploadFileIndex = 0; if (UpFileOpen()) { if (!m_bProcess) { m_bProcess = true; m_Process.DoModal(); m_bProcess = false; } } } else { if (pAdd->lAddType == 1) { if (m_bProcess) { m_Process.SetProcess(100, 100); //退出进度条 } MessageBox(_T("修改签名申请已递交成功!\r\n请留意审核结果。"), _T("信息"), MB_ICONINFORMATION); CDialog::OnOK(); return true; } } } else { if (m_bProcess) { m_Process.SetProcess(100, 100); //退出进度条 } CString strError; strError.Format(_T("修改签名失败,异常原因:%s"), pAdd->szErrMsg); MessageBox(strError, _T("错误"), MB_ICONERROR); return true; } return true; } return false; }