#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;
|
}
|