Files
envi-code/SourceCode/Code2026/PipelineCmd/FlangeDlg.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

631 lines
16 KiB
C++

#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)
{
sEndF = _T("FF");
if (m_arFlangeVals.GetSize() > 0)
sEndF = m_arFlangeVals.GetAt(0);
}
void CFlangeDlg::GetEndF2(CString &sEndF)
{
sEndF = _T("FF");
if (m_arFlangeVals.GetSize() > 1)
sEndF = m_arFlangeVals.GetAt(1);
}
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();
}
}