Files
envi-code/SourceCode/Code2026/PipelineCmd/FlangeDlg.cpp
T
company-desktop-computer 9d9077a03e fix(FlangeDlg): 修正 GetEndF1/GetEndF2 端面取值下标
- CFlangeDlg::GetEndF1/GetEndF2 原先取 m_arFlangeVals 下标 0/1(公称直径/法兰外径),
  端面型式实际在下标 5/6,导致 PIPE_FLANGF 被写成 DN 字符串
- 改为下标 5/6,且为空时回退 "FF"
2026-10-09 14:09:23 +08:00

632 lines
17 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "stdafx.h"
#include "coretools.h"
#include "FlangeDlg.h"
#include "GasketDlg.h"
#include "FlangeRecDlg.h"
extern int getMaxIDFromDB(LPCTSTR pszField, LPCTSTR pszTbl, CUIISQLiteServer *pDb);
IMPLEMENT_DYNAMIC(CFlangeDlg, CDialog)
CFlangeDlg::CFlangeDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFlangeDlg::IDD, pParent)
{
m_dPressure = 1.0;
m_nDN = 100;
m_pDb = NULL;
m_sLevel = _T("");
m_sPro = _T("");
}
CFlangeDlg::~CFlangeDlg()
{
}
void CFlangeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LISTFLANGE, m_wndListFlange);
DDX_Control(pDX, IDC_LISTGASKET, m_wndListGasket);
DDX_Control(pDX, IDC_COMBOPRE, m_wndComboPre);
DDX_Control(pDX, IDC_LIST1, m_wndFlangeEndF1);
}
BEGIN_MESSAGE_MAP(CFlangeDlg, CDialog)
ON_BN_CLICKED(IDOK, &CFlangeDlg::OnBnClickedOk)
ON_BN_CLICKED(IDC_BUTTON3,&CFlangeDlg::OnAddFlange)
ON_BN_CLICKED(IDC_BUTTON1, &CFlangeDlg::OnAddGasket)
ON_BN_CLICKED(IDC_DEL_GASKET, &CFlangeDlg::OnRemoveGasket)
ON_BN_CLICKED(IDC_MODIFY_GASKET, &CFlangeDlg::OnModifyGasket)
ON_BN_CLICKED(IDC_DEL_FLANGE, &CFlangeDlg::OnRemoveFlange)
ON_BN_CLICKED(IDC_MODIFY_FLANGE, &CFlangeDlg::OnModifyFlange)
END_MESSAGE_MAP()
void CFlangeDlg::SetPressure(double dPre)
{
m_dPressure = dPre;
}
void CFlangeDlg::SetLevel(LPCTSTR pszODNo, LPCTSTR pszPro, LPCTSTR pszLevel)
{
m_sLevel = pszLevel;
m_sPro = pszPro;
}
void CFlangeDlg::SetDN(int nDn)
{
m_nDN = nDn;
}
void CFlangeDlg::GetFlangeValues(CStringArray& arValues)
{
arValues.Append(m_arFlangeVals);
}
void CFlangeDlg::GetGasketValues(CStringArray& arValues)
{
arValues.Append(m_arGasketVals);
}
BOOL CFlangeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_wndListFlange.InsertColumn(0,_T("公称直径"),LVCFMT_LEFT,100,80);
m_wndListFlange.InsertColumn(1,_T("法兰外径"),LVCFMT_LEFT,100,80);
m_wndListFlange.InsertColumn(2,_T("法兰高度"),LVCFMT_LEFT,100,80); m_wndListFlange.InsertColumn(3,_T("法兰厚度"),LVCFMT_LEFT,100,80);
m_wndListFlange.InsertColumn(3,_T("法兰厚度"),LVCFMT_LEFT,100,80);
m_wndListFlange.InsertColumn(4,_T("法兰颈"),LVCFMT_LEFT,100,80);
m_wndListFlange.InsertColumn(5,_T("法兰类型"),LVCFMT_LEFT,100,80);
//m_wndListFlange.InsertColumn(6,_T("端面"),LVCFMT_LEFT,100,80);
m_wndListFlange.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_wndListGasket.InsertColumn(0,_T("公称直径"),LVCFMT_LEFT,100,80);
m_wndListGasket.InsertColumn(1,_T("材质"),LVCFMT_LEFT,100,80);
m_wndListGasket.InsertColumn(2,_T("压力"),LVCFMT_LEFT,50,50);
m_wndListGasket.InsertColumn(3,_T("垫片厚度"),LVCFMT_LEFT,50,50);
m_wndListGasket.InsertColumn(4,_T("描述"),LVCFMT_LEFT,200,200);
m_wndListGasket.SetExtendedStyle(LVS_EX_FULLROWSELECT);
ShowFlange();
ShowGasket();
if (m_nDN <= 2000)
{
CWnd *pWnd(NULL);
pWnd = GetDlgItem(IDC_MODIFY_FLANGE);
if (pWnd) pWnd->ShowWindow(SW_HIDE);
pWnd = GetDlgItem(IDC_MODIFY_GASKET);
if (pWnd) pWnd->ShowWindow(SW_HIDE);
pWnd = GetDlgItem(IDC_DEL_GASKET);
if (pWnd) pWnd->ShowWindow(SW_HIDE);
pWnd = GetDlgItem(IDC_DEL_FLANGE);
if (pWnd) pWnd->ShowWindow(SW_HIDE);
}
m_wndComboPre.SetCurSel(0);//?? 常压
CString sText;
for (int i = 0;i < m_wndComboPre.GetCount();i++)
{
m_wndComboPre.GetLBText(i,sText);
if (fabs(m_dPressure - _ttof(sText)) < 1.e-3)
{
m_wndComboPre.SetCurSel(i);
break;
}
}
return TRUE;
}
void CFlangeDlg::ShowFlange()
{
/*!!! 此处为得到所有满足条件的法兰,所以无法使用 CoreTools::QueryFlangData() 函数 !!!*/
CString sSQL,sTemp;
if (m_sLevel.IsEmpty())//没有等级
{
sSQL.Format(_T("select [公称直径],[法兰外径],[法兰高度],[法兰厚度],[法兰颈],[法兰类型] from AecFlangeData \
where [公称直径]=%d and [压力]>%.1f and [压力]<%.1f"),m_nDN,m_dPressure - 0.1,m_dPressure + 0.1);
}
else
{
//项目 等级 压力 -->标准号
sSQL.Format(_T("select DISTINCT [标准号] from AecSpecFlange where [项目名称]='%s' and [等级名称]='%s' and [类别]='法兰' and [压力]>%.1f and [压力]<%.1f "),
m_sPro,m_sLevel, m_dPressure - 0.1, m_dPressure + 0.1);
CString sStd;
m_pDb->GetSelData(sSQL, sStd);
if (sStd.IsEmpty())
{
sSQL.Format(_T("select [公称直径],[法兰外径],[法兰高度],[法兰厚度],[法兰颈],[法兰类型] from AecFlangeData \
where [公称直径]=%d and [压力]>%.1f and [压力]<%.1f"), m_nDN, m_dPressure - 0.1, m_dPressure + 0.1);
}
else
{
sSQL.Format(_T("select [公称直径],[法兰外径],[法兰高度],[法兰厚度],[法兰颈],[法兰类型] from AecFlangeData \
where [公称直径]=%d and [标准号]='%s' and [压力]>%.1f and [压力]<%.1f"), m_nDN, sStd,m_dPressure - 0.1, m_dPressure + 0.1);
}
}
m_wndListFlange.DeleteAllItems();
std::vector<std::vector<CString>> ars;
m_pDb->GetSelDataEx(sSQL, ars);
if (!ars.empty())
{
for (size_t i(0); i < ars.size(); ++i)
{
std::vector<CString> ss(ars[i]);
if (ss.size() < 6) continue;
int idx = m_wndListFlange.InsertItem(0, ss[0]);
m_wndListFlange.SetItemText(idx, 1, ss[1]);
m_wndListFlange.SetItemText(idx, 2, ss[2]);
m_wndListFlange.SetItemText(idx, 3, ss[3]);
m_wndListFlange.SetItemText(idx, 4, ss[4]);
m_wndListFlange.SetItemText(idx, 5, ss[5]);
//m_wndListFlange.SetItemText(idx, 6, ss[6]);
}
}
else
{
//按1.0查询
sSQL.Format(_T("select [公称直径],[法兰外径],[法兰高度],[法兰厚度],[法兰颈],[法兰类型] from AecFlangeData \
where [公称直径]=%d and [压力]>%.1f and [压力]<%.1f"), m_nDN, 0.8, 1.1);
m_pDb->GetSelDataEx(sSQL, ars);
if (!ars.empty())
{
for (size_t i(0); i < ars.size(); ++i)
{
std::vector<CString> ss(ars[i]);
if (ss.size() < 6) continue;
int idx = m_wndListFlange.InsertItem(0, ss[0]);
m_wndListFlange.SetItemText(idx, 1, ss[1]);
m_wndListFlange.SetItemText(idx, 2, ss[2]);
m_wndListFlange.SetItemText(idx, 3, ss[3]);
m_wndListFlange.SetItemText(idx, 4, ss[4]);
m_wndListFlange.SetItemText(idx, 5, ss[5]);
//m_wndListFlange.SetItemText(idx, 6, ss[6]);
}
}
else
{
AfxMessageBox(_T("没有查到压力为 %.1f mpa 的法兰数据!"), m_dPressure);
}
}
m_wndListFlange.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED);
CStringArray arVals;
sSQL = _T("select distinct [端面型式] from AecFace");
m_pDb->GetSelData(sSQL, arVals);
for (int i = 0;i < arVals.GetSize();i++)
{
m_wndFlangeEndF1.AddString(arVals.GetAt(i));
}
}
void CFlangeDlg::ShowGasket()
{
//最小1.6
if (m_dPressure - 1.0 < 1.e-3)
m_dPressure = 1.6;
m_wndListGasket.DeleteAllItems();
CString sSQL,sTemp;
if (m_sLevel.IsEmpty())
{
sSQL.Format(_T("select [公称直径],[材质],[压力],[垫片厚度],[描述] from AecSpecGasket \
where [公称直径]=%d and [压力]>%.1f"),m_nDN,m_dPressure - 0.1);
}
else
{
sSQL.Format(_T("select [公称直径],[材质],[压力],[垫片厚度],[描述] from AecSpecGasket \
where [项目名称]='%s' and [等级名称]='%s' and [公称直径]=%d and [压力]>%.1f"),m_sPro,m_sLevel, m_nDN, m_dPressure - 0.1);
}
CStringArray arValues;
CUIIValueTable table;
m_pDb->GetSelData(sSQL, table);
if (table.GetTableLogicSize() > 0)
{
for (int i = 0; i < table.GetTableLogicSize(); i++)
{
arValues.RemoveAll();
table.GetValueRecord(i, arValues);
sTemp = arValues.GetAt(0);
m_wndListGasket.InsertItem(0, sTemp);
sTemp = arValues.GetAt(1);
m_wndListGasket.SetItemText(0, 1, sTemp);
sTemp = arValues.GetAt(2);
m_wndListGasket.SetItemText(0, 2, sTemp);
sTemp = arValues.GetAt(3);
m_wndListGasket.SetItemText(0, 3, sTemp);
sTemp = arValues.GetAt(4);
m_wndListGasket.SetItemText(0, 4, sTemp);
}
if (table.GetTableLogicSize() > 0)
m_wndListGasket.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);
}
else
{
sSQL.Format(_T("select [公称直径],[材质],[压力],[垫片厚度],[描述] from AecSpecGasket \
where [公称直径]=%d"),m_nDN);
m_pDb->GetSelData(sSQL, table);
if (table.GetTableLogicSize() > 0)
{
for (int i = 0; i < table.GetTableLogicSize(); i++)
{
arValues.RemoveAll();
table.GetValueRecord(i, arValues);
sTemp = arValues.GetAt(0);
m_wndListGasket.InsertItem(i, sTemp);
sTemp = arValues.GetAt(1);
m_wndListGasket.SetItemText(i, 1, sTemp);
sTemp = arValues.GetAt(2);
m_wndListGasket.SetItemText(i, 2, sTemp);
sTemp = arValues.GetAt(3);
m_wndListGasket.SetItemText(i, 3, sTemp);
sTemp = arValues.GetAt(4);
m_wndListGasket.SetItemText(i, 4, sTemp);
}
if (table.GetTableLogicSize() > 0)
m_wndListGasket.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
}
else
{
AfxMessageBox(_T("没有查到压力为 %.1f mpa 的 垫片数据信息!"));
}
}
}
void CFlangeDlg::SetAdoDb(CUIISQLiteServer *pDb)
{
m_pDb = pDb;
}
void CFlangeDlg::GetEndF1(CString &sEndF)
{
//端面型式在 m_arFlangeVals 的下标 5(0公称直径 1法兰外径 2法兰高度 3法兰厚度 4法兰颈 5端面1 6端面2)
sEndF = _T("FF");
if (m_arFlangeVals.GetSize() > 5 && !m_arFlangeVals.GetAt(5).IsEmpty())
sEndF = m_arFlangeVals.GetAt(5);
}
void CFlangeDlg::GetEndF2(CString &sEndF)
{
sEndF = _T("FF");
if (m_arFlangeVals.GetSize() > 6 && !m_arFlangeVals.GetAt(6).IsEmpty())
sEndF = m_arFlangeVals.GetAt(6);
}
void CFlangeDlg::OnBnClickedOk()
{
int nCount = m_wndListFlange.GetItemCount();
if (nCount == 0)
return;
POSITION ps = m_wndListGasket.GetFirstSelectedItemPosition();
if (ps == NULL)
{
AfxMessageBox(_T("没有选择垫片信息!请选择附属的垫片信息"));
return;
}
/*
m_wndListFlange.InsertColumn(0,_T("公称直径"),LVCFMT_LEFT,100,80);
m_wndListFlange.InsertColumn(1,_T("法兰外径"),LVCFMT_LEFT,100,80);
m_wndListFlange.InsertColumn(2,_T("法兰高度"),LVCFMT_LEFT,100,80);
m_wndListFlange.InsertColumn(3,_T("法兰厚度"),LVCFMT_LEFT,100,80);
m_wndListFlange.InsertColumn(4,_T("法兰颈"),LVCFMT_LEFT,100,80);
m_wndListGasket.InsertColumn(0,_T("公称直径"),LVCFMT_LEFT,100,80);
m_wndListGasket.InsertColumn(1,_T("材质"),LVCFMT_LEFT,100,80);
m_wndListGasket.InsertColumn(2,_T("压力"),LVCFMT_LEFT,50,50);
m_wndListGasket.InsertColumn(3,_T("垫片厚度"),LVCFMT_LEFT,50,50);
m_wndListGasket.InsertColumn(4,_T("描述"),LVCFMT_LEFT,200,200);
*/
if (m_wndListFlange.GetItemCount() < 1)
{
AfxMessageBox(_T("没有可用的法兰尺寸!"));
return;
}
if (m_wndListGasket.GetItemCount() < 1)
{
AfxMessageBox(_T("没有可用的垫片信息!"));
return;
}
CString sEndF1 = _T(""),sEndF2 = _T("");
int nSel = m_wndFlangeEndF1.GetCurSel();
if (nSel != -1)
{
m_wndFlangeEndF1.GetText(nSel, sEndF1);
sEndF2 = sEndF1;
}
int iSel = m_wndListFlange.GetSelectionMark();
if (iSel == LB_ERR) iSel = 0;
CString sDn,sOD,sH,sThick,sN;
sDn = m_wndListFlange.GetItemText(iSel,0);
sOD = m_wndListFlange.GetItemText(iSel,1);
sH = m_wndListFlange.GetItemText(iSel,2);
sThick = m_wndListFlange.GetItemText(iSel,3);
sN = m_wndListFlange.GetItemText(iSel,4);
m_arFlangeVals.RemoveAll();
m_arFlangeVals.Add(sDn);
m_arFlangeVals.Add(sOD);
m_arFlangeVals.Add(sH);
m_arFlangeVals.Add(sThick);
m_arFlangeVals.Add(sN);
m_arFlangeVals.Add(sEndF1);
m_arFlangeVals.Add(sEndF2);
iSel = m_wndListGasket.GetSelectionMark();
if (iSel == LB_ERR) iSel = 0;
CString sMet,sPre,sT,sDescr;
sMet = m_wndListGasket.GetItemText(iSel, 1);
sPre = m_wndListGasket.GetItemText(iSel,2);
sT = m_wndListGasket.GetItemText(iSel,3);
sDescr = m_wndListGasket.GetItemText(iSel,4);
m_arGasketVals.Add(sDn);
m_arGasketVals.Add(sMet);
m_arGasketVals.Add(sPre);
m_arGasketVals.Add(sT);
m_arGasketVals.Add(sDescr);
OnOK();
}
void CFlangeDlg::OnAddFlange()
{
CFlangeRecDlg dlg;
dlg.SetAdoDb(m_pDb);
dlg.m_nDN = m_nDN;
dlg.m_dFD = (int)(2.0 * m_nDN);
dlg.m_dH = (int)(0.4 * m_nDN);
dlg.m_dt = (int)(0.22 * m_nDN);
dlg.m_dFd = (int)(1.4 * m_nDN);
if (IDOK == dlg.DoModal() )
{
CString sSQL;
sSQL.Format(_T("insert into AecFlangeData (")
_T("[公称直径]") // integer
_T(", [压力]") // float
_T(", [法兰类型]") // char(50)
_T(", [端面]") // char(50)
_T(", [法兰外径]") // integer
_T(", [法兰高度]") // integer
_T(", [法兰厚度]") // integer
_T(", [法兰颈]") // varchar(255)
_T(", [标准号])") // char(50)
_T("values(%d, %g, '%s', '%s', %d, %d, %d, '%d', '%s')")
, dlg.m_nDN
, dlg.m_dPress
, dlg.m_sType
, dlg.m_sEndF1
, dlg.m_dFD
, dlg.m_dH
, dlg.m_dt
, dlg.m_dFd
,dlg.m_sStd);
BOOL bRes = m_pDb->ExecuteSQL(sSQL);
ShowFlange();
}
}
void CFlangeDlg::OnAddGasket()
{
CGasketDlg dlg;
dlg.m_nDN = m_nDN;
if (IDOK == dlg.DoModal())
{
CString sSQL;
sSQL.Format(_T("insert into AecSpecGasket ([公称直径],[材质],[压力],[垫片厚度],[描述]) values \
(%d,'%s',%g,%g,'%s')"),dlg.m_nDN,dlg.m_sMat,dlg.m_dPress,dlg.m_dt,dlg.m_sRem);
m_pDb->ExecuteSQL(sSQL);
ShowGasket();
}
}
void CFlangeDlg::OnRemoveGasket()
{
int idx = m_wndListGasket.GetSelectionMark();
if (idx == -1)
{
AfxMessageBox(_T("请选择一行数据!"));
return;
}
CString s0 = m_wndListGasket.GetItemText(idx, 0);
CString s1 = m_wndListGasket.GetItemText(idx, 1);
CString s2 = m_wndListGasket.GetItemText(idx, 2);
CString s3 = m_wndListGasket.GetItemText(idx, 3);
CString s4 = m_wndListGasket.GetItemText(idx, 4);
CString sql;
sql.Format(_T("delete from AecSpecGasket where [公称直径] = '%s'\
and [材质] = '%s'\
and [压力] = '%s'\
and [垫片厚度] = '%s'\
and [描述] = '%s'"), s0, s1, s2, s3, s4);
m_pDb->ExecuteSQL(sql);
ShowGasket();
}
void CFlangeDlg::OnModifyGasket()
{
int idx = m_wndListGasket.GetSelectionMark();
if (idx == -1)
{
AfxMessageBox(_T("请选择一行数据!"));
return;
}
CString s0 = m_wndListGasket.GetItemText(idx, 0);
CString s1 = m_wndListGasket.GetItemText(idx, 1);
CString s2 = m_wndListGasket.GetItemText(idx, 2);
CString s3 = m_wndListGasket.GetItemText(idx, 3);
CString s4 = m_wndListGasket.GetItemText(idx, 4);
CString sql;
sql.Format(_T("select ID from AecSpecGasket where [公称直径] = '%s'\
and [材质] = '%s'\
and [压力] = '%s'\
and [垫片厚度] = '%s'\
and [描述] = '%s'"), s0, s1, s2, s3, s4);
CString sId(_T(""));
m_pDb->GetSelData(sql, sId);
if (sId.IsEmpty())
{
AfxMessageBox(_T("未在数据库内找到此数据!"));
return;
}
CGasketDlg dlg;
dlg.m_nDN = m_nDN;
dlg.m_sMat = s1;
dlg.m_dt = TypeConvert::convert<int, LPCTSTR>(s3);
dlg.m_sRem = s4;
if (IDOK == dlg.DoModal())
{
CString sSQL;
sSQL.Format(_T("update AecSpecGasket set [材质] = '%s'\
,[垫片厚度] = '%d'\
,[描述] = '%d'\
where [ID] = '%s'")
, dlg.m_sMat
, dlg.m_dt
, dlg.m_sRem
, sId);
m_pDb->ExecuteSQL(sSQL);
ShowGasket();
}
}
void CFlangeDlg::OnRemoveFlange()
{
int idx = m_wndListFlange.GetSelectionMark();
if (idx == -1)
{
AfxMessageBox(_T("请选择一行数据!"));
return;
}
CString s0 = m_wndListFlange.GetItemText(idx, 0);
CString s1 = m_wndListFlange.GetItemText(idx, 1);
CString s2 = m_wndListFlange.GetItemText(idx, 2);
CString s3 = m_wndListFlange.GetItemText(idx, 3);
CString s4 = m_wndListFlange.GetItemText(idx, 4);
CString sql;
sql.Format(_T("delete from AecFlangeData where [公称直径] = '%s'\
and [法兰外径] = '%s'\
and [法兰高度] = '%s'\
and [法兰厚度] = '%s'\
and [法兰颈] = '%s'"), s0, s1, s2, s3, s4);
m_pDb->ExecuteSQL(sql);
ShowFlange();
}
void CFlangeDlg::OnModifyFlange()
{
int idx = m_wndListFlange.GetSelectionMark();
if (idx == -1)
{
AfxMessageBox(_T("请选择一行数据!"));
return;
}
CString s0 = m_wndListFlange.GetItemText(idx, 0);
CString s1 = m_wndListFlange.GetItemText(idx, 1);
CString s2 = m_wndListFlange.GetItemText(idx, 2);
CString s3 = m_wndListFlange.GetItemText(idx, 3);
CString s4 = m_wndListFlange.GetItemText(idx, 4);
CString sql;
sql.Format(_T("select id from AecFlangeData where [公称直径] = '%s'\
and [法兰外径] = '%s'\
and [法兰高度] = '%s'\
and [法兰厚度] = '%s'\
and [法兰颈] = '%s'"), s0, s1, s2, s3, s4);
CString sId(_T(""));
m_pDb->GetSelData(sql, sId);
if (sId.IsEmpty())
{
AfxMessageBox(_T("未在数据库内找到此数据!"));
return;
}
CFlangeRecDlg dlg;
dlg.m_nDN = m_nDN;
dlg.m_dFD = TypeConvert::convert<int, LPCTSTR>(s1);
dlg.m_dH = TypeConvert::convert<int, LPCTSTR>(s2);
dlg.m_dt = TypeConvert::convert<int, LPCTSTR>(s3);
dlg.m_dFd = TypeConvert::convert<int, LPCTSTR>(s4);
if (IDOK == dlg.DoModal())
{
CString sSQL;
sSQL.Format(_T("update AecFlangeData set [法兰外径] = '%d'\
,[法兰高度] = '%d'\
,[法兰厚度] = '%d'\
,[法兰颈] = '%d'\
where [ID]='%s'")
, dlg.m_dFD
, dlg.m_dH
, dlg.m_dt
, dlg.m_dFd
, sId );
m_pDb->ExecuteSQL(sSQL);
ShowFlange();
}
}