#include "StdAfx.h" #include "MBThreadFireSyncDb.h" #include "MBVaultDbMgr.h" #include "MBVaultExtendEvents.h" #include "json.h" #include "Util.h" #include "StrFileUtils.h" #include "mbvaultdef.h" CMBThreadFireSyncDb::CMBThreadFireSyncDb(void) { m_bStop = false; m_pNDWebCMgr = NULL; m_hWnd = NULL; m_pVaultDbMgr = NULL; } CMBThreadFireSyncDb::~CMBThreadFireSyncDb(void) { } // ¿ªÊ¼Ïß³Ì void CMBThreadFireSyncDb::StartThread() { if(IsRunning()) return; BeginThread(); } // ½áÊøÏß³Ì void CMBThreadFireSyncDb::OverThread() { m_bStop = true; if(!IsRunning()) return; EndThread(); } // ÉèÖòÎÊý void CMBThreadFireSyncDb::SetParam( HWND hWnd,CMBVaultDbMgr *pVaultDbMgr,CMBNetDiskWebCMgr *pNDWebCMgr ) { m_pNDWebCMgr = pNDWebCMgr; m_hWnd = hWnd; m_pVaultDbMgr = pVaultDbMgr; } void CMBThreadFireSyncDb::SetJsonParm( CString &strJsonParam ) { m_strJsonParam = strJsonParam; // дһÏ //m_pVaultDbMgr->m_strCfgPath; } // ´íÎóÐÅÏ¢ void CMBThreadFireSyncDb::SendEventErr(CString strErrInfo) { EventErr *pEvt = new EventErr(NULL); pEvt->m_strErrInfo = strErrInfo; SNotifyCenter::getSingleton().FireEventAsync(pEvt); pEvt->Release(); } // ·¢ËÍ ÏÂÔØ void CMBThreadFireSyncDb::SendEventDld( CString strXml) { if( strXml.IsEmpty() ) return ; CString strPath; strPath.Format(_T("%s\\FileRoot"),m_pVaultDbMgr->GetExePath()); EventFireDld *pEvt = new EventFireDld(NULL); pEvt->m_strXml = strXml; pEvt->m_strPath = strPath; SNotifyCenter::getSingleton().FireEventAsync(pEvt); pEvt->Release(); } // ·¢ËÍ Í¬²½Êý¾Ý ÏûÏ¢ void CMBThreadFireSyncDb::SendEventSyncDbMsgFinish( CString strMsg,CString strTime ) { EventFireSyncDbMsgFinish *pEvt = new EventFireSyncDbMsgFinish(NULL); pEvt->m_strMsg = strMsg; pEvt->m_strTime = strTime; SNotifyCenter::getSingleton().FireEventAsync(pEvt); pEvt->Release(); } void CMBThreadFireSyncDb::SendEventProgress(int nRecordCount,int nCurCount) { EventFireProgress *pEvt = new EventFireProgress(NULL); pEvt->m_nRecordCount = nRecordCount; pEvt->m_nCurCount = nCurCount; SNotifyCenter::getSingleton().FireEventAsync(pEvt); pEvt->Release(); } UINT CMBThreadFireSyncDb::Run() { CString strErrInfo,strTime,strVersion,strQueryCondition; CMBFireAppExtParam *pAppExtParam = new CMBFireAppExtParam(); if( !pAppExtParam->ParseJson(m_strJsonParam,strErrInfo) ) { SendEventErr(strErrInfo); MBSAFE_DELETE(pAppExtParam) return 0; } if( !pAppExtParam->IsReachRequire(strErrInfo) ) { SendEventErr(strErrInfo); MBSAFE_DELETE(pAppExtParam) return 0; } /// µÃµ½°æ±¾ºÅ if( !GetVersion( strVersion, strErrInfo) ) { SendEventErr(strErrInfo); MBSAFE_DELETE(pAppExtParam) return 0; } if( !strVersion.IsEmpty() ) { strQueryCondition.Format(_T("m.T_MODIFY >= '%s'"),strVersion); } /// ¸ù¾Ý·þÎñÆ÷µÄÊý¾Ýɾ³ýTNXXXXXXX if( !DeleteTNXXXXXXFromSvr( pAppExtParam,strErrInfo ) ) { SendEventErr(strErrInfo); MBSAFE_DELETE(pAppExtParam) return 0; } /// ´´½¨±íTN_XXX_XXX if( !CreateTNXXXXXX( pAppExtParam,strErrInfo ) ) { SendEventErr(strErrInfo); MBSAFE_DELETE(pAppExtParam) return 0; } /// ´´½¨±íTN_XXX if( !GetClsAttrsFromSvr(pAppExtParam,strErrInfo ) ) { SendEventErr(strErrInfo); MBSAFE_DELETE(pAppExtParam) return 0; } if( !CreateTNXXX( pAppExtParam,strErrInfo ) ) { SendEventErr(strErrInfo); MBSAFE_DELETE(pAppExtParam) return 0; } /// ÏòTN_XXX_XXXºÍTN_XXX ¼ÓÊý¾Ý if( !SetMasterSlaveDataToDb( pAppExtParam,strQueryCondition,strErrInfo ) ) { SendEventErr(strErrInfo); MBSAFE_DELETE(pAppExtParam) return 0; } // дGridStyleJson if( !SetGridStyleJson( pAppExtParam,strErrInfo ) ) { SendEventErr(strErrInfo); MBSAFE_DELETE(pAppExtParam) return 0; } MBSAFE_DELETE(pAppExtParam) // ¼Ç¼°æ±¾ºÅ if( !SetVersion( strTime, strErrInfo ) ) { SendEventErr(strErrInfo); return 0; } // ¸üÐÂÍê³É SendEventSyncDbMsgFinish(_T("ÒÑÍê³ÉÊý¾Ýͬ²½£¡"),strTime); return 0; } bool CMBThreadFireSyncDb::GetClsAttrsFromSvr(CMBFireAppExtParam *pAppExtParam,CString &strErrInfo ) { CString strAttrList,strClsID; strClsID = pAppExtParam->GetDataCls()->m_strClsID; // µÃµ½Êý¾ÝÀàÊôÐÔ if(!m_pNDWebCMgr->GetClassAttrs( strClsID, strAttrList, strErrInfo )) return false; if(!pAppExtParam->GetDataCls()->GetClsAttrsMgr()->ParseXml(strAttrList,strErrInfo)) return false; return true; } // ´´½¨±íTN_XXX_XXX bool CMBThreadFireSyncDb::CreateTNXXXXXX( CMBFireAppExtParam *pAppExtParam,CString &strErrInfo ) { if( NULL == pAppExtParam ) return false; CString strTableName,strTableSql; strTableName = pAppExtParam->GetTN_XXX_XXXTableName(); strTableSql = pAppExtParam->GetTN_MClsID_DClsIDCreateTableSql(); if(!m_pVaultDbMgr->CreateTN_MClsID_DClsID( strTableName,strTableSql,strErrInfo )) return false; return true; } // ¸ù¾Ý·þÎñÆ÷µÄÊý¾Ýɾ³ýTNXXXXXXX bool CMBThreadFireSyncDb::DeleteTNXXXXXXFromSvr( CMBFireAppExtParam *pAppExtParam,CString &strErrInfo ) { if( NULL == pAppExtParam ) return false; CString strTableName,strMIDs,strClsID,strRetObjIDs; int nCurPage = 0; strClsID = pAppExtParam->GetMasterCls()->m_strClsID; strTableName = pAppExtParam->GetTN_XXX_XXXTableName(); if(!m_pVaultDbMgr->IsExsitTableInDb( strTableName,strErrInfo ) ) return true; if(!m_pVaultDbMgr->TNXXXXXXQueryMID( nCurPage,50,strMIDs,strErrInfo )) return false; if(!m_pNDWebCMgr->DataObjExistCheck( strClsID, strMIDs, strRetObjIDs,strErrInfo ,false )) return false; if(!m_pVaultDbMgr->TNXXXXXXDeleteByMID( strRetObjIDs,strErrInfo )) return false; while( !strMIDs.IsEmpty() ) { nCurPage++; if(!m_pVaultDbMgr->TNXXXXXXQueryMID( nCurPage,50,strMIDs,strErrInfo )) return false; if(!m_pNDWebCMgr->DataObjExistCheck( strClsID, strMIDs,strRetObjIDs,strErrInfo ,false )) return false; if(!m_pVaultDbMgr->TNXXXXXXDeleteByMID( strRetObjIDs,strErrInfo )) return false; } return true; } // ´´½¨±íTN_XXX bool CMBThreadFireSyncDb::CreateTNXXX( CMBFireAppExtParam *pAppExtParam,CString &strErrInfo ) { if( NULL == pAppExtParam ) return false; CString strClsID,strTableSql,strTableName; strClsID = pAppExtParam->GetDataCls()->m_strClsID; strTableName = _T("TN_") + strClsID; int nCount = pAppExtParam->GetDataCls()->GetClsAttrsMgr()->GetClsAttrsCount(); if( nCount == 0 ) return false; strTableSql = pAppExtParam->GetDataCls()->GetClsAttrsMgr()->GetTableSql(strTableName); if(!m_pVaultDbMgr->CreateTableInDb2( strTableName,strTableSql,strErrInfo )) return false; return true; } // ÉèÖÃÖ÷Êý¾Ýµ½db bool CMBThreadFireSyncDb::SetMasterSlaveDataToDb( CMBFireAppExtParam *pAppExtParam,CString strQueryCondition,CString &strErrInfo ) { if( NULL == pAppExtParam ) return false; CString strMasterClassID, strComposeClassID, strDataClassID, strMasterClassAttrs, strDataClassAttrs, strResult,strTN_XXX_XXXTableName,strTN_XXXTableName; UINT nNumPerPage = 10; int nCurPage = 0,nTotalPages = 0; CString strSessionID; strMasterClassID = pAppExtParam->GetMasterCls()->m_strClsID; strComposeClassID = pAppExtParam->GetComposeCls()->m_strClsID; strDataClassID = pAppExtParam->GetDataCls()->m_strClsID; strMasterClassAttrs = pAppExtParam->GetMasterClassAttrs(); strTN_XXX_XXXTableName = pAppExtParam->GetTN_XXX_XXXTableName(); strTN_XXXTableName = pAppExtParam->GetTN_XXXTableName(); if(!m_pNDWebCMgr->DataObjMasterSlaveGetList( strMasterClassID, strComposeClassID, strDataClassID, strMasterClassAttrs, strDataClassAttrs, strQueryCondition, strResult, strErrInfo, nNumPerPage )) return false; CMBTNXXXObjMgr2 *pObjMgr = new CMBTNXXXObjMgr2(); if(!pObjMgr->ParseXml2(strResult,strErrInfo)){ MBSAFE_DELETE(pObjMgr) return false; } // ÉèÖÃTN_XXX_XXX if( !SetTNXXXXXXToDb( pObjMgr,strMasterClassAttrs,strTN_XXX_XXXTableName,strErrInfo ) ){ MBSAFE_DELETE(pObjMgr) return false; } // ÉèÖÃTN_XXX if( !SetTNXXXToDb( pObjMgr,strTN_XXXTableName,strErrInfo ) ){ MBSAFE_DELETE(pObjMgr) return false; } nCurPage = pObjMgr->m_nCurPage; nTotalPages = pObjMgr->m_nTotalPages; strSessionID = pObjMgr->m_strSessionID; // ·¢Ë͹ýÈ¥ÏÂÔØ CString strDldXml = pObjMgr->GenDldXml(); SendEventDld(strDldXml); MBSAFE_DELETE(pObjMgr) if(!SetMasterSlaveDataToDb( strTN_XXX_XXXTableName,strTN_XXXTableName,strMasterClassAttrs,strSessionID, nCurPage, nTotalPages,strErrInfo )) return false; return true; } bool CMBThreadFireSyncDb::SetMasterSlaveDataToDb( CString strTN_XXX_XXXTableName,CString strTN_XXXTableName,CString strMAttrs,CString strSessionID,int nCurPage,int nTotalPages,CString &strErrInfo ) { CString strResult; // Ñ­»·²éѯҳ for( int i = nCurPage+1;i <= nTotalPages;i++) { // 100¸öдһ´Î if(!m_pNDWebCMgr->DataObjMasterSlaveGetList( strSessionID,i, strResult,strErrInfo )) return false; CMBTNXXXObjMgr2 *pTmpObjMgr = new CMBTNXXXObjMgr2(); if(!pTmpObjMgr->ParseXml2(strResult,strErrInfo)){ MBSAFE_DELETE(pTmpObjMgr) return false; } // ÉèÖÃTN_XXX_XXX if( !SetTNXXXXXXToDb( pTmpObjMgr,strMAttrs,strTN_XXX_XXXTableName,strErrInfo ) ){ MBSAFE_DELETE(pTmpObjMgr) return false; } // ÉèÖÃTN_XXX if( !SetTNXXXToDb( pTmpObjMgr,strTN_XXXTableName,strErrInfo ) ){ MBSAFE_DELETE(pTmpObjMgr) return false; } // ·¢Ë͹ýÈ¥ÏÂÔØ CString strDldXml = pTmpObjMgr->GenDldXml(); SendEventDld(strDldXml); MBSAFE_DELETE(pTmpObjMgr) } return true; } bool CMBThreadFireSyncDb::SetTNXXXToDb( CMBTNXXXObjMgr2 *pObjMgr,CString strTableName,CString &strErrInfo ) { CString strSql,strExsitSql; CMBTNXXXObjVector vectorObj; CMBTNXXXObjVector::iterator it; CMBTNXXXObj *pObj = NULL; pObjMgr->GetObjVector(vectorObj); for( it = vectorObj.begin();it != vectorObj.end();it++ ) { pObj = *it; strExsitSql = pObj->IsExsitSqlToSTb( strTableName ); bool bExsit = m_pVaultDbMgr->IsExsitDataInDb(strExsitSql,strErrInfo); if( bExsit ) { strSql = pObj->GetUpdateSqlToSTb( strTableName ); } else { strSql = pObj->GetInsertSqlToSTb( strTableName ); } if(!m_pVaultDbMgr->RunSQLInDb( strSql,strErrInfo )) return false; } return true; } bool CMBThreadFireSyncDb::SetTNXXXXXXToDb( CMBTNXXXObjMgr2 *pObjMgr,CString strMAttrs,CString strTableName,CString &strErrInfo ) { CString strSql,strExsitSql; CMBTNXXXObjVector vectorObj; CMBTNXXXObjVector::iterator it; CMBTNXXXObj *pObj = NULL; int nCount = 0; pObjMgr->GetObjVector(vectorObj); for( it = vectorObj.begin();it != vectorObj.end();it++ ) { pObj = *it; strExsitSql = pObj->IsExsitSqlToMTb( strTableName ); bool bExsit = m_pVaultDbMgr->IsExsitDataInDb(strExsitSql,strErrInfo); if( bExsit ) { strSql = pObj->GetUpdateSqlToMTb( strMAttrs,strTableName ); } else { pObj->m_bDldFile = true; strSql = pObj->GetInsertSqlToMTb( strMAttrs,strTableName ); } if(!m_pVaultDbMgr->RunSQLInDb( strSql,strErrInfo )) return false; /// ·¢ËÍʼþ SendEventProgress(pObjMgr->m_nRecords,( pObjMgr->m_nCurPage-1 )*pObjMgr->m_nPageSize + (++nCount) ); } return true; } bool CMBThreadFireSyncDb::SetGridStyleJson( CMBFireAppExtParam *pAppExtParam,CString &strErrInfo ) { if( NULL == pAppExtParam ) return false; CString strJsonPath,strClsID,strGridStyleDef; strClsID = pAppExtParam->GetDataCls()->m_strClsID; if(!m_pNDWebCMgr->ClassGridStyleGetDefaultInfo( strClsID, strGridStyleDef,strErrInfo )) return false; strJsonPath.Format(_T("%s\\GridStyle.json"),m_pVaultDbMgr->GetCfgPath()); if(!CStrFileUtils::WriteFile(strJsonPath,strGridStyleDef,strErrInfo )) return false; return true; } // ÉèÖð汾ºÅ bool CMBThreadFireSyncDb::SetVersion( CString &strTime, CString &strErrInfo ) { strTime = CStrFileUtils::GetLocalDt(); if(!m_pVaultDbMgr->SetVersionToDb( FIRE_VERSION,strTime,strErrInfo )) return false; return true; } // »ñÈ¡°æ±¾ºÅ bool CMBThreadFireSyncDb::GetVersion( CString &strTime, CString &strErrInfo) { if(!m_pVaultDbMgr->GetVersionFromDb( FIRE_VERSION,strTime,strErrInfo )) return false; return true; }