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

441 lines
9.9 KiB
C++

#include "stdafx.h"
#include "XMTJDlg.h"
#include "LJCSDlg.h"
#include "CoreTools.h"
#include "uiiado.h"
#define g_sProHead _T("项目")
#define IMG_PROHEAD 9
#define IMG_YEAR 10
#define IMG_PRO 11
#define IMG_SUBPRO 12
IMPLEMENT_DYNAMIC(CXMTJDlg, CDialog)
CXMTJDlg::CXMTJDlg(CWnd* pParent /*=NULL*/)
: CDialog(CXMTJDlg::IDD, pParent)
, m_sPath(_T(""))
, m_sTitles(_T(""))
{
m_pMySQLDb = NULL;
m_sPath = _T("D:\\");
}
CXMTJDlg::~CXMTJDlg()
{
}
void CXMTJDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TREE1, m_wndProTree);
DDX_Control(pDX, IDC_LIST1, m_wndDwgFileList);
DDX_Text(pDX, IDC_EDIT3, m_sPath);
DDX_Text(pDX, IDC_EDIT1, m_sTitles);
}
BEGIN_MESSAGE_MAP(CXMTJDlg, CDialog)
ON_NOTIFY(NM_CLICK, IDC_TREE1, &CXMTJDlg::OnNMClickTree1)
ON_BN_CLICKED(IDC_BUTTON2, &CXMTJDlg::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BTREFRUSH, &CXMTJDlg::OnBnClickeRefrush)
ON_MESSAGE( WM_ACAD_KEEPFOCUS, &CXMTJDlg::onAcadKeepFocus )
ON_NOTIFY(NM_CLICK, IDC_LIST1, &CXMTJDlg::OnNMClickList1)
END_MESSAGE_MAP()
LONG_PTR CXMTJDlg::onAcadKeepFocus( UINT_PTR, LONG_PTR)
{
POINT pt;
::GetCursorPos(&pt);
CRect rect;
GetWindowRect(&rect);
if(!(rect.PtInRect(pt)))
{
return FALSE;
}
return TRUE;
}
BOOL CXMTJDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CBitmap bmp;
if (!bmp.LoadBitmap (IDB_BITMAPPRIV))
{
AfxMessageBox(_T("Can't load bitmap: %x\n"), IDB_BITMAPPRIV);
ASSERT (FALSE);
return FALSE;
}
BITMAP bmpObj;
bmp.GetBitmap (&bmpObj);
UINT nFlags = ILC_COLOR24 | ILC_MASK;
m_imageList.Create (16, bmpObj.bmHeight, nFlags, 0, 0);
m_imageList.Add (&bmp, RGB (255, 0, 0));
m_wndProTree.SetImageList(&m_imageList,TVSIL_NORMAL);
m_wndDwgFileList.SetImageList(&m_imageList,LVSIL_SMALL);
m_wndDwgFileList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_SINGLEROW);
m_wndDwgFileList.InsertColumn(0,_T("文件名"),LVCFMT_LEFT,160);
m_wndDwgFileList.InsertColumn(1,_T("创建时间"),LVCFMT_LEFT,120);
m_wndDwgFileList.InsertColumn(2,_T("CAD版本"),LVCFMT_LEFT,120);
m_wndDwgFileList.InsertColumn(3,_T("设计人"),LVCFMT_LEFT,80);
m_wndDwgFileList.InsertColumn(4,_T("专业"),LVCFMT_LEFT,120);
m_wndDwgFileList.InsertColumn(5,_T("ID"),LVCFMT_LEFT,0);
if ( !InitADOServer() )
{
return FALSE;
}
//年
//项目
//子项
ShowProTree();
return TRUE;
}
void CXMTJDlg::OnBnClickeRefrush()
{
ShowProTree();
}
BOOL CXMTJDlg::InitADOServer()
{
m_pMySQLDb = CLJCSDlg::GetSHEarthWormConnect();
return (m_pMySQLDb != NULL) ? TRUE : FALSE;
}
void CXMTJDlg::ShowProTree()
{
m_wndProTree.DeleteAllItems();
HTREEITEM hProHead = m_wndProTree.InsertItem(g_sProHead,IMG_PROHEAD,IMG_PROHEAD);
CString sSQL;
sSQL = _T("select distinct CreateTime from Aec_ProDrawing order by CreateTime");
CStringArray arTimes;
m_pMySQLDb->GetSelData(sSQL,arTimes);
//年代分类
//2021/03/03 14:41:50.063
int nPos = -1;
CString sTmp,sYear,sTxt;
CStringList lstYears;
for (int i = 0;i < arTimes.GetCount();i++)
{
sTmp = arTimes.GetAt(i);
nPos = sTmp.Find(_T(' '));
if (nPos != -1)
{
//2021/03/03
sTxt = sTmp.Mid(0,nPos);
nPos = sTxt.Find(_T('/'));
if (nPos != -1)
{
sYear = sTxt.Mid(0,nPos);
if (lstYears.Find(sYear) == NULL)
{
lstYears.AddTail(sYear);
}
}
}
}
//先建立年代节点
HTREEITEM hYear = NULL;
for (POSITION ps = lstYears.GetHeadPosition();ps != NULL;)
{
sYear = lstYears.GetNext(ps);
hYear = m_wndProTree.InsertItem(sYear,IMG_YEAR,IMG_YEAR,hProHead);
ShowYearProjs(hYear,sYear);
}
m_wndProTree.Expand(hProHead,TVE_EXPAND);
}
void CXMTJDlg::ShowYearProjs(HTREEITEM hYear,LPCTSTR pszYear)
{
CString sFrom,sTo;
sFrom.Format(_T("%s/1/1 0:0:0"),pszYear);//2021/03/03 14:41:50.063
sTo.Format(_T("%s/12/30 23:59:59"),pszYear);//2021/03/03 14:41:50.063
CString sSQL;
sSQL.Format(_T("select distinct ProTitle,SubProTitle from AEC_ProDrawing where CreateTime between CONVERT(datetime,'%s') and CONVERT(datetime,'%s')"),
sFrom,sTo);
CStringArray arVals;
m_pMySQLDb->GetSelData(sSQL,arVals);
HTREEITEM hPro = NULL,hSubPro = NULL;
CMapStringToPtr mapProToItem;
//项目
//-->子项
CString sProTitle,sSubProTitle;
for (int i = 0;i < arVals.GetSize();i++)
{
if (i%2 == 0)
{
sProTitle = arVals.GetAt(i);
sSubProTitle = arVals.GetAt(i+1);
if (mapProToItem.Lookup(sProTitle,(void*&)hPro))
{
hSubPro = m_wndProTree.InsertItem(sSubProTitle,IMG_SUBPRO,IMG_SUBPRO,hPro);
}
else
{
hPro = m_wndProTree.InsertItem(sProTitle,IMG_PRO,IMG_PRO,hYear);
hSubPro = m_wndProTree.InsertItem(sSubProTitle,IMG_SUBPRO,IMG_SUBPRO,hPro);
mapProToItem.SetAt(sProTitle,hPro);
}
}
}
}
void CXMTJDlg::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
CPoint point,ptcursor;
::GetCursorPos(&point);
ptcursor = point;
m_wndProTree.ScreenToClient(&point);
UINT uFlags;
HTREEITEM hItem = m_wndProTree.HitTest(point, &uFlags), hP(NULL);
if (hItem != NULL)
{
if (hItem == m_hItemCur)
{
return;
}
m_hItemCur = hItem;
int nImage = 0,nImageSel = 0;
m_wndProTree.GetItemImage(hItem,nImage,nImageSel);
if (nImage == IMG_SUBPRO)
{
//列表文件
m_wndDwgFileList.DeleteAllItems();
HTREEITEM hPro = m_wndProTree.GetParentItem(hItem);
CString sPro = m_wndProTree.GetItemText(hPro);
CString sSubPro = m_wndProTree.GetItemText(hItem);
CString sSQL;
sSQL.Format(_T("select FileName,CreateTime,acadver,Designer,ProName,GUID from Aec_ProDrawing \
where ProTitle='%s' and SubProTitle='%s' order by CreateTime"),sPro,sSubPro);
CUIIValueTable vTable;
m_pMySQLDb->GetSelData(sSQL,vTable);
CStringArray arVals;
for (int i = 0;i < vTable.GetTableLogicSize();i++)
{
arVals.RemoveAll();
vTable.GetValueRecord(i,arVals);
if(arVals.GetSize() >= 6)
{
int nItem = m_wndDwgFileList.GetItemCount();
nItem = m_wndDwgFileList.InsertItem(nItem,arVals.GetAt(0),8);
m_wndDwgFileList.SetItemText(nItem,1,arVals.GetAt(1));
m_wndDwgFileList.SetItemText(nItem,2,arVals.GetAt(2));
m_wndDwgFileList.SetItemText(nItem,3,arVals.GetAt(3));
m_wndDwgFileList.SetItemText(nItem,4,arVals.GetAt(4));
m_wndDwgFileList.SetItemText(nItem,5,arVals.GetAt(5));
}
}
}
}
*pResult = 0;
}
typedef struct OpenFileParam
{
TCHAR szDwgFile[MAX_PATH];
}OPENFILEPARAM;
void OpenDwgFile( void *pData)
{
OpenFileParam* pParam = (OpenFileParam*)pData;
Acad::ErrorStatus es;
AcApDocument* pDoc = acDocManager->curDocument();
if (acDocManager->isApplicationContext())
{
#if ARX < 21
acDocManager->pushResourceHandle(acedGetAcadResourceInstance());
#else
acDocManager->pushAcadResourceHandle();
#endif
es = acDocManager->appContextOpenDocument(pParam->szDwgFile);
acDocManager->popResourceHandle();
acutPrintf(_T("\nEs:%d"),es);
}
}
//打开图纸
void CXMTJDlg::OnBnClickedButton2()
{
UpdateData();
AcAxDocLock lock;
if (m_sPath.IsEmpty())
{
AfxMessageBox(_T("请选择下载路径!"));
return;
}
//UZIP
m_sPath.TrimRight(_T('\\'));
POSITION ps = m_wndDwgFileList.GetFirstSelectedItemPosition();
if (ps != NULL)
{
int nItem = m_wndDwgFileList.GetNextSelectedItem(ps);
if (nItem != -1)
{
CString sGUID = m_wndDwgFileList.GetItemText(nItem,5);
CString sFileName = m_wndDwgFileList.GetItemText(nItem,0);
CString sAcadVer = m_wndDwgFileList.GetItemText(nItem,2);
int nAcadVer = 0;
int nPs = sAcadVer.Find(_T('.'));
if (nPs != -1)
{
nAcadVer = _ttoi(sAcadVer.Mid(0,nPs));
}
else
{
nPs = sAcadVer.Find(_T(' '));
if (nPs != -1)
{
nAcadVer = _ttoi(sAcadVer.Mid(0,nPs));
}
}
CString sFullFile = m_sPath;
sFullFile.TrimRight(_T('\\'));
sFullFile += _T('\\');
sFullFile += sFileName;
struct resbuf rb;
acedGetVar(_T("acadver"),&rb);
CString sAcadver1 = rb.resval.rstring;
int nAcadVer1 = 0;
nPs = sAcadver1.Find(_T('.'));
if (nPs != -1)
{
nAcadVer1 = _ttoi(sAcadver1.Mid(0,nPs));
}
else
{
nPs = sAcadver1.Find(_T(' '));
if (nPs != -1)
{
nAcadVer1 = _ttoi(sAcadver1.Mid(0,nPs));
}
}
if (nAcadVer != nAcadVer1)
{
AfxMessageBox(_T("选择的图纸文件格式与当前AutoCAD不匹配,打开失败!"));
return;
}
CString sSQL;
sSQL.Format(_T("select Package from Aec_ProDrawing where GUID='%s'"),sGUID);
if ( m_pMySQLDb->GetSelBlob(sSQL,sFullFile) > 0)
{
CString sDwgFile = sFullFile;
sDwgFile.MakeLower();
sDwgFile.Replace(_T(".zip"),_T(".dwg"));
CStringArray arFilesGet;
CoreTools::unZipFile(sFullFile, sDwgFile,arFilesGet);
::DeleteFile(sFullFile);
if (arFilesGet.GetSize() > 0)
{
sDwgFile = arFilesGet.GetAt(0);
CString sFile2;
//判断文件是否打开
AcApDocumentIterator* pIt = acDocManager->newAcApDocumentIterator();
if (pIt != NULL)
{
for (;pIt->done();pIt->step())
{
AcApDocument* pDoc = pIt->document();
sFile2 = pDoc->fileName();
if ( sDwgFile.CompareNoCase(sFile2) == 0 )
{
sSQL.Format(_T("选择的文件已经打开!\n%s"),sDwgFile);
AfxMessageBox(sSQL);
return;
}
}
delete pIt;
}
static OpenFileParam pParam;
_tcscpy(pParam.szDwgFile,(LPCTSTR)sDwgFile);
acDocManager->executeInApplicationContext(OpenDwgFile, (void *)&pParam);
}
}
}
}
}
BOOL CXMTJDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
switch (LOWORD(wParam))
{
case IDOK:
case IDCANCEL:
case IDCLOSE:
{
ShowWindow(SW_HIDE);
}
return TRUE;
default:
break;
}
return CDialog::OnCommand(wParam, lParam);
}
void CXMTJDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
if (pNMItemActivate != NULL)
{
if ( pNMItemActivate->iItem != -1)
{
int nSel = pNMItemActivate->iItem;
CString sGUID;
sGUID = m_wndDwgFileList.GetItemText(nSel,5);
UpdateData();
CString sSQL;
sSQL.Format(_T("select Titles from Aec_ProDrawing where GUID='%s'"),sGUID);
m_pMySQLDb->GetSelData(sSQL,m_sTitles);
UpdateData(FALSE);
}
}
*pResult = 0;
}