Files
envi-code/SourceCode/Code2026/PipelineCmd/EquipManaOperator.cpp
T
2026-09-28 15:28:50 +08:00

742 lines
20 KiB
C++

#include "StdAfx.h"
#include "initools.h"
#include "EquipManaOperator.h"
#include "UserDataDlg.h"
#include "ModiRemDlg.h"
#include "Base64.h"
#include "AecDbEwEquipment.h"
#include "coretools.h"
#ifndef IMG_FOLDER
#define IMG_FOLDER 0
#endif
#ifndef IMG_CLASS
#define IMG_CLASS 1
#endif
#ifndef EQU_COMPANY
#define EQU_COMPANY "Beijing shanghua equipment design file"
#endif
namespace
{
enum TBLType
{
eClass = 0,
eFolder,
ePackage,
eBims,
eNone,
};
CString getTableName(LPCTSTR prefix, const TBLType &tblType)
{
CString suffix(_T(""));
switch (tblType)
{
case eClass:
suffix = _T("Class");
break;
case eFolder:
suffix = _T("Folder");
break;
case ePackage:
suffix = _T("Package");
break;
case eBims:
suffix = _T("Bims");
break;
case eNone:
default:
return _T("");
}
return CString(prefix) + suffix;
}
}
CEquipManaOperator::CEquipManaOperator(LPCTSTR prefix)
: m_pEquipTree(NULL)
, m_pDb(NULL)
, m_sPrefix(prefix) { }
CEquipManaOperator::CEquipManaOperator(LPCTSTR prefix, CUIISQLiteServer * pDb, CTreeCtrl* pTree)
: m_pEquipTree(pTree)
, m_pDb(pDb)
, m_sPrefix(prefix) { }
CEquipManaOperator::~CEquipManaOperator(void)
{
}
void CEquipManaOperator::SetAdoDb(CUIISQLiteServer* pDb)
{
m_pDb = pDb;
}
void CEquipManaOperator::SetEquipTree(CTreeCtrl* pTree)
{
m_pEquipTree = pTree;
}
//目录分类操作
void CEquipManaOperator::NewFolder(CMapStringToString& mapItem2Folder)
{
CStringList lstFolders;
CString sSQL(_T(""));
//sSQL = _T("select folder from Aec_folder");
sSQL.Format(_T("select folder from %s"), getTableName(m_sPrefix, eFolder));
m_pDb->GetSelData(sSQL,lstFolders);
while(TRUE)
{
CString sName(_T(""));
if (CoreTools::getNameByDialog(_T("请输入名称"), _T("名称:"), sName))
{
if (lstFolders.Find(sName) != NULL)
{
AfxMessageBox(_T("输入的目录名已经存在!请重新输入!"));
continue;
}
//sSQL.Format(_T("insert into aec_folder (folder) values ('%s')"),nameDlg.m_sName);
sSQL.Format(_T("insert into %s (folder) values ('%s')"), getTableName(m_sPrefix, eFolder), sName);
m_pDb->ExecuteSQL(sSQL);
//插入
HTREEITEM hItem = m_pEquipTree->InsertItem(sName,IMG_FOLDER,IMG_FOLDER);
//sSQL.Format(_T("select id from aec_folder where folder='%s'"),nameDlg.m_sName);
sSQL.Format(_T("select id from %s where folder='%s'"), getTableName(m_sPrefix, eFolder),sName);
CString sID,sKey;
m_pDb->GetSelData(sSQL,sID);
sKey.Format(_T("%p"),hItem);
mapItem2Folder.SetAt(sKey,sID);
break;
}
else
{
break;
}
}
}
void CEquipManaOperator::OnNewclass(HTREEITEM hItem,CMapStringToString& mapItem2Folder)
{
CString sFolder = m_pEquipTree->GetItemText(hItem);
CString sSQL,sFolderID;
//sSQL.Format(_T("select ID from aec_folder where folder='%s'"),sFolder);
sSQL.Format(_T("select ID from %s where folder='%s'"), getTableName(m_sPrefix, eFolder),sFolder);
m_pDb->GetSelData(sSQL,sFolderID);
//sSQL.Format(_T("select class from aec_class where idfolder='%s'"),sFolderID);
sSQL.Format(_T("select class from %s where idfolder='%s'"), getTableName(m_sPrefix, eClass),sFolderID);
CStringList lstClass;
m_pDb->GetSelData(sSQL,lstClass);
while(TRUE)
{
CString sName(_T(""));
if (CoreTools::getNameByDialog(_T("请输入名称"), _T("名称:"), sName))
{
if (lstClass.Find(sName) != NULL)
{
AfxMessageBox(_T("输入的分类名已经存在!请重新输入!"));
continue;
}
//sSQL.Format(_T("insert into aec_class (class,idfolder) values ('%s','%s')"),nameDlg.m_sName,sFolderID);
sSQL.Format(_T("insert into %s (class,idfolder) values ('%s','%s')"), getTableName(m_sPrefix, eClass),sName,sFolderID);
BOOL bSuccess = m_pDb->ExecuteSQL(sSQL);
if (bSuccess)
{
CString sID,sKey;
//id
//sSQL.Format(_T("select id from aec_class where class='%s' and idfolder='%s'"),nameDlg.m_sName,sFolderID);
sSQL.Format(_T("select id from %s where class='%s' and idfolder='%s'"), getTableName(m_sPrefix, eClass),sName,sFolderID);
m_pDb->GetSelData(sSQL,sID);
HTREEITEM hClass = m_pEquipTree->InsertItem(sName,IMG_CLASS,IMG_CLASS,hItem);
sKey.Format(_T("%p"),hClass);
mapItem2Folder.SetAt(sKey,sID);
}
break;
}
else
{
break;
}
}
}
void CEquipManaOperator::OnRename(HTREEITEM hItem,CString& sID)
{
int nImage = 0,nImagSel = 0;
m_pEquipTree->GetItemImage(hItem,nImage,nImagSel);
CString sName = m_pEquipTree->GetItemText(hItem);
CString sSQL;
if (CoreTools::getNameByDialog(_T("请输入名称"), _T("名称:"), sName))
{
if (nImage == IMG_FOLDER )
{
CStringList lstFolders;
//sSQL = _T("select folder from Aec_folder");
sSQL.Format(_T("select folder from %s"), getTableName(m_sPrefix, eFolder));
m_pDb->GetSelData(sSQL,lstFolders);
if (lstFolders.Find(sName) != NULL)
{
AfxMessageBox(_T("目录名已经存在,不能重名!"));
return;
}
//sSQL.Format(_T("update Aec_folder set folder='%s' where id=%d"),nameDlg.m_sName,_ttoi(sID));
sSQL.Format(_T("update %s set folder='%s' where id=%d"), getTableName(m_sPrefix, eFolder),sName,_ttoi(sID));
m_pDb->ExecuteSQL(sSQL);
m_pEquipTree->SetItemText(hItem,sName);
return;
}
if ( nImage == IMG_CLASS)
{
CStringList lstClass;
//sSQL = _T("select folder from aec_class");
sSQL.Format(_T("select folder from %s"), getTableName(m_sPrefix, eClass));
m_pDb->GetSelData(sSQL,lstClass);
if (lstClass.Find(sName) != NULL)
{
AfxMessageBox(_T("分类名已经存在,不能重名!"));
return;
}
//sSQL.Format(_T("update aec_class set class='%s' where id=%d"),nameDlg.m_sName,_ttoi(sID));
sSQL.Format(_T("update %s set class='%s' where id=%d"), getTableName(m_sPrefix, eClass),sName,_ttoi(sID));
m_pDb->ExecuteSQL(sSQL);
m_pEquipTree->SetItemText(hItem,sName);
return;
}
}
}
void CEquipManaOperator::OnDelete(HTREEITEM hItem,CString& sID)
{
int nImage = 0,nImagSel = 0;
m_pEquipTree->GetItemImage(hItem,nImage,nImagSel);
CString sText,sSQL;
if (nImage == IMG_FOLDER )
{
//判断目录下没有分类
sText = m_pEquipTree->GetItemText(hItem);
//sSQL.Format(_T("select id from aec_class where idfolder='%s'"),sID);
sSQL.Format(_T("select id from %s where idfolder='%s'"), getTableName(m_sPrefix, eClass),sID);
if ( !m_pDb->IsSelEmpty(sSQL) )
{
AfxMessageBox(_T("选择的目录下含有分类名,不能删除!请先删除其下分类再删除目录!"));
return;
}
CString sTip;
sTip.Format(_T("删除为永久性删除!确实要删除目录 [%s]吗?"),sText);
if ( IDYES == AfxMessageBox(sTip,MB_YESNO) )
{
//sSQL.Format(_T("delete from aec_folder where id=%d"),_ttoi(sID));
sSQL.Format(_T("delete from %s where id=%d"), getTableName(m_sPrefix, eFolder),_ttoi(sID));
m_pDb->ExecuteSQL(sSQL);
m_pEquipTree->DeleteItem(hItem);
}
}
if ( nImage == IMG_CLASS)
{
//判断分类下没有设备元件
sText = m_pEquipTree->GetItemText(hItem);
//sSQL.Format(_T("select id from aec_package where idclass='%s'"),sID);
sSQL.Format(_T("select id from %s where idclass='%s'"), getTableName(m_sPrefix, ePackage),sID);
if ( !m_pDb->IsSelEmpty(sSQL) )
{
AfxMessageBox(_T("选择的分类下含有设备元件,不能删除!请先删除其下设备元件再删除分类!"));
return;
}
CString sTip;
sTip.Format(_T("删除为永久性删除!确实要删除分类 [%s]吗?"),sText);
if ( IDYES == AfxMessageBox(sTip,MB_YESNO) )
{
//sSQL.Format(_T("delete from aec_class where id=%d"),_ttoi(sID));
sSQL.Format(_T("delete from %s where id=%d"), getTableName(m_sPrefix, eClass),_ttoi(sID));
m_pDb->ExecuteSQL(sSQL);
m_pEquipTree->DeleteItem(hItem);
}
}
}
//设备元件操作
void CEquipManaOperator::OnAddequ(HTREEITEM hItem)
{
//目录,分类
CString sFolder,sCLass;
sCLass = m_pEquipTree->GetItemText(hItem);
HTREEITEM hFolder = m_pEquipTree->GetParentItem(hItem);
sFolder = m_pEquipTree->GetItemText(hFolder);
//选择equ文件
CString sEquFile;
CFileDialog dlg( TRUE, NULL,NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT,
_T("通用设备元件设计文件(*.equ)|*.equ|All Files (*.*)|*.*||"));
int nRes = dlg.DoModal();
if (nRes != IDOK) return;
int inputType = AfxMessageBox(_T("是否通过配置文件来进行BIM数据导入?"), MB_YESNO);
CString bimFile(_T(""));
if (inputType == IDYES)
{
CFileDialog dg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("bim配置文件(*.ini)|*.ini||"));
if (dg.DoModal() == IDOK)
bimFile = dg.GetPathName();
else
inputType = IDNO;
}
int iSuc(0), iAll(0);
POSITION pos = dlg.GetStartPosition();
while ( NULL != pos )
{
sEquFile = dlg.GetNextPathName(pos);
iAll++;
//提取名称
AecDbEwEquipment* pEqu = new AecDbEwEquipment;
if (pEqu->ReadFromFile(sEquFile))
{
CString sName(_T("")), sRem = _T("");
sName.Format(_T("NoName%d"), iAll);
pEqu->GetSpecialtyData()->GetAt(KEY_NAME, sName);
SH_BIM_BLOCK bims;
if (inputType == IDYES) // 读配置文件
{
IniTools::getSectionContent(bimFile, sEquFile, bims);
}
else // 读equ文件内的xdata数据
{
AecDbObjXDataMap *pXData = pEqu->GetSpecialtyData(AcDb::kForRead);
if (pXData)
{
CoreTools::getBimDatas(*pXData, bims);
}
}
// 文件内的bim数据,插入时再删除
if (PutPackageToDb(sFolder
, sCLass
, sName
, sRem
, sEquFile
, NULL
, bims.empty() ? NULL : &bims))
{
iSuc++;
}
else
AfxMessageBox(sEquFile + _T("入库失败。"));
DELETE_PTR(pEqu);
}
else
AfxMessageBox(sEquFile + _T("入库失败。"));
}
CString s(_T(""));
s.Format(_T("共选择%d个文件,成功入库%d个。"), iAll, iSuc);
AfxMessageBox(s);
}
void CEquipManaOperator::OnDelequ(LPCTSTR pszID,LPCTSTR pszName)
{
CString sTip;
sTip.Format(_T("删除为永久性删除!确实要删除设备元件 [%s]吗?"),pszName);
if (IDYES != AfxMessageBox(sTip, MB_YESNO)) return;
int equid(_ttoi(pszID));
CString sSQL;
sSQL.Format(_T("delete from %s where [id]='%d'"), getTableName(m_sPrefix, ePackage), equid);
if (m_pDb->ExecuteSQL(sSQL))
{
sSQL.Format(_T("DELETE FROM %s WHERE [equid]='%d'"), getTableName(m_sPrefix, eBims), equid);
m_pDb->ExecuteSQL(sSQL);
}
}
void CEquipManaOperator::OnProperty(AecDbEwEquipment* pEquSel)
{
AecDbObjXDataMap* pXDataMap = pEquSel->GetSpecialtyData();
//用户数据USER0~999
SH_BIM_BLOCK bims;
CoreTools::getBimDatas(*pXDataMap, bims);
//仅仅只读?
CUserDataDlg userDlg(1);
userDlg.SetUserData(bims);
//userDlg.SetReadOnly(TRUE);
int nRes = userDlg.DoModal();
if (nRes == IDOK && userDlg.m_bModified)
{
bims.clear();
userDlg.GetUserData(bims);
CoreTools::setBimDatas(*pXDataMap, bims);
//XString sTmplFile = GetTempFileName(_T(".tmp"));
CString sTmplFile = FilePath::getSystemTemporaryFolder();
sTmplFile += _T("\\eq_.tmp");
if (!SaveEquFile(pEquSel,(LPCTSTR)sTmplFile) )
{
AfxMessageBox(_T("意外保存中间临时文件失败!请重新执行命令!"));
return;
}
CString sTmpFile = (LPCTSTR)sTmplFile;
CString sID,sPackageField;
pEquSel->GetSpecialtyData()->GetAt(KEY_ID,sID);
//update
CString sSQL;
//sSQL.Format(_T("update aec_package set package=? where id=%d"),_ttoi(sID));
sSQL.Format(_T("update %s set package=? where id=%d"), getTableName(m_sPrefix, ePackage),_ttoi(sID));
if (m_pDb->UpdateBlob(sSQL, sTmplFile))
{
AfxMessageBox(_T("更新数据库成功!请选择设备元件查看属性验证!"));
}
// CUIIPackageDbOper packageDb;
// packageDb.SetDbSrv(m_pDb);
//
// sPackageField = _T("Package");
// if ( packageDb.UpdatePackage(sSQL,sPackageField,sTmpFile) )
// {
// AfxMessageBox(_T("更新数据库成功!请选择设备元件查看属性验证!"));
// }
}
}
void CEquipManaOperator::OnCloneEqu(LPCTSTR pszID, LPCTSTR pszName)
{
if (!pszName || !pszID) return;
CString sSQL, sTable(getTableName(m_sPrefix, ePackage));
sSQL.Format(
_T("INSERT INTO %s ([name],[idclass],[rem],[package]) SELECT [name],[idclass],[rem],[package] FROM %s WHERE [id]='%s'")
, sTable
, sTable
, pszID);
if (!m_pDb->ExecuteSQL(sSQL)) return;
// 得到clone出的设备的ID
CString s;
sSQL.Format(_T("SELECT id FROM %s ORDER BY id DESC LIMIT 1"), sTable);
if (!m_pDb->GetSelData(sSQL, s)) return;
// 为新设备改名
sSQL.Format(_T("UPDATE %s SET [name]='%s' WHERE [id]='%s'"), sTable, pszName, s);
if (!m_pDb->ExecuteSQL(sSQL)) return;
// clone aec_bims表内数据
sTable = getTableName(m_sPrefix, eBims);
sSQL.Format(_T("INSERT INTO %s ([name],[value],[readonly]) SELECT [name],[value],[readonly] FROM %s WHERE [equid]='%s'")
, sTable, sTable, pszID);
if (!m_pDb->ExecuteSQL(sSQL)) return;
// 将新bim数据的equid指向新设备的ID
sSQL.Format(_T("UPDATE %s SET [equid]='%s' WHERE [equid]='-1'"), sTable, s);
if (!m_pDb->ExecuteSQL(sSQL)) return;
}
void CEquipManaOperator::OnModiRem(AecDbEwEquipment* pEquSel)
{
CString sID,sRem;
pEquSel->GetSpecialtyData()->GetAt(KEY_ID,sID);
CString sSQL;
//sSQL.Format(_T("select rem from aec_package where id=%d"),_ttoi(sID));
sSQL.Format(_T("select rem from %s where id=%d"), getTableName(m_sPrefix, ePackage),_ttoi(sID));
m_pDb->GetSelData(sSQL,sRem);
CModiRemDlg remDlg;
remDlg.m_sRem = sRem;
if ( IDOK == remDlg.DoModal())
{
//sSQL.Format(_T("update aec_package set rem='%s' where id=%d"),remDlg.m_sRem,_ttoi(sID));
sSQL.Format(_T("update %s set rem='%s' where id=%d"), getTableName(m_sPrefix, ePackage),remDlg.m_sRem,_ttoi(sID));
m_pDb->ExecuteSQL(sSQL);
}
}
void CEquipManaOperator::GetBimDatas(LPCTSTR pszID, std::vector<std::vector<CString>> &bims, bool &bReadOnly)
{
if (!pszID) return;
CString sSql(_T(""));
sSql.Format(_T("SELECT [readonly] FROM %s WHERE [id]='%s'"), getTableName(m_sPrefix, ePackage), pszID);
CString readonly(_T("0"));
m_pDb->GetSelData(sSql, readonly);
bReadOnly = readonly == _T("0") ? false : true;
sSql.Format(_T("SELECT [id],[name],[value] FROM %s WHERE [equid]='%s'"), getTableName(m_sPrefix, eBims), pszID);
m_pDb->GetSelDataEx(sSql, bims);
}
BOOL CEquipManaOperator::SaveEquFile(AecDbEwEquipment* pWEqu,LPCTSTR pszFile)
{
BOOL bSuccess = FALSE;
CFile file;
if (file.Open(pszFile,CFile::modeCreate | CFile::modeWrite))
{
if (pWEqu != NULL)
{
AecDbObjXDataMap* pXDataMap = pWEqu->GetSpecialtyData();
//0.写入文件标识
std::string str1,str2;
str1.append(EQU_COMPANY);
str2 = Base64::Encode(str1);
file.Write(str2.c_str(),sizeof(char)* ( str2.length() ) );
//1.写入名称
char szName[MAX_PATH];
memset(szName,0,sizeof(szName));
CString sText;
pXDataMap->GetAt(KEY_NAME,sText);
_bstr_t bst((LPCTSTR)sText);
strcpy(szName,(const char*)bst);
file.Write(szName,MAX_PATH);
//2.版本
int nVer = 1;
file.Write(&nVer,sizeof(int));
//4.写入定义数据
AcGeMatrix3d xform;
int nCount = pWEqu->GetSubPrimObjCount();
//4.写入数量
file.Write(&nCount,sizeof(int));
int nLen = 0;
for (int i = 0;i < nCount;i++)
{
AecEqui::XPrimData* pData = pWEqu->GetSubPrimObj(i);
if (pData != NULL)
{
//通用数据
file.Write(&pData->m_eType,sizeof(short));
file.Write(&pData->m_nActiveInf,sizeof(short));
file.Write(&pData->m_nID,sizeof(long));
file.Write(&pData->m_vtMove.x,sizeof(double));
file.Write(&pData->m_vtMove.y,sizeof(double));
file.Write(&pData->m_vtMove.z,sizeof(double));
file.Write(&pData->m_ptRotation.x,sizeof(double));
file.Write(&pData->m_ptRotation.y,sizeof(double));
file.Write(&pData->m_ptRotation.z,sizeof(double));
//矩阵
nLen = pData->m_arMatrix.length();
file.Write(&nLen,sizeof(int));
int nnn = sizeof(AcGeMatrix3d);
for (int j = 0;j < pData->m_arMatrix.length();j++)
{
xform = pData->m_arMatrix.at(j);
for (int n = 0;n < 4;n++)
{
for (int k = 0;k < 4;k++)
{
file.Write(&xform.entry[n][k],sizeof(double));
}
}
}
//data
file.Write(&pData->m_nSize,sizeof(int));
if (pData->m_nSize > 0)
{
file.Write(pData->m_pData,pData->m_nSize);
}
}
bSuccess = TRUE;
}
//5.写入用户数据
pXDataMap->Write(&file,TRUE); //写出用户数据USER0~999
}
file.Close();
}
return bSuccess;
}
bool CEquipManaOperator::IsReadOnlyEqu(LPCTSTR pszID)
{
if (!pszID) return false;
CString sSQL, s(_T("0"));
sSQL.Format(_T("SELECT [readonly] FROM %s WHERE [id]='%s'"), getTableName(m_sPrefix, ePackage), pszID);
m_pDb->GetSelData(sSQL, s);
if (s == _T("0")) return false;
else return true;
}
int CEquipManaOperator::AddBimForEqu(LPCTSTR pszName, LPCTSTR pszValue, LPCTSTR pszEquID)
{
if (!pszName || !pszValue || !pszEquID) return -1;
CString sSql(_T("")), sTable(getTableName(m_sPrefix, eBims));
sSql.Format(_T("INSERT INTO %s ([Name],[Value],[EquID],[ReadOnly]) VALUES ('%s','%s','%s','0')")
, sTable
, pszName
, pszValue
, pszEquID);
if (!m_pDb->ExecuteSQL(sSql)) return -1;
CString s;
sSql.Format(_T("SELECT id FROM %s ORDER BY id DESC LIMIT 1"), sTable);
if (!m_pDb->GetSelData(sSql, s)) return -1;
return _ttoi(s);
}
bool CEquipManaOperator::ModBimForEqu(LPCTSTR pszName, LPCTSTR pszValue, int BimID)
{
if (!pszName || !pszValue) return false;
CString sSql(_T("")), sTable(getTableName(m_sPrefix, eBims));
sSql.Format(_T("UPDATE %s SET [Name]='%s',[Value]='%s' WHERE [id]='%d'")
, sTable
, pszName
, pszValue
, BimID);
if (!m_pDb->ExecuteSQL(sSql)) return false;
return true;
}
bool CEquipManaOperator::DelBimForEqu(int BimID)
{
CString sSql(_T(""));
sSql.Format(_T("DELETE FROM %s WHERE [id]='%d'"), getTableName(m_sPrefix, eBims), BimID);
if (!m_pDb->ExecuteSQL(sSql)) return false;
return true;
}
BOOL CEquipManaOperator::PutPackageToDb(const CString& sFolder
, const CString& sClass
, const CString& sName
, const CString& sRem
, const CString& sEquTmplFile
, CString *pIDPackage
, SH_BIM_BLOCK *pBims)
{
CString sSQL;
//检查 Folder 是否数据库中有
sSQL.Format(_T("SELECT [id] FROM %s WHERE [folder]='%s'"), getTableName(m_sPrefix, eFolder),sFolder);
if ( m_pDb->IsSelEmpty(sSQL) ) //数据库中没有
{
sSQL.Format(_T("INSERT INTO %s ([folder]) VALUES ('%s')"), getTableName(m_sPrefix, eFolder),sFolder);
m_pDb->ExecuteSQL(sSQL);
}
CString sID;
sSQL.Format(_T("SELECT [id] FROM %s WHERE [folder]='%s'"), getTableName(m_sPrefix, eFolder),sFolder);
m_pDb->GetSelData(sSQL,sID);
//检查 Class
sSQL.Format(_T("SELECT [class] FROM %s WHERE [idfolder]='%s' AND [class]='%s'"), getTableName(m_sPrefix, eClass),sID,sClass);
if (m_pDb->IsSelEmpty(sSQL))
{
sSQL.Format(_T("INSERT INTO %s ([class],[idfolder]) VALUES ('%s','%s')"), getTableName(m_sPrefix, eClass),sClass,sID);
m_pDb->ExecuteSQL(sSQL);
}
sSQL.Format(_T("SELECT [id] FROM %s WHERE [idfolder]='%s' AND [class]='%s'"), getTableName(m_sPrefix, eClass),sID,sClass);
CString sClassID;
m_pDb->GetSelData(sSQL,sClassID);
// 在入库前,检查一下有没有同样的设备存在,如果有,则删除
if (m_sPrefix.CompareNoCase(_T("aec_")) == 0)
sSQL.Format(_T("SELECT aec_package.[id]")
_T(" FROM aec_package")
_T(" INNER JOIN aec_class, aec_folder")
_T(" ON (aec_class.[idfolder] = aec_folder.[id] AND aec_package.[IDClass] = aec_class.[ID])")
_T(" WHERE (aec_package.[idclass] = '%s' AND aec_package.[name] = '%s')"), sClassID, sName);
else
sSQL.Format(_T("SELECT dwg_package.[id]")
_T(" FROM dwg_package")
_T(" INNER JOIN dwg_class, dwg_folder")
_T(" ON (dwg_class.[idfolder] = dwg_folder.[id] AND dwg_package.[IDClass] = dwg_class.[ID])")
_T(" WHERE (dwg_package.[idclass] = '%s' AND dwg_package.[name] = '%s')"), sClassID, sName);
std::vector<CString> ss;
m_pDb->GetSelData(sSQL, ss);
for (size_t i = 0; i < ss.size(); ++i)
{
sSQL.Format(_T("DELETE FROM %s WHERE [id]='%s'"), getTableName(m_sPrefix, ePackage), ss[i]);
m_pDb->ExecuteSQL(sSQL);
if (m_sPrefix.CompareNoCase(_T("aec_")) == 0)
{
sSQL.Format(_T("DELETE FROM aec_bims WHERE [equid]='%s'"), ss[i]);
m_pDb->ExecuteSQL(sSQL);
}
}
//压包入库
sSQL.Format(_T("INSERT INTO %s ([name], [rem], [idclass], [package]) VALUES ('%s', '%s', '%s', ?)")
, getTableName(m_sPrefix, ePackage)
, sName
, sRem
, sClassID);
BOOL bSuccess = m_pDb->InsertBlob(sSQL, sEquTmplFile);
if (!bSuccess)
{
AfxMessageBox(_T("设备元件入库失败!"));
return FALSE;
}
CString equid(_T(""));
sSQL.Format(_T("SELECT id FROM %s WHERE [name] = '%s'"), getTableName(m_sPrefix, ePackage), sName);
m_pDb->GetSelData(sSQL, equid);
if (pIDPackage) *pIDPackage = equid;
// 设备
if (m_sPrefix.CompareNoCase(_T("Aec_")) == 0 && pBims && !pBims->empty())
{
std::vector<std::pair<CString, CString>>::const_iterator it(pBims->begin());
for (; it != pBims->end(); ++it)
{
sSQL.Format(_T("INSERT INTO %s ([name],[value],[equid]) VALUES ('%s','%s','%s')")
, getTableName(m_sPrefix, eBims)
, it->first
, it->second
, equid);
m_pDb->ExecuteSQL(sSQL);
}
}
return TRUE;
}