// BackupTestDlg.cpp : 实现文件 // #include "stdafx.h" #include "BackupTest.h" #include "BackupTestDlg.h" #include "..\BackupModel\BackupInterface.h" #include "..\BackupModel\BackupFactory.h" #include "..\DelPhotoModel\DelFilesInterface.h" #include "..\DelPhotoModel\DelFilesFactory.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif typedef HRESULT (WINAPI *GetClassBackupObject)(REFCLSID, REFIID, LPVOID*); typedef HRESULT (WINAPI *GetClassDelFileObject)(REFCLSID, REFIID, LPVOID*); int WINAPI BackupFinish(LPVOID, LPVOID, LPVOID, LPVOID, LPVOID, LPVOID); int WINAPI DelFinish(LPVOID, LPVOID, LPVOID, LPVOID, LPVOID, LPVOID); // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialog { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() // CBackupTestDlg 对话框 CBackupTestDlg::CBackupTestDlg(CWnd* pParent /*=NULL*/) : CDialog(CBackupTestDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); pFactory = NULL; pInterface = NULL; hdllInst = NULL; pDelFactory = NULL; pDelInterface = NULL; } void CBackupTestDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CBackupTestDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_DESTROY() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDOK, &CBackupTestDlg::OnBnClickedOk) END_MESSAGE_MAP() // CBackupTestDlg 消息处理程序 BOOL CBackupTestDlg::OnInitDialog() { CDialog::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 LoadDllInterface(); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CBackupTestDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CBackupTestDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CBackupTestDlg::OnQueryDragIcon() { return static_cast(m_hIcon); } void CBackupTestDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 /* if(pInterface && !pInterface->IsBackup()) { TCHAR szSource[] = _T("\\\\It005-pc\\客户原片(管理软件)$"); TCHAR szDest[] = _T("\\\\It005-pc\\客户原片备份(儿童管理软件)$"); TCHAR szDomain[] = _T(""); TCHAR szOrderNum[] = _T("20150910-001"); TCHAR szPhotoName[] = _T("001|002|003|004|005|006|007|008|009|010|011|012|013|014|015|016|017|018|019|020|021|022|023|024|025|026|027|028|029|030|031|032|033|034|035|036|037|038|039|040|147|148|149|150|151|152|153|140|141|142|143|144|145|154|155|156|157|158|159|160|161|162|163|164|"); if(pInterface->InitBackupInfo(szSource, szDest, szDomain, szOrderNum, szPhotoName, TRUE)) pInterface->StartBackup(szDomain, BackupFinish); } */ //备份 if(pInterface && !pInterface->IsBackup()) { TCHAR szSource[] = _T("\\\\It005-pc\\客户原片(管理软件)$"); TCHAR szDest[] = _T("\\\\It005-pc\\客户原片备份(儿童管理软件)$"); TCHAR szDomain[] = _T("20151208000000452308.ly.com"); TCHAR szOrderNum[] = _T("20151022-001"); TCHAR szPhotoName[] = _T("001|002|003|004|005|006|"); TCHAR szOptTime[] = _T("2015-08-03 13:50:15.000"); BYTE byPhotoType = 1; BYTE byMaxCapacity = 35; BYTE byPriority = 255; //初始化多级共享目录 pInterface->InitShareDirData(1, szDomain, _T("\\\\It005-pc\\客户原片(管理软件)$"), 5, 25, 1, 255); pInterface->InitShareDirData(1, szDomain, _T("\\\\It005-pc\\修好的片(管理软件)$"), 5, 25, 2, 255); pInterface->InitShareDirData(1, szDomain, _T("\\\\It005-pc\\原片$"), 5, 25, 1, 254); pInterface->InitShareDirData(1, szDomain, _T("\\\\It005-pc\\初修$"), 5, 25, 2, 254); //将要备份的订单信息添加到队列里 pInterface->InitBackupInfo(szDomain, _T("20151022-001"), szOptTime, szPhotoName, _T("\\\\It005-pc\\客户原片备份(儿童管理软件)$"), 1, FALSE); pInterface->InitBackupInfo(szDomain, _T("lyg123456789"), szOptTime, szPhotoName, _T("\\\\It005-pc\\客户原片备份(儿童管理软件)$"), 1, FALSE); //开始备份 pInterface->StartBackup(_T("20151208000000452308.ly.com"), BackupFinish); } Sleep(3000); //删除订单相片功能 if(pDelInterface && !pDelInterface->IsDeleting()) { TCHAR szDir[MAX_PATH] = {0}; TCHAR szOrderNum[] = _T("20151022-001"); TCHAR szDomain[] = _T("20151208000000452308.ly.com"); wsprintf(szDir, _T("\\\\It005-pc\\客户原片备份(儿童管理软件)$\\%s\\%s"), szDomain, szOrderNum); BYTE byPhotoType = 1; BOOL bPickuped = 1; pDelInterface->AddDelData(szDomain, szOrderNum, szDir, byPhotoType, bPickuped); pDelInterface->StartDelFiles(DelFinish); } } /************************************************************************/ /* 函数: BackupFinish 描述: 备份相片回调 参数: LPVOID lpParam1, LPVOID lpParam2, LPVOID lpParam3, LPVOID lpParam4, LPVOID lpParam5, LPVOID lpParam6 返回; */ /************************************************************************/ int WINAPI BackupFinish(LPVOID lpParam1, LPVOID lpParam2, LPVOID lpParam3, LPVOID lpParam4, LPVOID lpParam5, LPVOID lpParam6) { int nPercent = *((int*)lpParam1); CString strMsg = _T(""); strMsg.Format(_T("完成:%d\n"), nPercent); OutputDebugString(strMsg); if ( nPercent == 100 ) { CString strDate = _T(""); strDate.Format(_T("update [IncrementalBackup] set [isbackup] = 1,[baktime] = getdate() where [branchid] = '%s' and [order] = '%s' and photoType = %d and content = '%s'\n"), (TCHAR*)lpParam2, (TCHAR*)lpParam4, *((BYTE*)lpParam5), (TCHAR*)lpParam6); OutputDebugString(strDate); } return 1; } /************************************************************************/ /* 函数: DelFinish 描述: 删除相片回调 参数: LPVOID lpParam1, LPVOID lpParam2, LPVOID lpParam3, LPVOID lpParam4, LPVOID lpParam5, LPVOID lpParam6 返回; */ /************************************************************************/ int WINAPI DelFinish(LPVOID lpParam1, LPVOID lpParam2, LPVOID lpParam3, LPVOID lpParam4, LPVOID lpParam5, LPVOID lpParam6) { BYTE byType = *((BYTE*)lpParam1); BOOL bSuccess = *((BOOL*)lpParam5); TCHAR szDomain[64] = {0}; TCHAR szOrderNum[64] = {0}; TCHAR szDir[MAX_PATH] = {0}; _stprintf(szDomain, _T("%s") , (TCHAR*)lpParam2); _stprintf(szOrderNum, _T("%s") , (TCHAR*)lpParam3); _stprintf(szDir, _T("%s") , (TCHAR*)lpParam4); if(!bSuccess) return 0; CString updateSql = _T(""); switch ( byType ) { case 1: updateSql.Format(_T("update [PhotoManager] set [opdel] = 1,[opdeltm] = getdate() where [order] = '%s' and [branchid] = '%s'\n"), szOrderNum, szDomain); break; case 2: updateSql.Format(_T("update [PhotoManager] set [epdel] = 1,[epdeltm] = getdate() where [order] = '%s' and [branchid] = '%s'\n"), szOrderNum, szDomain); break; case 3: updateSql.Format(_T("update [PhotoManager] set [fpdel] = 1,[fpdeltm] = getdate() where [order] = '%s' and [branchid] = '%s'\n"), szOrderNum, szDomain); break; case 4: updateSql.Format(_T("update [PhotoManager] set [dpdel] = 1,[dpdeltm] = getdate() where [order] = '%s' and [branchid] = '%s'\n"), szOrderNum, szDomain); break; ////////////////////////////////////////////////////////////////////////// case 5: updateSql.Format(_T("update [PhotoManager] set [opbdel] = 1,[opbdeltm] = getdate() where [order] = '%s' and [branchid] = '%s'\n"), szOrderNum, szDomain); break; case 6: updateSql.Format(_T("update [PhotoManager] set [epbdel] = 1,[epbdeltm] = getdate() where [order] = '%s' and [branchid] = '%s'\n"), szOrderNum, szDomain); break; case 7: updateSql.Format(_T("update [PhotoManager] set [fpbdel] = 1,[fpbdeltm] = getdate() where [order] = '%s' and [branchid] = '%s'\n"), szOrderNum, szDomain); break; case 8: updateSql.Format(_T("update [PhotoManager] set [dpbdel] = 1,[dpbdeltm] = getdate() where [order] = '%s' and [branchid] = '%s'\n"), szOrderNum, szDomain); break; default: break; } OutputDebugString(updateSql); return 1; } /************************************************************************/ /* 函数: OnDestroy 描述: 释放接口 参数: 返回; */ /************************************************************************/ void CBackupTestDlg::OnDestroy() { if(pInterface) pInterface->Release(); if(pFactory) pFactory->Release(); if(pDelInterface) pDelInterface->Release(); if(pDelFactory) pDelFactory->Release(); if(hdllInst) FreeLibrary(hdllInst); } /************************************************************************/ /* 函数: LoadDllInterface 描述: 加载备份删除接口Dll 参数: 返回; */ /************************************************************************/ void CBackupTestDlg::LoadDllInterface() { HRESULT hr = NULL; /* CoInitialize(NULL); hr = CoCreateInstance( CLSID_SC_BACKUPINTERFACE, NULL, CLSCTX_INPROC_SERVER, // 以进程内组件DLL方式加载 IID_IClassFactory, (LPVOID*)&pFactory); if(FAILED(hr)) { OutputDebugString(_T("没注册dll\n")); CoUninitialize(); return; } if(pInterface == NULL) { hr = pFactory->CreateInstance(NULL, IID_IUnknown, (void**)&pInterface); if(FAILED(hr)) { OutputDebugString(_T("创建ISC_BackupInterface失败\n")); pFactory->Release(); return; } } if(pInterface && pInterface->IsBackup()) { pFactory->Release(); CoUninitialize(); return; } CoUninitialize(); */ DWORD dwError = 0; CString strDll = _T("E:\\lyfz-project.org\\lyfzbin\\lyfzBackupModle\\lyfzBackupModle.dll"); if(hdllInst && pFactory && pInterface) return; if(hdllInst == NULL) { hdllInst = LoadLibrary(strDll); if(hdllInst == NULL) { OutputDebugString(_T("打开") + strDll + _T("失败\n")); return ; } } // GetClassBackupObject getBackupObj = NULL; getBackupObj = (GetClassBackupObject)GetProcAddress(hdllInst, "GetClassBackupObject"); if(getBackupObj == NULL) { OutputDebugString(_T("打开GetClassBackupObject失败\n")); FreeLibrary(hdllInst); return ; } if(pFactory == NULL) { hr = getBackupObj(CLSID_SC_BACKUPINTERFACE, IID_IClassFactory, (void**)&pFactory); if(FAILED(hr)) { OutputDebugString(_T("获取CSC_BackupFactory指针失败\n")); FreeLibrary(hdllInst); return ; } } if(pInterface == NULL) { hr = pFactory->CreateInstance(NULL, IID_IUnknown, (void**)&pInterface); if(FAILED(hr)) { OutputDebugString(_T("创建ISC_BackupInterface失败\n")); pFactory->Release(); FreeLibrary(hdllInst); return; } } GetClassDelFileObject getDelFileObj = NULL; getDelFileObj = (GetClassDelFileObject)GetProcAddress(hdllInst, "GetClassDelFileObject"); if(getDelFileObj == NULL) { OutputDebugString(_T("打开GetClassDelFileObject失败\n")); FreeLibrary(hdllInst); return ; } if(pDelFactory == NULL) { hr = getDelFileObj(CLSID_SC_DELFILESINTERFACE, IID_IClassFactory, (void**)&pDelFactory); if(FAILED(hr)) { dwError = GetLastError(); OutputDebugString(_T("获取CSC_DelfilesFactory指针失败\n")); FreeLibrary(hdllInst); return ; } } if(pDelInterface == NULL) { hr = pDelFactory->CreateInstance(NULL, IID_IUnknown, (void**)&pDelInterface); if(FAILED(hr)) { OutputDebugString(_T("创建ISC_DelFilesInterface失败\n")); pDelFactory->Release(); FreeLibrary(hdllInst); return; } } }