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

409 lines
10 KiB
C++

#include "stdafx.h"
#include "KTPIDPipePageDlg.h"
#include "PIDRecDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#ifndef WM_SHOWPARAMTEXT
#define WM_SHOWPARAMTEXT (WM_USER + 0x1001)
#endif
int getMaxIDFromDB(LPCTSTR pszField, LPCTSTR pszTbl, CUIISQLiteServer *pDb)
{
if (!pszField || !pszTbl || !pDb) return -1;
CString ss(_T("")), v(_T(""));
ss.Format(_T("select max(%s) from %s"), pszField, pszTbl);
if (!pDb->GetSelData(ss, v)) return -1;
return _ttoi(v) + 1;
}
KTPIDPipePageDlg::KTPIDPipePageDlg(CWnd* pParent /*=NULL*/)
: CDialog(KTPIDPipePageDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(KTPIDPipePageDlg)
//}}AFX_DATA_INIT
m_pPipeParam = NULL;
m_pADOServer = NULL;
}
KTPIDPipePageDlg::~KTPIDPipePageDlg()
{
DELETE_PTR(m_pADOServer);
}
void KTPIDPipePageDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(KTPIDPipePageDlg)
DDX_Control(pDX, IDC_LISTPREESS, m_wndPressList);
DDX_Control(pDX, IDC_LISTHEATTRA, m_wndHeatTraList);
DDX_Control(pDX, IDC_LISTDN, m_wndDNList);
DDX_Control(pDX, IDC_MEDIUMLIST, m_wndMedList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(KTPIDPipePageDlg, CDialog)
//{{AFX_MSG_MAP(KTPIDPipePageDlg)
ON_NOTIFY(NM_CLICK, IDC_MEDIUMLIST, OnClickMediumlist)
ON_LBN_SELCHANGE(IDC_LISTDN, OnSelchangeListdn)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL KTPIDPipePageDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
WORD lWord = LOWORD(wParam);
switch (lWord)
{
case IDOK:
case IDCANCEL:
{
return TRUE;
}
default:
break;
}
return CDialog::OnCommand(wParam, lParam);
}
BOOL KTPIDPipePageDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_ImageList.Create(IDB_BITMAPPIPE,16,1,ILC_COLOR16);
m_wndMedList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
m_wndMedList.SetImageList(&m_ImageList,LVSIL_SMALL);
m_wndMedList.InsertColumn(0,_T("介质"),LVCFMT_LEFT,40,100);
m_wndMedList.InsertColumn(1,_T("描述"),LVCFMT_LEFT,120,100);
m_wndHeatTraList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
m_wndHeatTraList.SetImageList(&m_ImageList,LVSIL_SMALL);
m_wndHeatTraList.InsertColumn(0,_T("代号 "),LVCFMT_LEFT,40,100);
m_wndHeatTraList.InsertColumn(1,_T("说明 "),LVCFMT_LEFT,120,100);
m_wndHeatTraList.InsertColumn(2,_T("标注 "),LVCFMT_LEFT,0,0);
CString dbPath = FilePath::GetSysDir();
dbPath += _T("\\Plumbing.db");
m_pADOServer = new CUIISQLiteServer;
if (!m_pADOServer->InitADOServer(dbPath))
{
AfxMessageBox(_T("数据库驱动加载数据库Plumbing.db失败!"));
return FALSE;
}
//1.DN
InitDNParam();
//2.Media
InitMediumFromDb();
//3.press
InitPressFromDb();
//4.
InitHeatTraFromDb();
return TRUE;
}
void KTPIDPipePageDlg::InitDNParam()
{
CString sSQL,sDN,sRat;
sDN.Format(_T("%d"),(int)m_pPipeParam->m_dDN);
sSQL = _T("select [公制] from AecDn order by [公制]"); //可能为英制,从设置中读取,待定
CStringArray arValues;
m_pADOServer->GetSelData(sSQL,arValues);
m_wndDNList.ResetContent();
for (int i = 0;i < arValues.GetSize();i++)
{
m_wndDNList.InsertString(i,arValues.GetAt(i));
}
int nIndex = m_wndDNList.FindString(0,sDN);
if (nIndex != -1)
m_wndDNList.SetCurSel(nIndex);
//英制的记录
CString sInchDN = _T("");
sSQL.Format(_T("select [英制] from AecDn where [公制]=%d"),_ttoi(sDN));
m_pADOServer->GetSelData(sSQL,sInchDN);
if (!sInchDN.IsEmpty())
_tcscpy(m_pPipeParam->m_pszInchDN,sInchDN);
}
BOOL KTPIDPipePageDlg::InitMediumFromDb()
{
if (m_pADOServer != NULL)
{
int nSel = 0;
//1。介质描述
CUIIValueTable table;
CString sSQL,sText,sDescr;
sSQL = _T("select [介质代号],[介质] from AecFluid order by ID");
m_pADOServer->GetSelData(sSQL,table);
int nCount = table.GetTableLogicSize();
int i = 0,nSize = 0;
m_wndMedList.DeleteAllItems();
CStringArray arValue;
for(i = 0;i<nCount;i++)
{
arValue.RemoveAll();
table.GetValueRecord(i,arValue);
nSize = arValue.GetSize();
ASSERT(nSize == 2);
sText = arValue.GetAt(0);
sDescr= arValue.GetAt(1);
m_wndMedList.InsertItem(i,sText,0);
m_wndMedList.SetItemText(i,1,sDescr);
if (sText.CompareNoCase(m_pPipeParam->m_pszMedia) == 0)
{
nSel = i;
}
}
m_wndMedList.SetItemState(nSel,LVIS_SELECTED,LVIS_SELECTED);
m_wndMedList.EnsureVisible(nSel,FALSE);
return TRUE;
}
return FALSE;
}
void KTPIDPipePageDlg::InitPressFromDb()
{
//获取项目名称
AecDbObjXDataMap xDataMap;
{
xDataMap.SetAt(DOC_TRADE, WPipe::ePetro); //应用行业,石油
xDataMap.SetAt(DOC_SCALE, _T("1:50")); //出图比例
xDataMap.SetAt(DOC_PLOTWIDTH, 0.5); //最小打印线宽
xDataMap.SetAt(DOC_DPLOTWIDTH, 0.5); //双线打印线宽
xDataMap.SetAt(DOC_WELDDIA, 1.0); //焊点直径
xDataMap.SetAt(DOC_PIPEMINDIA, 65.0); //最小管道直径
xDataMap.SetAt(DOC_PIPEMAXDIA, 200.0); //最大管线直径
xDataMap.SetAt(DOC_PERELBOWDIA, 40.0); //垂直弯头直径
xDataMap.SetAt(DOC_BREAKSPACE, 2.0); //交叉断线间距
xDataMap.SetAt(DOC_UNIT, 0); //单位
xDataMap.SetAt(DOC_DIMTERM, 0); //标注端符
xDataMap.SetAt(DOC_DIMTXTH, 2.0); //标注文字高度
xDataMap.SetAt(DOC_DIMTXTF, 0.7); //标注文字宽度系数
xDataMap.SetAt(DOC_EQPTXTH, 2.0); //设备标注文字高度
xDataMap.SetAt(DOC_EQPTXTF, 1.0); //设备标注文字宽度系数
xDataMap.SetAt(DOC_STRTXTH, 2.0); //结构标注文字高度
xDataMap.SetAt(DOC_STRTXTF, 0.7); //结构标注文字宽度系数
xDataMap.SetAt(DOC_SCRIPTT, _T("{0}{-}{1}{-}{2}{-}{3}"));//上标脚本
xDataMap.SetAt(DOC_SCRIPTB, _T("{4}{-}{5}"));//下标脚本
xDataMap.SetAt(DOC_ELTYPE, 0); //标高设置
xDataMap.SetAt(DOC_ELDESCR, _T("--")); //标高文本
}
if (!KTModelLayoutXData::ReadModelXData(KT_PIPEINIT,xDataMap))
{
acedAlert(_T("\n系统未初始化!"));
return;
}
CString sProject;
xDataMap.GetAt(DOC_PIDPROJECT,sProject);
CString sSQL;
sSQL.Format(_T("select [等级名称] from AecSpecname where [项目名称]='%s'"),sProject);
CStringArray arValues;
m_pADOServer->GetSelData(sSQL,arValues);
m_wndPressList.ResetContent();
for (int i = 0;i < arValues.GetSize();i++)
{
m_wndPressList.InsertString(i,arValues.GetAt(i));
}
int nIndex = m_wndPressList.FindString(0,m_pPipeParam->m_pszLevel);
if (nIndex != -1)
{
m_wndPressList.SetCurSel(nIndex);
}
else
{
m_wndPressList.SetCurSel(0);
}
}
void KTPIDPipePageDlg::InitHeatTraFromDb()
{
CString sSQL;
sSQL.Format(_T("select [保温伴热代号],[说明文字],[标注文字] from AecHeat"));
CUIIValueTable table;
m_pADOServer->GetSelData(sSQL,table);
int nSel = -1;
CStringArray arValues;
m_wndHeatTraList.DeleteAllItems();
for (int i = 0;i < table.GetTableLogicSize();i++)
{
arValues.RemoveAll();
table.GetValueRecord(i,arValues);
if (arValues.GetSize() == 3)
{
m_wndHeatTraList.InsertItem(i,arValues.GetAt(0),2);
m_wndHeatTraList.SetItemText(i,1,arValues.GetAt(1));
m_wndHeatTraList.SetItemText(i,2,arValues.GetAt(2));
if (arValues.GetAt(0).CompareNoCase(m_pPipeParam->m_pszInsTag) == 0)
nSel = i;
}
}
if (nSel == -1) nSel = 0;
m_wndHeatTraList.SetItemState(nSel,LVIS_SELECTED,LVIS_SELECTED);
}
BOOL KTPIDPipePageDlg::UpdateDataEx()
{
//1.DN
int nSel = m_wndDNList.GetCurSel();
if (nSel == -1) return FALSE;
CString sDN;
m_wndDNList.GetText(nSel,sDN);
m_pPipeParam->m_dDN = _ttof(sDN);
//英制
CString sInchDN = _T(""), sSQL;
sSQL.Format(_T("select [英制] from AecDn where [公制]=%d"),_ttoi(sDN));
m_pADOServer->GetSelData(sSQL,sInchDN);
if (!sInchDN.IsEmpty())
_tcscpy(m_pPipeParam->m_pszInchDN,sInchDN);
//2.介质
POSITION ps = m_wndMedList.GetFirstSelectedItemPosition();
if (ps != NULL)
{
int nItem = m_wndMedList.GetNextSelectedItem(ps);
if (nItem != -1)
{
CString sMedia = m_wndMedList.GetItemText(nItem,0);
CString sDescr = m_wndMedList.GetItemText(nItem,1);
_tcscpy(m_pPipeParam->m_pszMedia,sMedia);
_tcscpy(m_pPipeParam->m_pszDesc,sDescr);
}
}
//3.压力
nSel = m_wndPressList.GetCurSel();
if (nSel != -1)
{
CString sText;
m_wndPressList.GetText(nSel,sText);
_tcscpy(m_pPipeParam->m_pszLevel,sText);
}
//4.保温伴热
ps = m_wndHeatTraList.GetFirstSelectedItemPosition();
if (ps != NULL)
{
int nItem = m_wndHeatTraList.GetNextSelectedItem(ps);
if (nItem != -1)
{
CString sTag = m_wndHeatTraList.GetItemText(nItem,0);
CString sDimTag = m_wndHeatTraList.GetItemText(nItem,1);
_tcscpy(m_pPipeParam->m_pszInsTag,sTag);
_tcscpy(m_pPipeParam->m_pszInsTagDim,sDimTag);
}
}
return TRUE;
}
void KTPIDPipePageDlg::OnClickMediumlist(NMHDR* pNMHDR, LRESULT* pResult)
{
POSITION ps = m_wndMedList.GetFirstSelectedItemPosition();
if (ps != NULL)
{
int nItem = m_wndMedList.GetNextSelectedItem(ps);
if (nItem != -1)
{
CString sMedia = m_wndMedList.GetItemText(nItem,0);
CString sDescr = m_wndMedList.GetItemText(nItem,1);
_tcscpy(m_pPipeParam->m_pszMedia,sMedia);
_tcscpy(m_pPipeParam->m_pszDesc,sDescr);
GetParent()->GetParent()->SendMessage(WM_SHOWPARAMTEXT);
}
}
*pResult = 0;
}
void KTPIDPipePageDlg::OnSelchangeListdn()
{
int nSel = m_wndDNList.GetCurSel();
if (nSel == -1) return;
CString sDN;
m_wndDNList.GetText(nSel,sDN);
m_pPipeParam->m_dDN = _ttof(sDN);
GetParent()->GetParent()->SendMessage(WM_SHOWPARAMTEXT);
}
void KTPIDPipePageDlg::OnAddPipeLine()
{
CPIDRecDlg dlg;
if (IDOK == dlg.DoModal() )
{
int nID = getMaxIDFromDB(_T("ID"), _T("AecDn"), m_pADOServer);
if (nID == -1) return;
//DN
CString sSQL;
sSQL.Format(_T("insert into AecDn (ID,[公制],[英制]) values (%d,%d,'%s')"),
nID,dlg.m_nDN,_T("-1") );
m_pADOServer->ExecuteSQL(sSQL);
//介质
nID = getMaxIDFromDB(_T("ID"), _T("AecFluid"), m_pADOServer);
sSQL.Format(_T("insert into AecFluid (ID,[行业],[介质代号],[介质]) values (%d,'%s','%s','%s')"),
nID,_T("市政"),dlg.m_sMedia,dlg.m_sDescr);
m_pADOServer->ExecuteSQL(sSQL);
//等级
nID = getMaxIDFromDB(_T("ID"), _T("AecSpecname"), m_pADOServer);
sSQL.Format(_T("insert into AecSpecname (ID,[项目名称],[等级名称]) values (%d,'%s','%s')"),
nID,_T("KT-1"),dlg.m_sPress);
m_pADOServer->ExecuteSQL(sSQL);
//保温伴热
nID = getMaxIDFromDB(_T("ID"), _T("AecHeat"), m_pADOServer);
sSQL.Format(_T("insert into AecHeat (ID,[保温伴热代号],[说明文字],[标注文字],[标志]) values (%d,'%s','%s','%s',%d)"),
nID,dlg.m_sCode,dlg.m_sHotRem,dlg.m_sCode,1);
m_pADOServer->ExecuteSQL(sSQL);
//1.DN
InitDNParam();
//2.Media
InitMediumFromDb();
//3.press
InitPressFromDb();
//4.
InitHeatTraFromDb();
}
}