2026-10-04 00:04:20 +08:00
#include "StdAfx.h"
2026-09-28 15:28:50 +08:00
#include "aecPipeSupport.h"
#include "EarThwormDef.h"
#include "KTModelLayoutXData.h"
#include "coretools.h"
TDbPipeSupport :: TDbPipeSupport ( void )
{
}
TDbPipeSupport ::~ TDbPipeSupport ( void )
{
}
double TDbPipeSupport :: MakeSureMMUnit ( double & dDn )
{
return CoreTools :: MakeSureMMUnit ( dDn );
}
BOOL TDbPipeSupport :: XData2PipeParam ( WPipe :: PipeParam * pParamL , const AecDbObjXDataMap * pXDataMapSrc )
{
//D
double dVal = 100.0 ;
pXDataMapSrc -> GetAt ( PIPE_D , dVal );
pParamL -> m_dD = dVal ;
//eD
int nDir = 0 ;
pXDataMapSrc -> GetAt ( PIPE_DRAWDIR , nDir );
pParamL -> m_eD = ( WPipe :: EDia )( nDir );
//DN
dVal = 100.0 ;
pXDataMapSrc -> GetAt ( PIPE_DN , dVal );
pParamL -> m_dDN = dVal ;
//OD
dVal = 100.0 ;
pXDataMapSrc -> GetAt ( PIPE_OD , dVal );
pParamL -> m_dOD = dVal ;
//Thick
dVal = 100.0 ;
pXDataMapSrc -> GetAt ( PIPE_THICK , dVal );
pParamL -> m_dThick = dVal ;
2026-10-04 00:04:20 +08:00
//补充风管壁厚
2026-09-28 15:28:50 +08:00
dVal = 0.0 ;
if ( pXDataMapSrc -> GetAt ( DUCT_THICK , dVal ) )
pParamL -> m_dThick = dVal ;
//EL
//Ratio
dVal = 1.5 ;
pXDataMapSrc -> GetAt ( PIPE_RATIO , dVal );
pParamL -> m_dRRatio = dVal ;
pXDataMapSrc -> GetAt ( KEY_RadRatio , pParamL -> m_nRadioOn );
pXDataMapSrc -> GetAt ( PIPE_ODSN , pParamL -> szODSn );
if ( ! pXDataMapSrc -> GetAt ( PIPE_ODSN , pParamL -> szODSn ))
{
2026-10-04 00:04:20 +08:00
//兼容旧版本
2026-09-28 15:28:50 +08:00
pXDataMapSrc -> GetAt ( PIPE_OD_SN , pParamL -> szODSn );
pParamL -> szODSn [ 16 ] = _T ( '\0' );
}
pXDataMapSrc -> GetAt ( PIPE_SHTNO , pParamL -> szShtNo );
pXDataMapSrc -> GetAt ( PIPE_GASKET , pParamL -> m_szGastInf );
//dW
dVal = 0.0 ;
pXDataMapSrc -> GetAt ( DUCT_W , dVal );
pParamL -> m_dW = dVal ;
//dH
dVal = 0.0 ;
pXDataMapSrc -> GetAt ( DUCT_H , dVal );
pParamL -> m_dH = dVal ;
//app
nDir = 0 ;
pXDataMapSrc -> GetAt ( PIPE_EAPP , nDir );
pParamL -> m_app = ( WPipe :: EApp ) nDir ;
//nConnectType
nDir = 0 ;
pXDataMapSrc -> GetAt ( PIPE_CONNECT , nDir );
pParamL -> m_nConnectType = nDir ;
//dInterfaceL
dVal = 0.0 ;
pXDataMapSrc -> GetAt ( PIPE_INTERFACEL , dVal );
pParamL -> m_dInterfaceL = dVal ;
//dInterfaceD
dVal = 0.0 ;
pXDataMapSrc -> GetAt ( PIPE_INTERFACED , dVal );
pParamL -> m_dInterfaceD = dVal ;
//dInterfaceD2
dVal = 0.0 ;
pXDataMapSrc -> GetAt ( PIPE_INTERFACED2 , dVal );
pParamL -> m_dInterfaceD2 = dVal ;
//dInterfaceL2
dVal = 0.0 ;
pXDataMapSrc -> GetAt ( PIPE_INTERFACEL2 , dVal );
pParamL -> m_dInterfaceL2 = dVal ;
//dInsThk
dVal = 1.0 ;
pXDataMapSrc -> GetAt ( PIPE_INSTHICK , dVal );
pParamL -> m_dInsThk = dVal ;
//dInterfaceL3
dVal = 0.0 ;
pXDataMapSrc -> GetAt ( PIPE_INTERFACEL3 , dVal );
pParamL -> m_dInterfaceL3 = dVal ;
//m_eRed
//m_vtECCen
//m_vtDir
//m_eElBase
//szPipeno
CString sVal ;
pXDataMapSrc -> GetAt ( PIPE_NO , sVal );
_tcscpy ( pParamL -> szPipeno , sVal );
//szMertial
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( PIPE_MATERIAL , sVal );
_tcscpy ( pParamL -> szMertial , sVal );
//szMertialFit
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( PIPE_MATERIALFT , sVal );
_tcscpy ( pParamL -> szMertialFit , sVal );
//szZoneNo
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( PIPE_ZONE , sVal );
_tcscpy ( pParamL -> szZoneNo , sVal );
//szInsMtr
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( DOC_INSMATER , sVal );
_tcscpy ( pParamL -> szInsMtr , sVal );
//szDescr
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( PIPE_DESCR , sVal );
_tcscpy ( pParamL -> szDescr , sVal );
//szSys
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( PIPE_SYS , sVal );
_tcscpy ( pParamL -> szSys , sVal );
//m_nGroupID
//?
//LEVEL
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( PIPE_LEVEL , sVal );
_tcscpy ( pParamL -> szLevel , sVal );
dVal = 1.0 ;
pXDataMapSrc -> GetAt ( PID_PIPE_DPRESS , dVal );
pParamL -> m_dPress = dVal ;
//szZone
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( PIPE_ZONE , sVal );
_tcscpy ( pParamL -> szZone , sVal );
//szMedia
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( PIPE_MEDIA , sVal );
_tcscpy ( pParamL -> szMedia , sVal );
//szNo
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( PIPE_NO , sVal );
_tcscpy ( pParamL -> szNo , sVal );
//Spec
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( PIPE_SPEC , sVal );
_tcscpy ( pParamL -> szSpec , sVal );
//LineNo
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( PIPE_LINENO , sVal );
_tcscpy ( pParamL -> szLineNo , sVal );
//szInsTag
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( PIPE_INSTAG , sVal );
_tcscpy ( pParamL -> szInsTag , sVal );
//szInsDim
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( DOC_INSDIM , sVal );
_tcscpy ( pParamL -> szInsDim , sVal );
//szInsMateral
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( DOC_INSMATER , sVal );
_tcscpy ( pParamL -> szInsMateral , sVal );
//szInsSpec
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( DOC_INSSPEC , sVal );
_tcscpy ( pParamL -> szInsSpec , sVal );
//DOC_TRAMTOINF
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( DOC_TRAMTOINF , sVal );
_tcscpy ( pParamL -> szTraMtoInfo , sVal );
//szTraDescr
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( DOC_TRADESCR , sVal );
_tcscpy ( pParamL -> szTraDescr , sVal );
//szFitType
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( PIPE_FITTYPE , sVal );
_tcscpy ( pParamL -> szFitType , sVal );
//szMtoInfo
sVal = _T ( "" );
pXDataMapSrc -> GetAt ( PIPE_MTOALL , sVal );
_tcscpy ( pParamL -> szMtoInfo , sVal );
2026-10-04 00:04:20 +08:00
//以下是全局设置信息,Param中没有对应
2026-09-28 15:28:50 +08:00
nDir = 0 ;
pXDataMapSrc -> GetAt ( KEY_2DSTYLE , nDir );
//??
nDir = 0 ;
pXDataMapSrc -> GetAt ( PIPE_COLOR , nDir );
pParamL -> m_nPipeColor = nDir ;
nDir = 0 ;
pXDataMapSrc -> GetAt ( KEY_SINGLE , nDir );
//??
dVal = 100 ;
pXDataMapSrc -> GetAt ( PIPE_TDN , dVal );
//??
dVal = 100.0 ;
pXDataMapSrc -> GetAt ( PIPE_TOD , dVal );
//??
nDir = 0 ;
pXDataMapSrc -> GetAt ( PIPE_ELBOWFLG , nDir );
//??
nDir = 0 ;
pXDataMapSrc -> GetAt ( PIPE_BWELDDOT , nDir );
//??
dVal = 1.0 ;
pXDataMapSrc -> GetAt ( DOC_PLOTWIDTH , dVal );
//??
dVal = 1.0 ;
pXDataMapSrc -> GetAt ( DOC_DPLOTWIDTH , dVal );
//??
dVal = 1.0 ;
pXDataMapSrc -> GetAt ( DOC_WELDDIA , dVal );
//??
dVal = 1.0 ;
pXDataMapSrc -> GetAt ( PIPE_PIDD , dVal );
//??
return TRUE ;
}
BOOL TDbPipeSupport :: QueryFitSpecInf ( CUIISQLiteServer * pDb , double dDn , WPipe :: FITSPEC & fitSpec , WPipe :: Trade & eTrade , LPCTSTR pszFitName , LPCTSTR pszProName , LPCTSTR pszPreSpecName )
{
2026-10-04 00:04:20 +08:00
if ( eTrade == WPipe :: eCivial ) //市政 不考虑等级 Z系列 暂 A
2026-09-28 15:28:50 +08:00
return FALSE ;
/*
2026-10-04 00:04:20 +08:00
TCHAR szODSN[7]; //外径系列
TCHAR szShtNo[33]; //表号
TCHAR szStdNo[33]; //标准号
TCHAR szMat[33]; //材质
TCHAR szDesc[128]; //描述
2026-09-28 15:28:50 +08:00
*/
memset ( & fitSpec , 0 , sizeof ( WPipe :: FITSPEC ));
CString sSQL , sTip ;
BOOL bFind = FALSE ;
if ( pszProName != NULL && pszPreSpecName != NULL )
{
CStringArray arVals ;
2026-10-04 00:04:20 +08:00
if ( _tcscmp ( pszFitName , _T ( "法兰" )) == 0 )
2026-09-28 15:28:50 +08:00
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select distinct [制造类型],[标准号],[材质],[描述] from AecSpecFlange where [项目名称]='%s' and [类别]='%s' and [等级名称]='%s' and [公称直径]=%d" ), pszProName , pszFitName , pszPreSpecName , ( int )( dDn + 0.5 ));
2026-09-28 15:28:50 +08:00
if ( pDb -> GetSelData ( sSQL , arVals ))
{
if ( arVals . GetSize () >= 4 )
{
_tcscpy ( fitSpec . szODSN , _T ( "A" ));
_tcscpy ( fitSpec . szShtNo , arVals . GetAt ( 0 ));
_tcscpy ( fitSpec . szStdNo , arVals . GetAt ( 1 ));
_tcscpy ( fitSpec . szMat , arVals . GetAt ( 2 ));
_tcscpy ( fitSpec . szDesc , arVals . GetAt ( 3 ));
bFind = TRUE ;
}
}
}
else
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select distinct [外径系列],[表号],[标准号],[材质],[描述] from AecSpecFit where [项目名称]='%s' and [类型]='%s' and [等级名称]='%s' and [公称直径]=%d" ), pszProName , pszFitName , pszPreSpecName , ( int )( dDn + 0.5 ));
2026-09-28 15:28:50 +08:00
if ( pDb -> GetSelData ( sSQL , arVals ))
{
if ( arVals . GetSize () >= 5 )
{
_tcscpy ( fitSpec . szODSN , arVals . GetAt ( 0 ));
_tcscpy ( fitSpec . szShtNo , arVals . GetAt ( 1 ));
_tcscpy ( fitSpec . szStdNo , arVals . GetAt ( 2 ));
_tcscpy ( fitSpec . szMat , arVals . GetAt ( 3 ));
_tcscpy ( fitSpec . szDesc , arVals . GetAt ( 4 ));
bFind = TRUE ;
}
}
}
if ( ! bFind )
{
2026-10-04 00:04:20 +08:00
sTip . Format ( _T ( "缺少项目名称=%s 等级名称=%s DN=%d 等级数据! \n 请设置该项目和等级需要的%s等级数据! \n 参见 KTSpeEdit \\ 等级生成器 \\ 管件 设置" ), pszProName , pszPreSpecName ,( int )( dDn + 0.5 ), pszFitName );
2026-09-28 15:28:50 +08:00
AfxMessageBox ( sTip );
return FALSE ;
}
}
else
{
2026-10-04 00:04:20 +08:00
//没有项目 等级 设置,默认取A系列
2026-09-28 15:28:50 +08:00
//CString sSNo = _T("A");
}
return bFind ;
}
BOOL TDbPipeSupport :: QueryPipeSpecInf ( CUIISQLiteServer * pDb , double dDn , WPipe :: PIPESPEC & pipeSpec , WPipe :: Trade & eTrade , LPCTSTR pszProName , LPCTSTR pszPreSpecName )
{
2026-10-04 00:04:20 +08:00
if ( eTrade == WPipe :: eCivial ) //市政 不考虑等级 Z系列 暂 A
2026-09-28 15:28:50 +08:00
return FALSE ;
/*
2026-10-04 00:04:20 +08:00
* TCHAR szODSN[7]; //外径系列
TCHAR szShtNo[33]; //表号
TCHAR szStdNo[33]; //标准号
TCHAR szMat[33]; //材质
TCHAR szDesc[128]; //描述
2026-09-28 15:28:50 +08:00
*/
memset ( & pipeSpec , 0 , sizeof ( WPipe :: FITSPEC ));
CString sSQL , sTip ;
BOOL bFind = FALSE ;
if ( pszProName != NULL && pszPreSpecName != NULL )
{
CStringArray arVals ;
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select distinct [外径系列],[表号],[标准号],[材质],[描述] from AecSpecPipe where [项目名称]='%s' and [类别]='管道' and [等级名称]='%s' and [公称直径]=%d" ), pszProName , pszPreSpecName , ( int )( dDn + 0.5 ));
2026-09-28 15:28:50 +08:00
if ( pDb -> GetSelData ( sSQL , arVals ))
{
if ( arVals . GetSize () >= 5 )
{
_tcscpy ( pipeSpec . szODSN , arVals . GetAt ( 0 ));
_tcscpy ( pipeSpec . szShtNo , arVals . GetAt ( 1 ));
_tcscpy ( pipeSpec . szStdNo , arVals . GetAt ( 2 ));
_tcscpy ( pipeSpec . szMat , arVals . GetAt ( 3 ));
_tcscpy ( pipeSpec . szDesc , arVals . GetAt ( 4 ));
bFind = TRUE ;
}
}
if ( ! bFind )
{
2026-10-04 00:04:20 +08:00
sTip . Format ( _T ( "缺少项目名称=%s 等级名称=%s DN=%d 等级数据! \n 请设置该项目和等级需要的%s等级数据! \n 参见 KTSpeEdit \\ 等级生成器 \\ 管道 设置" ), pszProName , pszPreSpecName , ( int )( dDn + 0.5 ));
2026-09-28 15:28:50 +08:00
AfxMessageBox ( sTip );
return FALSE ;
}
}
else
{
2026-10-04 00:04:20 +08:00
//没有项目 等级 设置,默认取A系列
2026-09-28 15:28:50 +08:00
//CString sSNo = _T("A");
}
return bFind ;
}
BOOL TDbPipeSupport :: QueryFitSpecsNo ( CUIISQLiteServer * pDb , double dDn , CString & sSNo , WPipe :: Trade & eTrade , LPCTSTR pszFitName , LPCTSTR pszProName , LPCTSTR pszPreSpecName )
{
CString sSQL , sTip ;
2026-10-04 00:04:20 +08:00
//行业 全局
2026-09-28 15:28:50 +08:00
AecDbObjXDataMap xInitMap ;
KTModelLayoutXData :: ReadModelXData ( KT_PIPEINIT , xInitMap );
int nTrade = 4 ;
2026-10-04 00:04:20 +08:00
xInitMap . GetAt ( DOC_PIDTRADE , nTrade ); //应用行业,石油
2026-09-28 15:28:50 +08:00
sSNo = _T ( "A" );
eTrade = ( WPipe :: Trade ) nTrade ;
2026-10-04 00:04:20 +08:00
if ( eTrade == WPipe :: eCivial ) //市政 不考虑等级 Z系列 暂 A
2026-09-28 15:28:50 +08:00
{
sSNo = _T ( "A" );
}
else
{
bool bFind = false ;
if ( pszProName != NULL && pszPreSpecName != NULL )
{
CString sSNo1 = _T ( "" ), sSQL1 ;
2026-10-04 00:04:20 +08:00
sSQL1 . Format ( _T ( "select distinct [外径系列] from AecSpecFit where [项目名称]='%s' and [类型]='%s' and [等级名称]='%s' and [公称直径]=%d" ), pszProName , pszFitName , pszPreSpecName , ( int )( dDn + 0.5 ));
2026-09-28 15:28:50 +08:00
if ( pDb -> GetSelData ( sSQL1 , sSNo1 ) )
{
sSNo = sSQL1 ;
bFind = true ;
}
if ( ! bFind )
{
2026-10-04 00:04:20 +08:00
//后续补强或焊接处理
//sTip.Format(_T("缺少项目名称=%s 等级名称=%s 的%s外径系列 DN%d 选型数据!\n请设置该项目和等级需要的%s选型数据!\n参见 KTSpeEdit\\等级生成器\\管件 设置"), pszProName, pszPreSpecName, pszFitName, (int)(dDn + 0.5), pszFitName);
2026-09-28 15:28:50 +08:00
//AfxMessageBox(sTip);
return FALSE ;
}
return TRUE ;
}
else
{
2026-10-04 00:04:20 +08:00
//没有项目 等级 设置,默认取A系列
2026-09-28 15:28:50 +08:00
//CString sSNo = _T("A");
}
}
return TRUE ;
}
BOOL TDbPipeSupport :: QueryFitSpecsNo ( CUIISQLiteServer * pDb , double dDn1 , double dDn2 , CString & sSNo , WPipe :: Trade & eTrade , LPCTSTR pszFitName , LPCTSTR pszProName , LPCTSTR pszPreSpecName )
{
CString sSQL , sTip ;
2026-10-04 00:04:20 +08:00
//行业 全局
2026-09-28 15:28:50 +08:00
AecDbObjXDataMap xInitMap ;
KTModelLayoutXData :: ReadModelXData ( KT_PIPEINIT , xInitMap );
int nTrade = 4 ;
2026-10-04 00:04:20 +08:00
xInitMap . GetAt ( DOC_PIDTRADE , nTrade ); //应用行业,石油
2026-09-28 15:28:50 +08:00
sSNo = _T ( "A" );
eTrade = ( WPipe :: Trade ) nTrade ;
2026-10-04 00:04:20 +08:00
if ( eTrade == WPipe :: eCivial ) //市政 不考虑等级 Z系列 暂 A
2026-09-28 15:28:50 +08:00
{
sSNo = _T ( "A" );
}
else
{
bool bFind = false ;
if ( pszProName != NULL && pszPreSpecName != NULL )
{
CString sSNo1 = _T ( "" ), sSNo2 = _T ( "" ), sSQL1 , sSQL2 ;
2026-10-04 00:04:20 +08:00
sSQL1 . Format ( _T ( "select distinct [外径系列] from AecSpecFit where [项目名称]='%s' and [类型]='%s' and [等级名称]='%s' and [公称直径]=%d" ), pszProName , pszFitName , pszPreSpecName , ( int )( dDn1 + 0.5 ));
sSQL2 . Format ( _T ( "select distinct [外径系列] from AecSpecFit where [项目名称]='%s' and [类型]='%s' and [等级名称]='%s' and [公称直径]=%d" ), pszProName , pszFitName , pszPreSpecName , ( int )( dDn2 + 0.5 ));
2026-09-28 15:28:50 +08:00
if ( pDb -> GetSelData ( sSQL1 , sSNo1 ) && pDb -> GetSelData ( sSQL2 , sSNo2 ))
{
if ( sSNo1 . CompareNoCase ( sSNo2 ) == 0 )
{
sSNo = sSNo1 ;
bFind = true ;
}
else
{
sSNo = sSNo1 ;
bFind = true ;
//...
}
}
if ( ! bFind )
{
2026-10-04 00:04:20 +08:00
//后续补强或焊接处理
//sTip.Format(_T("缺少项目名称=%s 等级名称=%s 的%s外径系列 DN%d : DN%d 选型数据!\n请设置该项目和等级需要的%s选型数据!\n参见 KTSpeEdit\\等级生成器\\管件 设置"), pszProName, pszPreSpecName, pszFitName,(int)(dDn1 + 0.5), (int)(dDn2 + 0.5), pszFitName);
2026-09-28 15:28:50 +08:00
//AfxMessageBox(sTip);
return FALSE ;
}
return TRUE ;
}
else
{
2026-10-04 00:04:20 +08:00
//没有项目 等级 设置,默认取A系列
2026-09-28 15:28:50 +08:00
//CString sSNo = _T("A");
}
}
return TRUE ;
}
BOOL TDbPipeSupport :: QueryElbowL ( CUIISQLiteServer * pDb , double dDN , double & dL , double dRadio , int nCn , LPCTSTR pszLevel , AecDbObjXDataMap * pXData )
{
BOOL bOk = FALSE ;
2026-10-04 00:04:20 +08:00
//附加替换的数据
2026-09-28 15:28:50 +08:00
double dAng = 0.0 ;
2026-10-04 00:04:20 +08:00
pXData -> GetAt ( PIPE_ELBOWANG , dAng ); //角度-弧度
2026-09-28 15:28:50 +08:00
BOOL bRdioOn = FALSE ;
pXData -> GetAt ( KEY_RadRatio , bRdioOn );
if ( bRdioOn )
{
2026-10-04 00:04:20 +08:00
dRadio = 1.0 ; //最小
2026-09-28 15:28:50 +08:00
}
CString sSQL , sODNo = _T ( "B" );
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select distinct [外径系列] from AecSpecFit where [类型]='弯头' and [等级名称]='%s'" ), pszLevel );
2026-09-28 15:28:50 +08:00
pDb -> GetSelData ( sSQL , sODNo );
static CStringList lstField ;
if ( lstField . IsEmpty ())
{
pDb -> GetTableStru ( _T ( "AecElbowData" ), lstField );
}
if ( lstField . Find ( _T ( "r" )) != NULL ||
2026-10-04 00:04:20 +08:00
lstField . Find ( _T ( "R" )) != NULL ) //兼容旧版
2026-09-28 15:28:50 +08:00
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度],R,F,H from [AecElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='%s' order by [弯头曲率]" ),
2026-09-28 15:28:50 +08:00
( int )( dDN + 0.5 ), dRadio - 0.01 , sODNo );
}
else
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度] from [AecElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='%s' order by [弯头曲率]" ),
2026-09-28 15:28:50 +08:00
( int )( dDN + 0.5 ), dRadio - 0.01 , sODNo );
}
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () >= 3 )
{
dL = _ttof ( arVals . GetAt ( 0 ));
if ( arVals . GetSize () >= 4 )
{
if ( _ttof ( arVals . GetAt ( 1 )) > 1.e-6 )
{
pXData -> SetAt ( _T ( "R" ), _ttof ( arVals . GetAt ( 1 )));
pXData -> SetAt ( _T ( "F" ), _ttof ( arVals . GetAt ( 2 )));
pXData -> SetAt ( _T ( "H" ), _ttof ( arVals . GetAt ( 3 )));
}
}
bOk = TRUE ;
}
2026-10-04 00:04:20 +08:00
else //没有一律计算
2026-09-28 15:28:50 +08:00
{
if ( lstField . Find ( _T ( "r" )) != NULL ||
2026-10-04 00:04:20 +08:00
lstField . Find ( _T ( "R" )) != NULL ) //兼容旧版
2026-09-28 15:28:50 +08:00
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度],R,F,H from [AecElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='%s' order by [弯头曲率]" ),
2026-09-28 15:28:50 +08:00
( int )( dDN + 0.5 ), dRadio , sODNo );
}
else
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度] from [AecElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='%s' order by [弯头曲率]" ),
2026-09-28 15:28:50 +08:00
( int )( dDN + 0.5 ), dRadio , sODNo );
}
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () > 0 )
{
dL = _ttof ( arVals . GetAt ( 0 ));
if ( arVals . GetSize () >= 4 )
{
if ( _ttof ( arVals . GetAt ( 1 )) > 1.e-6 )
{
pXData -> SetAt ( _T ( "R" ), _ttof ( arVals . GetAt ( 1 )));
pXData -> SetAt ( _T ( "F" ), _ttof ( arVals . GetAt ( 2 )));
pXData -> SetAt ( _T ( "H" ), _ttof ( arVals . GetAt ( 3 )));
}
}
bOk = TRUE ;
}
else
{
dL = dDN * dRadio ;
}
}
if ( fabs ( dAng - PI / 8.0 ) < 1.e-3 ) //22.5
{
if ( TDbPipeSupport :: Query225ElbowL ( pDb , dDN , dL , dRadio , nCn , pszLevel , sODNo , pXData ))
return TRUE ;
}
else if ( fabs ( dAng - PI / 6.0 ) < 1.e-3 ) //30
{
if ( TDbPipeSupport :: Query30ElbowL ( pDb , dDN , dL , dRadio , nCn , pszLevel , sODNo , pXData ))
return TRUE ;
}
else if ( fabs ( dAng - PI / 4.0 ) < 1.e-3 ) //45
{
if ( TDbPipeSupport :: Query45ElbowL ( pDb , dDN , dL , dRadio , nCn , pszLevel , sODNo , pXData ))
return TRUE ;
}
else if ( fabs ( dAng - PI / 3.0 ) < 1.e-3 ) //60
{
if ( TDbPipeSupport :: Query60ElbowL ( pDb , dDN , dL , dRadio , nCn , pszLevel , sODNo , pXData ))
return TRUE ;
}
return bOk ;
}
BOOL TDbPipeSupport :: Query45ElbowL ( CUIISQLiteServer * pDb , double dDN , double & dL , double dRadio , int nCn , LPCTSTR pszLevel , LPCTSTR pszDNo , AecDbObjXDataMap * pXData )
{
static CStringList lstField ;
if ( lstField . IsEmpty ())
{
pDb -> GetTableStru ( _T ( "Aec45ElbowData" ), lstField );
}
CString sSQL ;
if ( lstField . Find ( _T ( "r" )) != NULL ||
2026-10-04 00:04:20 +08:00
lstField . Find ( _T ( "R" )) != NULL ) //兼容旧版
2026-09-28 15:28:50 +08:00
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度],R,F,H from [Aec45ElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='%s' order by [弯头曲率]" ),
2026-09-28 15:28:50 +08:00
( int )( dDN + 0.5 ), dRadio - 0.01 , pszDNo );
}
else
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度] from [Aec45ElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='%s' order by [弯头曲率]" ),
2026-09-28 15:28:50 +08:00
( int )( dDN + 0.5 ), dRadio - 0.01 , pszDNo );
}
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () > 0 )
{
dL = _ttof ( arVals . GetAt ( 0 ));
if ( arVals . GetSize () >= 4 )
{
if ( _ttof ( arVals . GetAt ( 1 )) > 1.e-6 )
{
pXData -> SetAt ( _T ( "R" ), _ttof ( arVals . GetAt ( 1 )));
pXData -> SetAt ( _T ( "F" ), _ttof ( arVals . GetAt ( 2 )));
pXData -> SetAt ( _T ( "H" ), _ttof ( arVals . GetAt ( 3 )));
}
}
return TRUE ;
}
return FALSE ;
}
BOOL TDbPipeSupport :: Query225ElbowL ( CUIISQLiteServer * pDb , double dDN , double & dL , double dRadio , int nCn , LPCTSTR pszLevel , LPCTSTR pszDNo , AecDbObjXDataMap * pXData )
{
CString sSQL ;
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度],R,F,H from [Aec22_5ElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='%s' order by [弯头曲率]" ),
2026-09-28 15:28:50 +08:00
( int )( dDN + 0.5 ), dRadio - 0.01 , pszDNo );
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () >= 4 )
{
dL = _ttof ( arVals . GetAt ( 0 ));
if ( _ttof ( arVals . GetAt ( 1 )) > 1.e-6 )
{
pXData -> SetAt ( _T ( "R" ), _ttof ( arVals . GetAt ( 1 )));
pXData -> SetAt ( _T ( "F" ), _ttof ( arVals . GetAt ( 2 )));
pXData -> SetAt ( _T ( "H" ), _ttof ( arVals . GetAt ( 3 )));
}
return TRUE ;
}
return FALSE ;
}
BOOL TDbPipeSupport :: Query30ElbowL ( CUIISQLiteServer * pDb , double dDN , double & dL , double dRadio , int nCn , LPCTSTR pszLevel , LPCTSTR pszDNo , AecDbObjXDataMap * pXData )
{
CString sSQL ;
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度],R,F,H from [Aec30ElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='%s' order by [弯头曲率]" ),
2026-09-28 15:28:50 +08:00
( int )( dDN + 0.5 ), dRadio - 0.01 , pszDNo );
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () >= 4 )
{
dL = _ttof ( arVals . GetAt ( 0 ));
if ( _ttof ( arVals . GetAt ( 1 )) > 1.e-6 )
{
pXData -> SetAt ( _T ( "R" ), _ttof ( arVals . GetAt ( 1 )));
pXData -> SetAt ( _T ( "F" ), _ttof ( arVals . GetAt ( 2 )));
pXData -> SetAt ( _T ( "H" ), _ttof ( arVals . GetAt ( 3 )));
}
return TRUE ;
}
return FALSE ;
}
BOOL TDbPipeSupport :: Query60ElbowL ( CUIISQLiteServer * pDb , double dDN , double & dL , double dRadio , int nCn , LPCTSTR pszLevel , LPCTSTR pszDNo , AecDbObjXDataMap * pXData )
{
CString sSQL ;
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度],R,F,H from [Aec60ElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='%s' order by [弯头曲率]" ),
2026-09-28 15:28:50 +08:00
( int )( dDN + 0.5 ), dRadio - 0.01 , pszDNo );
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () >= 4 )
{
dL = _ttof ( arVals . GetAt ( 0 ));
if ( _ttof ( arVals . GetAt ( 1 )) > 1.e-6 )
{
pXData -> SetAt ( _T ( "R" ), _ttof ( arVals . GetAt ( 1 )));
pXData -> SetAt ( _T ( "F" ), _ttof ( arVals . GetAt ( 2 )));
pXData -> SetAt ( _T ( "H" ), _ttof ( arVals . GetAt ( 3 )));
}
return TRUE ;
}
return FALSE ;
}
BOOL TDbPipeSupport :: QueryRElbowL ( CUIISQLiteServer * pDb , double dDNL , double dDNs , double & dL , double dRadio , int nCn , LPCTSTR pszLevel , AecDbObjXDataMap * pXData )
{
2026-10-04 00:04:20 +08:00
//附加替换的数据
2026-09-28 15:28:50 +08:00
double dAng = 0.0 ;
2026-10-04 00:04:20 +08:00
pXData -> GetAt ( PIPE_ELBOWANG , dAng ); //角度-弧度
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
//继续按默认90度设置
2026-09-28 15:28:50 +08:00
BOOL bOk = FALSE ;
CString sSQL , sODNo ;
pXData -> GetAt ( PIPE_ODSN , sODNo );
if ( pszLevel != NULL && _tcslen ( pszLevel ) > 0 ) //
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select distinct [外径系列] from AecSpecFit where [类型]='弯头' and [等级名称]='%s'" ), pszLevel );
2026-09-28 15:28:50 +08:00
pDb -> GetSelData ( sSQL , sODNo );
}
static CStringList lstField ;
if ( lstField . IsEmpty ())
{
pDb -> GetTableStru ( _T ( "AecRElbowData" ), lstField );
}
if ( lstField . Find ( _T ( "r" )) != NULL ||
2026-10-04 00:04:20 +08:00
lstField . Find ( _T ( "R" )) != NULL ) //兼容旧版
2026-09-28 15:28:50 +08:00
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [长度],R,F,H from [AecRElbowData] where [公称直径L]=%d and [公称直径S]=%d and [外径系列]='%s'" ),
2026-09-28 15:28:50 +08:00
( int )( dDNL + 0.5 ), ( int )( dDNs + 0.5 ), sODNo );
}
else
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [长度] from [AecRElbowData] where [公称直径L]=%d and [公称直径S]=%d and [外径系列]='%s'" ),
2026-09-28 15:28:50 +08:00
( int )( dDNL + 0.5 ), ( int )( dDNs + 0.5 ), sODNo );
}
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () >= 3 )
{
dL = _ttof ( arVals . GetAt ( 0 ));
if ( arVals . GetSize () >= 4 )
{
if ( _ttof ( arVals . GetAt ( 1 )) > 1.e-6 )
{
pXData -> SetAt ( _T ( "R" ), _ttof ( arVals . GetAt ( 1 )));
pXData -> SetAt ( _T ( "F" ), _ttof ( arVals . GetAt ( 2 )));
pXData -> SetAt ( _T ( "H" ), _ttof ( arVals . GetAt ( 3 )));
if ( sODNo . CompareNoCase ( _T ( "S" )) == 0 && nCn < 3 || nCn == 4 )
{
2026-10-04 00:04:20 +08:00
//02s403焊接弯头结构长度为R0
2026-09-28 15:28:50 +08:00
dL = _ttof ( arVals . GetAt ( 1 ));
}
}
}
bOk = TRUE ;
}
return bOk ;
}
BOOL TDbPipeSupport :: QueryTeeData ( CUIISQLiteServer * pDb , double dDn1 , double dDn2 , double & dL , double & dS , LPCTSTR pszProName , LPCTSTR pszPreSpecName )
{
double dUnit = MakeSureMMUnit ( dDn1 );
MakeSureMMUnit ( dDn2 );
CString sSQL , sSNo , sTip ;
CStringArray arValues ;
WPipe :: Trade eTrade = WPipe :: eCivial ;
2026-10-04 00:04:20 +08:00
if ( ! QueryFitSpecsNo ( pDb , dDn1 , dDn2 , sSNo , eTrade , _T ( "三通" ), pszProName , pszPreSpecName ))
2026-09-28 15:28:50 +08:00
{
return FALSE ;
}
2026-10-04 00:04:20 +08:00
//A B 系列 Z系列位市政,无等级
//查询三通尺寸
sSQL . Format ( _T ( "select [长度L],[长度S] from AecTeeData where [公称直径L] = %d and" )
_T ( " [公称直径S] = %d and [外径系列] = '%s'" ),( int )( dDn1 + 0.5 ),( int )( dDn2 + 0.5 ), sSNo );
2026-09-28 15:28:50 +08:00
pDb -> GetSelData ( sSQL , arValues );
2026-10-04 00:04:20 +08:00
if ( arValues . GetSize () < 2 && eTrade == WPipe :: eCivial ) //再反查B
2026-09-28 15:28:50 +08:00
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [长度L],[长度S] from AecTeeData where [公称直径L] = %d and" )
_T ( " [公称直径S] = %d and [外径系列] = 'B'" ),( int )( dDn1 + 0.5 ),( int )( dDn2 + 0.5 ));
2026-09-28 15:28:50 +08:00
pDb -> GetSelData ( sSQL , arValues );
}
if ( arValues . GetSize () < 2 )
{
2026-10-04 00:04:20 +08:00
//不用提示,后续焊接或补强或半管处理
//sTip.Format(_T("缺少公称直径L=%d 公称直径S=%d 外径系列='%s' 的三通选型数据!\
//\n请完善三通的安装数据!\n参见KTSpeEdit\\安装数据\\三通数据!"),(int)(dDn1 + 0.5), (int)(dDn2 + 0.5), sSNo);
2026-09-28 15:28:50 +08:00
//AfxMessageBox(sTip);
return FALSE ;
}
2026-10-04 00:04:20 +08:00
//对方是主尺寸,自己是支尺寸
if ( arValues . GetSize () >= 2 ) //有
2026-09-28 15:28:50 +08:00
{
2026-10-04 00:04:20 +08:00
dL = _ttof ( arValues . GetAt ( 0 )); //M 尺寸
dS = _ttof ( arValues . GetAt ( 1 )); //B 尺寸
2026-09-28 15:28:50 +08:00
dL /= dUnit ;
dS /= dUnit ;
return TRUE ;
}
else
{
2026-10-04 00:04:20 +08:00
//不用提示,后续焊接或补强或半管处理
//sTip.Format(_T("缺少公称直径L=%d 公称直径S=%d 外径系列='%s' 的三通选型数据!\
//\n请完善三通的安装数据!\n参见KTSpeEdit\\安装数据\\三通数据!"),(int)(dDn1 + 0.5), (int)(dDn2 + 0.5), sSNo);
2026-09-28 15:28:50 +08:00
//AfxMessageBox(sTip);
return FALSE ;
}
return FALSE ;
}
BOOL TDbPipeSupport :: QueryCrossData ( CUIISQLiteServer * pDb , double dDN1 , double dDN2 , double & dL , double & dB , LPCTSTR pszProName , LPCTSTR pszPreSpecName )
{
double dUnit = MakeSureMMUnit ( dDN1 );
MakeSureMMUnit ( dDN2 );
CString sSQL , sSNo , sTip ;
CStringArray arValues ;
WPipe :: Trade eTrade = WPipe :: eCivial ;
2026-10-04 00:04:20 +08:00
if ( ! QueryFitSpecsNo ( pDb , dDN1 , dDN2 , sSNo , eTrade , _T ( "四通" ), pszProName , pszPreSpecName ))
2026-09-28 15:28:50 +08:00
{
return FALSE ;
}
//param1.
if ( (( int )( dDN1 + 0.5 )) == (( int )( dDN2 + 0.5 )) )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度L],[结构长度S],f1,f2 from AecCross where [公称直径] = %d and [外径系列] = '%s'" ),( int )( dDN1 + 0.5 ), sSNo );
2026-09-28 15:28:50 +08:00
pDb -> GetSelData ( sSQL , arValues );
if ( arValues . GetSize () < 4 )
{
2026-10-04 00:04:20 +08:00
//从三通中取
2026-09-28 15:28:50 +08:00
if ( QueryTeeData ( pDb , dDN1 , dDN2 , dL , dB , pszProName , pszPreSpecName ))
{
return TRUE ;
}
2026-10-04 00:04:20 +08:00
sTip . Format ( _T ( " \n 数据库中缺少系列=%s公称直径=%dx%d类型的四通!" ), sSNo , ( int )( dDN1 + 0.5 ), ( int )( dDN2 + 0.5 ));
2026-09-28 15:28:50 +08:00
AfxMessageBox ( sTip );
return FALSE ;
}
else
{
dL = _ttof ( arValues . GetAt ( 0 ));
dB = _ttof ( arValues . GetAt ( 1 ));
dL += _ttof ( arValues . GetAt ( 2 ));
dB += _ttof ( arValues . GetAt ( 3 ));
dL /= dUnit ;
dB /= dUnit ;
return TRUE ;
}
}
else
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度L],[结构长度S] from AecCrossR \
where [公称直径L] = %d and [公称直径S] = %d and [外径系列] = '%s'" ),( int )( dDN1 + 0.5 ),( int )( dDN2 + 0.5 ), sSNo );
2026-09-28 15:28:50 +08:00
pDb -> GetSelData ( sSQL , arValues );
if ( arValues . GetSize () < 2 )
{
arValues . RemoveAll ();
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度L],[结构长度S] from AecCrossR \
where [公称直径L] = %d and [公称直径S] = %d and [外径系列] = '%s'" ),( int )( dDN2 + 0.5 ),( int )( dDN1 + 0.5 ), sSNo );
2026-09-28 15:28:50 +08:00
pDb -> GetSelData ( sSQL , arValues );
if ( arValues . GetSize () < 2 )
{
2026-10-04 00:04:20 +08:00
//从三通中取
2026-09-28 15:28:50 +08:00
if ( QueryTeeData ( pDb , dDN1 , dDN2 , dL , dB , pszProName , pszPreSpecName ))
{
return TRUE ;
}
2026-10-04 00:04:20 +08:00
sTip . Format ( _T ( " \n 数据库中缺少系列=%s公称直径=%dx%d类型的四通!" ), sSNo , ( int )( dDN1 + 0.5 ), ( int )( dDN2 + 0.5 ));
2026-09-28 15:28:50 +08:00
AfxMessageBox ( sTip );
return FALSE ;
}
else
{
dB = _ttof ( arValues . GetAt ( 0 ));
dL = _ttof ( arValues . GetAt ( 1 ));
dL /= dUnit ;
dB /= dUnit ;
return TRUE ;
}
}
else
{
dL = _ttof ( arValues . GetAt ( 0 ));
dB = _ttof ( arValues . GetAt ( 1 ));
dL /= dUnit ;
dB /= dUnit ;
return TRUE ;
}
}
return FALSE ;
}
BOOL TDbPipeSupport :: QueryFlangSpecs ( CUIISQLiteServer * pDb
, double dDN
, WPipe :: Trade & eTrade
, CString & sStd
, CString & sTyp
, LPCTSTR pszProName
, LPCTSTR pszPreSpecName )
{
return CoreTools :: QueryFlangSpecs ( pDb
, dDN
, eTrade
, sStd
, sTyp
, pszPreSpecName
, pszPreSpecName );
}
BOOL TDbPipeSupport :: QueryFlangData ( CUIISQLiteServer * pDb
, double dDN
, double dPre
, double & dWD
, double & dWh
, double & dThk
, double & dN
, LPCTSTR pszProName
, LPCTSTR pszPreSpecName )
{
return CoreTools :: QueryFlangData ( pDb
, dDN
, dPre
, dWD
, dWh
, dThk
, dN
, pszProName
, pszPreSpecName );
}
BOOL TDbPipeSupport :: QueryFlangData ( CUIISQLiteServer * pDb , double dDn , double dPress , AecDbObjXDataMap * pXDataMap )
{
CString sSQL , sStd , sTyp ;
sStd = _T ( "HG/T 20592-2009" );
sTyp = _T ( "PL" );
pXDataMap -> GetAt ( PIPE_FLANGP , sTyp );
pXDataMap -> GetAt ( PIPE_STDNO , sStd );
sSQL . Format ( _T ( "select * from aecflangedata where \
2026-10-04 00:04:20 +08:00
[公称直径]=%d and [压力]>%.2f and [压力]<%.2f and [法兰类型]='%s' and [标准号]='%s' order by [法兰厚度]" ),
2026-09-28 15:28:50 +08:00
( int )( dDn + 0.5 ), dPress - 0.01 , dPress + 0.01 , sTyp , sStd );
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
double dUnit = MakeSureMMUnit ( dDn );
if ( arVals . GetSize () < 8 ) return FALSE ;
2026-10-04 00:04:20 +08:00
double dWD = _ttof ( arVals [ 5 ]); // 法兰外经
double dWh = _ttof ( arVals [ 7 ]); // 法兰厚度
double dThk = _ttof ( arVals [ 6 ]); // 法兰高度
double dN = _ttof ( arVals [ 8 ]); // 法兰颈
2026-09-28 15:28:50 +08:00
dWD /= dUnit ;
dWh /= dUnit ;
dThk /= dUnit ;
dN /= dUnit ;
pXDataMap -> SetAt ( PIPE_N , dN );
2026-10-04 00:04:20 +08:00
pXDataMap -> SetAt ( PIPE_WD , dWD ); //发兰盘外径
pXDataMap -> SetAt ( PIPE_WTHICK , dWh ); //大盘面厚度
pXDataMap -> SetAt ( PIPE_THICK , dWh ); //总厚
2026-09-28 15:28:50 +08:00
return TRUE ;
}
BOOL TDbPipeSupport :: QueryFlangSpec ( CUIISQLiteServer * pDb , double dDn , double dPress , LPCTSTR pszLevel , AecDbObjXDataMap * pXDataMap )
{
CString sSQL ;
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [标准号],[材质],[类型],[端面],[描述],[制造类型],[元件代码] from [AecSpecFlange] where [公称直径]=%d and [等级名称]='%s' and [压力]>=%.1f and [压力]<=%.1f" ),
2026-09-28 15:28:50 +08:00
( int )( dDn + 0.5 ), pszLevel , dPress - 0.01 , dPress + 0.01 );
CUIIValueTable table ;
pDb -> GetSelData ( sSQL , table );
if ( table . GetTableLogicSize () > 0 )
{
CStringArray arVals ;
table . GetValueRecord ( 0 , arVals );
pXDataMap -> SetAt ( PIPE_STDNO , arVals . GetAt ( 0 ));
pXDataMap -> SetAt ( PIPE_MATERIALFT , arVals . GetAt ( 1 ));
pXDataMap -> SetAt ( PIPE_FITTYPE , arVals . GetAt ( 2 ));
pXDataMap -> SetAt ( PIPE_FLANGF , arVals . GetAt ( 3 ));
pXDataMap -> SetAt ( PIPE_DESCR , arVals . GetAt ( 4 ));
pXDataMap -> SetAt ( KEY_PRODTP , arVals . GetAt ( 5 ));
pXDataMap -> SetAt ( KEY_ICODE , arVals . GetAt ( 6 ));
pXDataMap -> SetAt ( KEY_SCODE , _T ( "FLG" ));
}
else
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [标准号],[法兰类型],[端面] from [AecFlangeData] where [公称直径]=%d and [压力]>=%.1f and [压力]<=%.1f" ),
2026-09-28 15:28:50 +08:00
( int )( dDn + 0.5 ), dPress - 0.01 , dPress + 0.01 );
table . RemoveAll ();
pDb -> GetSelData ( sSQL , table );
if ( table . GetTableLogicSize () > 0 )
{
CStringArray arVals ;
table . GetValueRecord ( 0 , arVals );
pXDataMap -> SetAt ( PIPE_STDNO , arVals . GetAt ( 0 ));
pXDataMap -> SetAt ( PIPE_FITTYPE , arVals . GetAt ( 1 ));
pXDataMap -> SetAt ( PIPE_FLANGF , arVals . GetAt ( 2 ));
pXDataMap -> SetAt ( KEY_SCODE , _T ( "FLG" ));
}
}
return TRUE ;
}
BOOL TDbPipeSupport :: QueryGasketSpec ( CUIISQLiteServer * pDb , WPipe :: Trade & eTrade , double dDN , double dPre , LPCTSTR pszProName , LPCTSTR pszPreSpecName )
{
CString sSQL , sTip ;
2026-10-04 00:04:20 +08:00
//行业 全局
2026-09-28 15:28:50 +08:00
AecDbObjXDataMap xInitMap ;
KTModelLayoutXData :: ReadModelXData ( KT_PIPEINIT , xInitMap );
int nTrade = 4 ;
2026-10-04 00:04:20 +08:00
xInitMap . GetAt ( DOC_PIDTRADE , nTrade ); //应用行业,石油
2026-09-28 15:28:50 +08:00
eTrade = ( WPipe :: Trade ) nTrade ;
2026-10-04 00:04:20 +08:00
if ( eTrade == WPipe :: eCivial ) //市政 不考虑等级 Z系列 暂 A
2026-09-28 15:28:50 +08:00
{
return TRUE ;
}
if ( pszProName != NULL && pszPreSpecName != NULL )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select * from AecSpecGasket where [项目名称]='%s' and [等级名称]='%s' and [公称直径]=%d and [压力]>%.2f and [压力]<%.2f" ),
2026-09-28 15:28:50 +08:00
pszProName , pszPreSpecName ,( int )( dDN + 0.5 ), dPre - 0.1 , dPre + 0.1 );
if ( ! pDb -> IsSelEmpty ( sSQL ))
{
return TRUE ;
}
else
{
2026-10-04 00:04:20 +08:00
sTip . Format ( _T ( "缺少项目名称=%s 等级名称=%s 公称直径=%d 压力=%.1f 的垫片等级选型设置!" ), pszProName , pszPreSpecName , ( int )( dDN + 0.5 ), dPre );
2026-09-28 15:28:50 +08:00
AfxMessageBox ( sTip );
}
}
else
{
2026-10-04 00:04:20 +08:00
//AfxMessageBox(_T("查询垫片缺少项目名称,等级名称!"));
2026-09-28 15:28:50 +08:00
}
return FALSE ;
}
BOOL TDbPipeSupport :: QueryGasketData ( CUIISQLiteServer * pDb , double dDN , double dPre , CStringArray & arGasketG , LPCTSTR pszProName , LPCTSTR pszPreSpecName )
{
double dUnit = MakeSureMMUnit ( dDN );
WPipe :: Trade eTrade = WPipe :: eCivial ;
if ( ! QueryGasketSpec ( pDb , eTrade , dDN , dPre , pszProName , pszPreSpecName ))
{
return FALSE ;
}
CString sSQL , sTemp ;
2026-10-04 00:04:20 +08:00
if ( eTrade == WPipe :: eCivial ) //从垫片数据库中查
2026-09-28 15:28:50 +08:00
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [公称直径],[材质],[压力],[垫片厚度],[描述],[类别],[类型],[标准号] from AecSpecGasket \
where [公称直径]=%d and [压力]>%g and [压力]<%g" ), ( int )( dDN + 0.5 ), dPre - 0.1 , dPre + 0.1 );
2026-09-28 15:28:50 +08:00
CUIIValueTable table ;
pDb -> GetSelData ( sSQL , table );
CStringArray arValues ;
if ( table . GetTableLogicSize () > 0 )
{
arGasketG . RemoveAll ();
table . GetValueRecord ( 0 , arGasketG );
CString sText ;
if ( arGasketG . GetSize () >= 5 )
{
sText . Format ( _T ( "%.1f" ), dDN );
arGasketG . SetAt ( 0 , sText );
sText = arGasketG . GetAt ( 3 );
double dVal = dUnit * _ttof ( sText );
sText . Format ( _T ( "%.1f" ), dVal );
arGasketG . SetAt ( 3 , sText );
}
return TRUE ;
}
else
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [公称直径],[材质],[压力],[垫片厚度],[描述],[类别],[类型],[标准号] from AecSpecGasket \
where [公称直径]=%d" ), ( int )( dDN + 0.5 ));
2026-09-28 15:28:50 +08:00
pDb -> GetSelData ( sSQL , table );
if ( table . GetTableLogicSize () > 0 )
{
arGasketG . RemoveAll ();
table . GetValueRecord ( 0 , arGasketG );
CString sText ;
if ( arGasketG . GetSize () >= 5 )
{
sText . Format ( _T ( "%.1f" ), dDN );
arGasketG . SetAt ( 0 , sText );
sText = arGasketG . GetAt ( 3 );
double dVal = dUnit * _ttof ( sText );
sText . Format ( _T ( "%.1f" ), dVal );
arGasketG . SetAt ( 3 , sText );
}
return TRUE ;
}
else
{
2026-10-04 00:04:20 +08:00
acutPrintf ( _T ( " \n 没有查到公称直径:%d 压力%g 的垫片参数!" ), ( int ) dDN , dPre );
2026-09-28 15:28:50 +08:00
}
}
}
else
{
if ( pszProName != NULL && pszPreSpecName != NULL )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [公称直径],[材质],[压力],[垫片厚度],[描述],[类别],[类型],[标准号] from AecSpecGasket where [项目名称]='%s' and [等级名称]='%s' and [公称直径]=%d and [压力]>%.2f and [压力]<%.2f" ),
2026-09-28 15:28:50 +08:00
pszProName , pszPreSpecName , ( int )( dDN + 0.5 ), dPre - 0.1 , dPre + 0.1 );
CUIIValueTable table ;
pDb -> GetSelData ( sSQL , table );
CStringArray arValues ;
if ( table . GetTableLogicSize () > 0 )
{
arGasketG . RemoveAll ();
table . GetValueRecord ( 0 , arGasketG );
CString sText ;
if ( arGasketG . GetSize () >= 5 )
{
sText . Format ( _T ( "%.1f" ), dDN );
arGasketG . SetAt ( 0 , sText );
sText = arGasketG . GetAt ( 3 );
double dVal = dUnit * _ttof ( sText );
sText . Format ( _T ( "%.1f" ), dVal );
arGasketG . SetAt ( 3 , sText );
}
return TRUE ;
}
}
}
return FALSE ;
}
BOOL TDbPipeSupport :: IsPointHitWPipe ( ads_point ptRes , AcDbObjectId & id )
{
ads_point pt [ 4 ];
ads_point_set ( ptRes , pt [ 0 ]);
pt [ 0 ][ X ] += 10.0 ;
pt [ 0 ][ Y ] += 10.0 ; //??
pt [ 1 ][ X ] = pt [ 0 ][ X ] - 20.0 ;
pt [ 1 ][ Y ] = pt [ 0 ][ Y ];
pt [ 2 ][ X ] = pt [ 1 ][ X ];
pt [ 2 ][ Y ] = pt [ 1 ][ Y ] - 20.0 ;
pt [ 3 ][ X ] = pt [ 0 ][ X ];
pt [ 3 ][ Y ] = pt [ 2 ][ Y ];
TCHAR szBuf [ 64 ];
memset ( szBuf , 0 , sizeof ( szBuf ));
_tcscpy ( szBuf , _T ( "AEC_EWPIPE" ));
struct resbuf rb ;
rb . restype = 0 ;
rb . resval . rstring = szBuf ;
rb . rbnext = NULL ;
struct resbuf * pointlist = NULL ;
pointlist = acutBuildList ( RTPOINT , pt [ 0 ], RTPOINT , pt [ 1 ],
RTPOINT , pt [ 2 ], RTPOINT , pt [ 3 ], 0 );
ads_name ss ;
acedSSGet ( _T ( "CP" ), pointlist , NULL , & rb , ss );
acutRelRb ( pointlist );
Adesk :: Int32 lLen = 0 ;
acedSSLength ( ss , & lLen );
if ( lLen > 0 )
{
ads_name ent ;
acedSSName ( ss , 0 , ent );
acdbGetObjectId ( id , ent );
acedSSFree ( ss );
return TRUE ;
}
acedSSFree ( ss );
return FALSE ;
}
BOOL TDbPipeSupport :: InsertFlangeAndGasketData ( CUIISQLiteServer * pDb , const int & Dn , CString & sPro , CString & sLevel )
{
return FALSE ;
}
BOOL TDbPipeSupport :: QueryLateralData ( CUIISQLiteServer * pDb , double dDn , double & dE , double & dM , double & dB , double & dInsL , double & dInfD , int nType , LPCTSTR pszProName , LPCTSTR pszPreSpecName )
{
double dUnit = MakeSureMMUnit ( dDn );
CString sSQL , sSNo = _T ( "A" ), sTip ;
CStringArray arValues ;
WPipe :: Trade eTrade = WPipe :: eCivial ;
2026-10-04 00:04:20 +08:00
if ( ! QueryFitSpecsNo ( pDb , dDn , dDn , sSNo , eTrade , _T ( "斜三通" ), pszProName , pszPreSpecName ))
2026-09-28 15:28:50 +08:00
{
return FALSE ;
}
2026-10-04 00:04:20 +08:00
if ( eTrade == WPipe :: eCivial ) //市政
2026-09-28 15:28:50 +08:00
{
if ( nType == 0 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度E],[结构长度M],[结构长度B] from aeclateral where [公称直径]=%d " ),( int )( dDn + 0.5 ));
2026-09-28 15:28:50 +08:00
}
else if ( nType == 1 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度E],[结构长度M],[结构长度B],[承插长度],[接口直径] from aeclaterals where [公称直径]=%d" ),( int )( dDn + 0.5 ));
2026-09-28 15:28:50 +08:00
}
else if ( nType == 2 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度E],[结构长度M],[结构长度B],[螺纹长度],[接口直径] from aeclateralt where [公称直径]=%d" ),( int )( dDn + 0.5 ));
2026-09-28 15:28:50 +08:00
}
}
else
{
if ( nType == 0 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度E],[结构长度M],[结构长度B] from aeclateral where [公称直径]=%d and 外径系列='%s'" ), ( int )( dDn + 0.5 ), sSNo );
2026-09-28 15:28:50 +08:00
}
else if ( nType == 1 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度E],[结构长度M],[结构长度B],[承插长度],[接口直径] from aeclaterals where [公称直径]=%d and 外径系列='%s'" ), ( int )( dDn + 0.5 ), sSNo );
2026-09-28 15:28:50 +08:00
}
else if ( nType == 2 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度E],[结构长度M],[结构长度B],[螺纹长度],[接口直径] from aeclateralt where [公称直径]=%d and 外径系列='%s'" ), ( int )( dDn + 0.5 ), sSNo );
2026-09-28 15:28:50 +08:00
}
}
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () >= 3 )
{
dE = _ttof ( arVals . GetAt ( 0 ));
dM = _ttof ( arVals . GetAt ( 1 ));
dB = _ttof ( arVals . GetAt ( 2 ));
if ( arVals . GetSize () >= 5 )
{
dInsL = _ttof ( arVals . GetAt ( 3 ));
dInfD = _ttof ( arVals . GetAt ( 4 ));
}
dE /= dUnit ;
dM /= dUnit ;
dB /= dUnit ;
dInsL /= dUnit ;
dInfD /= dUnit ;
return TRUE ;
}
return FALSE ;
}
BOOL TDbPipeSupport :: QueryWYeData ( CUIISQLiteServer * pDb , double dDn , double & dM , double & dB , double & dInsL , double & dInfD , int nType , LPCTSTR pszProName , LPCTSTR pszPreSpecName )
{
double dUnit = MakeSureMMUnit ( dDn );
CString sSQL , sSNo = _T ( "A" ), sTip ;
CStringArray arValues ;
WPipe :: Trade eTrade = WPipe :: eCivial ;
2026-10-04 00:04:20 +08:00
if ( ! QueryFitSpecsNo ( pDb , dDn , dDn , sSNo , eTrade , _T ( "Y三通" ), pszProName , pszPreSpecName ))
2026-09-28 15:28:50 +08:00
{
return FALSE ;
}
if ( eTrade == WPipe :: eCivial )
{
if ( nType == 0 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度M],[结构长度B] from AecWye where [公称直径]=%d" ),( int )( dDn + 0.5 ));
2026-09-28 15:28:50 +08:00
}
else if ( nType == 1 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度M],[结构长度B],[承插长度],[接口直径] from AecWyes where [公称直径]=%d" ),( int )( dDn + 0.5 ));
2026-09-28 15:28:50 +08:00
}
else if ( nType == 2 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度M],[结构长度B],[螺纹长度],[接口直径] from AecWyet where [公称直径]=%d" ),( int )( dDn + 0.5 ));
2026-09-28 15:28:50 +08:00
}
}
else
{
if ( nType == 0 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度M],[结构长度B] from AecWye where [公称直径]=%d and 外径系列='%s'" ), ( int )( dDn + 0.5 ), sSNo );
2026-09-28 15:28:50 +08:00
}
else if ( nType == 1 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度M],[结构长度B],[承插长度],[接口直径] from AecWyes where [公称直径]=%d and 外径系列='%s'" ), ( int )( dDn + 0.5 ), sSNo );
2026-09-28 15:28:50 +08:00
}
else if ( nType == 2 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度M],[结构长度B],[螺纹长度],[接口直径] from AecWyet where [公称直径]=%d and 外径系列='%s'" ), ( int )( dDn + 0.5 ), sSNo );
2026-09-28 15:28:50 +08:00
}
}
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () >= 2 )
{
dM = _ttof ( arVals . GetAt ( 0 ));
dB = _ttof ( arVals . GetAt ( 1 ));
if ( arVals . GetSize () >= 4 )
{
dInsL = _ttof ( arVals . GetAt ( 2 ));
dInfD = _ttof ( arVals . GetAt ( 3 ));
}
dM /= dUnit ;
dB /= dUnit ;
dInsL /= dUnit ;
dInfD /= dUnit ;
return TRUE ;
}
return FALSE ;
}
BOOL TDbPipeSupport :: QueryCapData ( CUIISQLiteServer * pDb , double dDn , double & dL )
{
MakeSureMMUnit ( dDn );
2026-10-04 00:04:20 +08:00
dL = dDn * 0.3 ; //经验值
2026-09-28 15:28:50 +08:00
return TRUE ;
}
BOOL TDbPipeSupport :: QueryReduceData ( CUIISQLiteServer * pDb , int nCntype , double dDn , double dTDN , double & dL , AecDbObjXDataMap * pXData , LPCTSTR pszSDN /*= _T("A")*/ )
{
CString sSQL , sTbl ;
CStringArray arVals ;
if ( nCntype == 0 )
{
sTbl = _T ( "AecReduceData" );
if ( IsPlasticsMat ( pszSDN ))
sTbl = _T ( "AecReduceSData" );
}
else if ( nCntype == 1 )
{
sTbl = _T ( "AecReduceSData" );
}
else if ( nCntype == 2 )
{
sTbl = _T ( "AecReduceTData" );
}
else
{
sTbl = _T ( "AecReduceData" );
}
2026-10-04 00:04:20 +08:00
//如果是偏心
2026-09-28 15:28:50 +08:00
AcGeVector3d vtOff ( 0 , 0 , 0 );
pXData -> GetAt ( KEY_OFFSET , vtOff );
if ( ! vtOff . isZeroLength ())
{
if ( _tcscmp ( pszSDN , _T ( "S" )) == 0 )
{
sTbl = _T ( "AecEccReduceData" );
}
}
bool bLS = false ;
if ( nCntype == 3 || nCntype == 5 )
bLS = true ;
if ( sTbl . CompareNoCase ( _T ( "AecReduceData" )) == 0 ||
sTbl . CompareNoCase ( _T ( "AecEccReduceData" )) == 0 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [长度],[H],[H2],[H1] from %s where [外径系列] = '%s' and [公称直径L]=%d and [公称直径S]=%d and [长度] > 0" ), sTbl , pszSDN , __max (( int )( dDn + 0.5 ), ( int )( dTDN + 0.5 )), __min (( int )( dDn + 0.5 ), ( int )( dTDN + 0.5 )));
2026-09-28 15:28:50 +08:00
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . IsEmpty ())
{
bLS = false ;
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [长度],[H],[H1],[H2] from %s where [公称直径L]=%d and [公称直径S]=%d and [长度] > 0" ), sTbl , ( int )( dTDN + 0.5 ), ( int )( dDn + 0.5 ));
2026-09-28 15:28:50 +08:00
pDb -> GetSelData ( sSQL , arVals );
}
}
else
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [长度] from %s where [外径系列] = '%s' and [公称直径L]=%d and [公称直径S]=%d and [长度] > 0" ), sTbl , pszSDN , __max (( int )( dDn + 0.5 ), ( int )( dTDN + 0.5 )), __min (( int )( dDn + 0.5 ), ( int )( dTDN + 0.5 )));
2026-09-28 15:28:50 +08:00
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . IsEmpty ())
{
bLS = false ;
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [长度] from %s where [公称直径L]=%d and [公称直径S]=%d and [长度] > 0" ), sTbl , ( int )( dTDN + 0.5 ), ( int )( dDn + 0.5 ));
2026-09-28 15:28:50 +08:00
pDb -> GetSelData ( sSQL , arVals );
}
}
if ( ! arVals . IsEmpty ())
{
dL = _ttof ( arVals . GetAt ( 0 ));
if ( arVals . GetSize () >= 4 )
{
if ( bLS )
{
pXData -> SetAt ( _T ( "H" ), _ttof ( arVals . GetAt ( 1 )));
pXData -> SetAt ( _T ( "H2" ), _ttof ( arVals . GetAt ( 2 )));
pXData -> SetAt ( _T ( "H1" ), _ttof ( arVals . GetAt ( 3 )));
dL += 2.0 * _ttof ( arVals . GetAt ( 1 ));
dL += _ttof ( arVals . GetAt ( 2 ));
dL += _ttof ( arVals . GetAt ( 3 ));
}
else
{
pXData -> SetAt ( _T ( "H" ), _ttof ( arVals . GetAt ( 1 )));
pXData -> SetAt ( _T ( "H1" ), _ttof ( arVals . GetAt ( 2 )));
pXData -> SetAt ( _T ( "H2" ), _ttof ( arVals . GetAt ( 3 )));
2026-10-04 00:04:20 +08:00
//焊接不需要
2026-09-28 15:28:50 +08:00
//dL += 2.0 * _ttof(arVals.GetAt(1));
//dL += _ttof(arVals.GetAt(2));
//dL += _ttof(arVals.GetAt(3));
}
}
return TRUE ;
}
return FALSE ;
}
BOOL TDbPipeSupport :: QueryFlxJoinData ( CUIISQLiteServer * pDb , double dDN , double dPre , AecDbObjXDataMap * pXDataMap )
{
CString sSQL ;
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [尺寸A],[尺寸B],[尺寸C],[型号],[标准号] from AecFlxJoin where [公称直径]=%d and [压力]>%.3f and [压力]<%.3f" ),
2026-09-28 15:28:50 +08:00
( int )( dDN + 0.5 ), dPre - 0.01 , dPre + 0.01 );
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () >= 5 )
{
pXDataMap -> SetAt ( KEY_A , _ttof ( arVals . GetAt ( 0 )));
pXDataMap -> SetAt ( KEY_B , _ttof ( arVals . GetAt ( 1 )));
pXDataMap -> SetAt ( KEY_C , _ttof ( arVals . GetAt ( 2 )));
pXDataMap -> SetAt ( KEY_TYPE , arVals . GetAt ( 3 ));
pXDataMap -> SetAt ( PIPE_STDNO , arVals . GetAt ( 4 ));
pXDataMap -> SetAt ( PIPE_DN , dDN );
return TRUE ;
}
return FALSE ;
}
BOOL TDbPipeSupport :: QueryInfFDFL ( CUIISQLiteServer * pDb , int nObjectKind , int nCntype , double dDN , double & dFD , double & dFL , LPCTSTR pszProName , LPCTSTR pszPreSpecName )
{
double dUnit = MakeSureMMUnit ( dDN );
CString sTablename = _T ( "" ), sFitName = _T ( "" ), sSNo = _T ( "A" );
EFittingType eKind = ( EFittingType ) nObjectKind ;
switch ( eKind )
{
case eElbow :
{
if ( nCntype == 1 )
{
sTablename = _T ( "AecElbowSData" );
2026-10-04 00:04:20 +08:00
sFitName = _T ( "螺纹弯头" );
2026-09-28 15:28:50 +08:00
}
else if ( nCntype == 2 )
{
sTablename = _T ( "AecElbowTData" );
2026-10-04 00:04:20 +08:00
sFitName = _T ( "承插弯头" );
2026-09-28 15:28:50 +08:00
}
break ;
}
case eReduce :
{
if ( nCntype == 1 )
{
sTablename = _T ( "AecReduceSData" );
2026-10-04 00:04:20 +08:00
sFitName = _T ( "螺纹变径" );
2026-09-28 15:28:50 +08:00
}
else if ( nCntype == 2 )
{
sTablename = _T ( "AecReduceTData" );
2026-10-04 00:04:20 +08:00
sFitName = _T ( "承插变径" );
2026-09-28 15:28:50 +08:00
}
break ;
}
case eCross :
{
if ( nCntype == 1 )
{
sTablename = _T ( "AecCrossS" );
2026-10-04 00:04:20 +08:00
sFitName = _T ( "螺纹四通" );
2026-09-28 15:28:50 +08:00
}
else if ( nCntype == 2 )
{
sTablename = _T ( "AecCrossT" );
2026-10-04 00:04:20 +08:00
sFitName = _T ( "承插四通" );
2026-09-28 15:28:50 +08:00
}
break ;
}
case eTee :
{
if ( nCntype == 1 )
{
sTablename = _T ( "AecTeeSData" );
2026-10-04 00:04:20 +08:00
sFitName = _T ( "螺纹三通" );
2026-09-28 15:28:50 +08:00
}
else if ( nCntype == 2 )
{
sTablename = _T ( "AecTeeTData" );
2026-10-04 00:04:20 +08:00
sFitName = _T ( "承插三通" );
2026-09-28 15:28:50 +08:00
}
break ;
}
case eLateral :
{
if ( nCntype == 1 )
{
sTablename = _T ( "AecLateralS" );
2026-10-04 00:04:20 +08:00
sFitName = _T ( "螺纹斜三通" );
2026-09-28 15:28:50 +08:00
}
else if ( nCntype == 2 )
{
sTablename = _T ( "AecLateralT" );
2026-10-04 00:04:20 +08:00
sFitName = _T ( "承插斜三通" );
2026-09-28 15:28:50 +08:00
}
break ;
}
case eWye :
{
if ( nCntype == 1 )
{
sTablename = _T ( "AecWyes" );
2026-10-04 00:04:20 +08:00
sFitName = _T ( "螺纹Y三通" );
2026-09-28 15:28:50 +08:00
}
else if ( nCntype == 2 )
{
sTablename = _T ( "AecWyeT" );
2026-10-04 00:04:20 +08:00
sFitName = _T ( "承插Y三通" );
2026-09-28 15:28:50 +08:00
}
break ;
}
default :
break ;
}
if ( ! sTablename . IsEmpty ())
{
2026-10-04 00:04:20 +08:00
//等级系列 查询系列
2026-09-28 15:28:50 +08:00
WPipe :: Trade eTrade = WPipe :: eCivial ;
if ( ! QueryFitSpecsNo ( pDb , dDN , dDN , sSNo , eTrade , sFitName , pszProName , pszPreSpecName ))
{
return FALSE ;
}
CString sSQL ;
CStringArray arVals ;
if ( eTrade == WPipe :: eCivial )
{
if ( eKind == eReduce )
{
if ( nCntype == 1 ) //cheng cha
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [接口直径L],[承插长度L] from [%s] where [公称直径L]=%d" ), sTablename , ( int )( dDN + 0.5 ));
2026-09-28 15:28:50 +08:00
}
else if ( nCntype == 2 ) //luo wen
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [接口直径L],[螺纹长度L] from [%s] where [公称直径L]=%d" ), sTablename , ( int )( dDN + 0.5 ));
2026-09-28 15:28:50 +08:00
}
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () == 0 )
{
if ( nCntype == 1 ) //cheng cha
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [接口直径S],[承插长度S] from [%s] where [公称直径S]=%d" ), sTablename , ( int )( dDN + 0.5 ));
2026-09-28 15:28:50 +08:00
}
else if ( nCntype == 2 ) //luo wen
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [接口直径S],[螺纹长度S] from [%s] where [公称直径S]=%d" ), sTablename , ( int )( dDN + 0.5 ));
2026-09-28 15:28:50 +08:00
}
pDb -> GetSelData ( sSQL , arVals );
}
}
else
{
if ( nCntype == 1 ) //cheng cha
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [接口直径],[承插长度] from [%s] where [公称直径]=%d" ), sTablename , ( int )( dDN + 0.5 ));
2026-09-28 15:28:50 +08:00
}
else if ( nCntype == 2 ) //luo wen
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [接口直径],[螺纹长度] from [%s] where [公称直径]=%d" ), sTablename , ( int )( dDN + 0.5 ));
2026-09-28 15:28:50 +08:00
}
pDb -> GetSelData ( sSQL , arVals );
}
}
else
{
if ( eKind == eReduce )
{
if ( nCntype == 1 ) //cheng cha
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [接口直径L],[承插长度L] from [%s] where [公称直径L]=%d and [外径系列]='%s'" ), sTablename , ( int )( dDN + 0.5 ), sSNo );
2026-09-28 15:28:50 +08:00
}
else if ( nCntype == 2 ) //luo wen
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [接口直径L],[螺纹长度L] from [%s] where [公称直径L]=%d and [外径系列]='%s'" ), sTablename , ( int )( dDN + 0.5 ), sSNo );
2026-09-28 15:28:50 +08:00
}
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () == 0 )
{
if ( nCntype == 1 ) //cheng cha
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [接口直径S],[承插长度S] from [%s] where [公称直径S]=%d and [外径系列]='%s'" ), sTablename , ( int )( dDN + 0.5 ), sSNo );
2026-09-28 15:28:50 +08:00
}
else if ( nCntype == 2 ) //luo wen
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [接口直径S],[螺纹长度S] from [%s] where [公称直径S]=%d and [外径系列]='%s'" ), sTablename , ( int )( dDN + 0.5 ), sSNo );
2026-09-28 15:28:50 +08:00
}
pDb -> GetSelData ( sSQL , arVals );
}
}
else
{
if ( nCntype == 1 ) //cheng cha
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [接口直径],[承插长度] from [%s] where [公称直径]=%d and [外径系列]='%s'" ), sTablename , ( int )( dDN + 0.5 ), sSNo );
2026-09-28 15:28:50 +08:00
}
else if ( nCntype == 2 ) //luo wen
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [接口直径],[螺纹长度] from [%s] where [公称直径]=%d and [外径系列]='%s'" ), sTablename , ( int )( dDN + 0.5 ), sSNo );
2026-09-28 15:28:50 +08:00
}
pDb -> GetSelData ( sSQL , arVals );
}
}
if ( arVals . GetSize () >= 2 )
{
dFD = _ttof ( arVals . GetAt ( 0 ));
dFL = _ttof ( arVals . GetAt ( 1 ));
dFD /= dUnit ;
dFL /= dUnit ;
return TRUE ;
}
else
{
2026-10-04 00:04:20 +08:00
acutPrintf ( _T ( " \n 没有查到管件结构参数!" ));
2026-09-28 15:28:50 +08:00
acutPrintf ( _T ( " \n %s" ), sSQL );
}
}
else
{
2026-10-04 00:04:20 +08:00
if ( nCntype == 3 || nCntype == 5 ) //法兰管
2026-09-28 15:28:50 +08:00
{
2026-10-04 00:04:20 +08:00
//水池暂时取压力小于2
2026-09-28 15:28:50 +08:00
double dThk = 0.0 , dN = 0.0 ;
dDN /= dUnit ;
return QueryFlangData ( pDb , dDN , 1.0 , dFD , dFL , dThk , dN );
}
}
return FALSE ;
}
2026-10-04 00:04:20 +08:00
//设置法兰垫片
2026-09-28 15:28:50 +08:00
BOOL TDbPipeSupport :: SetGasketData ( CUIISQLiteServer * pDb , int iInf , double dDn , double dPre , LPCTSTR pszProj , LPCTSTR pszLevel , AecDbObjXDataMap * pXDataMap )
{
BOOL bSet = FALSE ;
CStringArray arGasket ;
if ( QueryGasketData ( pDb , dDn , dPre , arGasket , pszProj , pszLevel ))
{
2026-10-04 00:04:20 +08:00
//公称直径],[材质],[压力],[垫片厚度],[描述]
2026-09-28 15:28:50 +08:00
CString sGasketInf , sKey ;
for ( int i = 0 ; i < arGasket . GetSize (); i ++ )
{
sGasketInf += arGasket . GetAt ( i );
sGasketInf += _T ( "#" );
}
sGasketInf . TrimRight ( _T ( '#' ));
sKey . Format ( _T ( "%s%d" ), PIPE_GASKETINF , iInf );
pXDataMap -> SetAt ( sKey , sGasketInf );
bSet = TRUE ;
}
arGasket . RemoveAll ();
return bSet ;
}
BOOL TDbPipeSupport :: QueryFBoltData ( CUIISQLiteServer * pDb , double dDn , double dPre , LPCTSTR pszProj , LPCTSTR pszLevel , CStringArray & arBoltData )
{
CString sSQL ;
2026-10-04 00:04:20 +08:00
//类型 材质 标准号 描述
sSQL . Format ( _T ( "select [类型],[材质],[标准号],[描述] from AecSpecBolt where [项目名称]='%s' and [等级名称]='%s' and [类别]='螺栓' and [公称直径]=%d and [压力]>%.2f and [压力]<%.2f" ),
2026-09-28 15:28:50 +08:00
pszProj , pszLevel ,( int )( dDn + 0.5 ), dPre - 0.1 , dPre + 0.1 );
CUIIValueTable table ;
pDb -> GetSelData ( sSQL , table );
if ( table . GetTableLogicSize () > 0 )
{
table . GetValueRecord ( 0 , arBoltData );
return TRUE ;
}
2026-10-04 00:04:20 +08:00
//类型 材质 标准号 描述
sSQL . Format ( _T ( "select [类型],[材质],[标准号],[描述] from AecSpecBolt where [项目名称]='%s' and [等级名称]='%s' and [类别]='螺母' and [公称直径]=%d and [压力]>%.2f and [压力]<%.2f" ),
2026-09-28 15:28:50 +08:00
pszProj , pszLevel , ( int )( dDn + 0.5 ), dPre - 0.1 , dPre + 0.1 );
CUIIValueTable table2 ;
pDb -> GetSelData ( sSQL , table2 );
if ( table2 . GetTableLogicSize () > 0 )
{
table2 . GetValueRecord ( 0 , arBoltData );
return TRUE ;
}
return FALSE ;
}
BOOL TDbPipeSupport :: QueryBoltData ( CUIISQLiteServer * pDb , double dDn , double dPre , CStringArray & arBoltData )
{
CString sSQL ;
2026-10-04 00:04:20 +08:00
//螺栓规格 螺栓长度 螺栓数量
sSQL . Format ( _T ( "select [螺栓规格],[螺栓长度],[螺栓数量] from AecBoltData where [公称直径]=%d and [压力]>%.2f and [压力]<%.2f" ),
2026-09-28 15:28:50 +08:00
( int )( dDn + 0.5 ), dPre - 0.1 , dPre + 0.1 );
return pDb -> GetSelData ( sSQL , arBoltData );
}
2026-10-04 00:04:20 +08:00
//设置法兰螺栓
2026-09-28 15:28:50 +08:00
BOOL TDbPipeSupport :: SetBoltData ( CUIISQLiteServer * pDb , int iInf , double dDn , double dPre , LPCTSTR pszProj , LPCTSTR pszLevel , AecDbObjXDataMap * pXDataMap )
{
2026-10-04 00:04:20 +08:00
//螺栓信息
2026-09-28 15:28:50 +08:00
BOOL bSet = FALSE ;
CStringArray arBoltData ;
2026-10-04 00:04:20 +08:00
//[类型],[材质],[标准号],[描述]
2026-09-28 15:28:50 +08:00
if ( QueryFBoltData ( pDb , dDn , dPre , pszProj , pszLevel , arBoltData ))
{
2026-10-04 00:04:20 +08:00
//螺栓规格 螺栓长度 数量
2026-09-28 15:28:50 +08:00
if ( QueryBoltData ( pDb , dDn , dPre , arBoltData ))
{
CString sKey , sBoltData ;
for ( int i = 0 ; i < arBoltData . GetSize (); i ++ )
{
sBoltData += arBoltData . GetAt ( i );
sBoltData += _T ( "#" );
}
sBoltData . TrimRight ( _T ( "#" ));
sKey . Format ( _T ( "%s%d" ), PIPE_BOLTINF , iInf );
pXDataMap -> SetAt ( sKey , sBoltData );
bSet = TRUE ;
}
}
return FALSE ;
}
bool TDbPipeSupport :: IsPlasticsMat ( LPCTSTR pszODNO )
{
const CString sPlastic = _T ( "UPVC CPVC PVC-C PP-H (PE) HDPE" );
CStringArray arNos ;
CoreTools :: SplitStrintToArray ( sPlastic , arNos , _T ( ' ' ));
for ( int i = 0 ; i < arNos . GetSize (); i ++ )
{
if ( arNos . GetAt ( i ). CompareNoCase ( pszODNO ) == 0 )
{
return true ;
}
}
return false ;
}
BOOL TDbPipeSupport :: QueryPVCReducerData ( CUIISQLiteServer * pDb , double dDN , double dEDN , AecDbObjXDataMap * pXDataMap , LPCTSTR pszSDNo )
{
double dUnit = MakeSureMMUnit ( dDN );
2026-10-04 00:04:20 +08:00
int nConnectType = 0 ; //焊接0 承插1 螺纹2 法兰管3
2026-09-28 15:28:50 +08:00
pXDataMap -> GetAt ( PIPE_CONNECT , nConnectType );
CString sSQL ;
if ( nConnectType <= 1 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [长度],[承插长度L],[承插长度S],[接口直径L],[接口直径S] from [AecReduceSData] where [公称直径L]=%d and [公称直径S]=%d and [外径系列]='%s'" ),
2026-09-28 15:28:50 +08:00
( int )( dDN + 0.5 ), ( int )( dEDN + 0.5 ), pszSDNo );
}
else if ( nConnectType == 2 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [长度],[螺纹长度L],[螺纹长度S],[接口直径L],[接口直径S] from [AecReduceTData] where [公称直径L]=%d and [公称直径S]=%d and [外径系列]='%s'" ),
2026-09-28 15:28:50 +08:00
( int )( dDN + 0.5 ), ( int )( dEDN + 0.5 ), pszSDNo );
}
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () >= 4 )
{
pXDataMap -> SetAt ( KEY_Length , _ttof ( arVals . GetAt ( 0 )) / dUnit );
pXDataMap -> SetAt ( PIPE_INTERFACEL , _ttof ( arVals . GetAt ( 1 )) / dUnit );
pXDataMap -> SetAt ( PIPE_INTERFACEL2 , _ttof ( arVals . GetAt ( 2 )) / dUnit );
pXDataMap -> SetAt ( PIPE_INTERFACED , _ttof ( arVals . GetAt ( 3 )) / dUnit );
pXDataMap -> SetAt ( PIPE_INTERFACED2 , _ttof ( arVals . GetAt ( 4 )) / dUnit );
return TRUE ;
}
return FALSE ;
}
BOOL TDbPipeSupport :: QueryPVCElbow ( CUIISQLiteServer * pDb , double dDN , AecDbObjXDataMap * pXDataMap , LPCTSTR pszSDNo )
{
double dUnit = MakeSureMMUnit ( dDN );
2026-10-04 00:04:20 +08:00
int nConnectType = 0 ; //焊接0 承插1 螺纹2 法兰管3
2026-09-28 15:28:50 +08:00
pXDataMap -> GetAt ( PIPE_CONNECT , nConnectType );
CString sSQL ;
if ( nConnectType <= 1 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度],[承插长度],[接口直径] from [AecElbowSData] where [公称直径]=%d and [外径系列]='%s'" ),
2026-09-28 15:28:50 +08:00
( int )( dDN + 0.5 ), pszSDNo );
}
else if ( nConnectType == 2 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度],[螺纹长度],[接口直径] from [AecElbowTData] where [公称直径]=%d and [外径系列]='%s'" ),
2026-09-28 15:28:50 +08:00
( int )( dDN + 0.5 ), pszSDNo );
}
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () >= 3 )
{
pXDataMap -> SetAt ( KEY_L , _ttof ( arVals . GetAt ( 0 )) / dUnit );
pXDataMap -> SetAt ( PIPE_INTERFACEL , _ttof ( arVals . GetAt ( 1 )) / dUnit );
pXDataMap -> SetAt ( PIPE_INTERFACED , _ttof ( arVals . GetAt ( 2 )) / dUnit );
return TRUE ;
}
return FALSE ;
}
BOOL TDbPipeSupport :: QueryPVCTeeData ( CUIISQLiteServer * pDb , double dDn1 , double dDn2 , AecDbObjXDataMap * pXDataMap , LPCTSTR pszSDNo )
{
double dUnit = MakeSureMMUnit ( dDn1 );
double dMaxD = __max ( dDn1 , dDn2 );
double dMinD = __min ( dDn1 , dDn2 );
2026-10-04 00:04:20 +08:00
int nConnectType = 0 ; //焊接0 承插1 螺纹2 法兰管3
2026-09-28 15:28:50 +08:00
pXDataMap -> GetAt ( PIPE_CONNECT , nConnectType );
CString sSQL ;
if ( nConnectType <= 1 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [承插长度],[接口直径] from [AecTeeSData] where [公称直径]=%d and [外径系列]='%s'" ),
2026-09-28 15:28:50 +08:00
( int )( dMaxD + 0.5 ), pszSDNo );
}
else if ( nConnectType == 2 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [螺纹长度],[接口直径] from [AecTeeTData] where [公称直径]=%d and [外径系列]='%s'" ),
2026-09-28 15:28:50 +08:00
( int )( dMaxD + 0.5 ), pszSDNo );
}
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () >= 2 )
{
pXDataMap -> SetAt ( PIPE_INTERFACEL , _ttof ( arVals . GetAt ( 0 )) / dUnit );
pXDataMap -> SetAt ( PIPE_INTERFACED , _ttof ( arVals . GetAt ( 1 )) / dUnit );
}
if ( nConnectType <= 1 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [承插长度],[接口直径] from [AecTeeSData] where [公称直径]=%d and [外径系列]='%s'" ),
2026-09-28 15:28:50 +08:00
( int )( dMinD + 0.5 ), pszSDNo );
}
else if ( nConnectType == 2 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [螺纹长度],[接口直径] from [AecTeeTData] where [公称直径]=%d and [外径系列]='%s'" ),
2026-09-28 15:28:50 +08:00
( int )( dMinD + 0.5 ), pszSDNo );
}
arVals . RemoveAll ();
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () >= 2 )
{
pXDataMap -> SetAt ( PIPE_INTERFACEL2 , _ttof ( arVals . GetAt ( 0 )) / dUnit );
pXDataMap -> SetAt ( PIPE_INTERFACED2 , _ttof ( arVals . GetAt ( 1 )) / dUnit );
}
return FALSE ;
}
BOOL TDbPipeSupport :: QueryPVCCrossData ( CUIISQLiteServer * pDb , double dDn1 , double dDn2 , AecDbObjXDataMap * pXDataMap , LPCTSTR pszSDNo )
{
double dUnit = MakeSureMMUnit ( dDn1 );
double dMaxD = __max ( dDn1 , dDn2 );
double dMinD = __min ( dDn1 , dDn2 );
2026-10-04 00:04:20 +08:00
int nConnectType = 0 ; //焊接0 承插1 螺纹2 法兰管3
2026-09-28 15:28:50 +08:00
pXDataMap -> GetAt ( PIPE_CONNECT , nConnectType );
CString sSQL ;
if ( nConnectType <= 1 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度],[承插长度],[接口直径] from [AecCrossS] where [公称直径]=%d and [外径系列]='%s'" ),
2026-09-28 15:28:50 +08:00
( int )( dMaxD + 0.5 ), pszSDNo );
}
else if ( nConnectType == 2 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构长度],[螺纹长度],[接口直径] from [AecCrossT] where [公称直径]=%d and [外径系列]='%s'" ),
2026-09-28 15:28:50 +08:00
( int )( dMaxD + 0.5 ), pszSDNo );
}
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () >= 2 )
{
pXDataMap -> SetAt ( PIPE_INTERFACEL , _ttof ( arVals . GetAt ( 0 )) / dUnit );
pXDataMap -> SetAt ( PIPE_INTERFACED , _ttof ( arVals . GetAt ( 1 )) / dUnit );
}
if ( nConnectType <= 1 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [承插长度],[接口直径] from [AecCrossS] where [公称直径]=%d and [外径系列]='%s'" ),
2026-09-28 15:28:50 +08:00
( int )( dMinD + 0.5 ), pszSDNo );
}
else if ( nConnectType == 2 )
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [螺纹长度],[接口直径] from [AecCrossT] where [公称直径]=%d and [外径系列]='%s'" ),
2026-09-28 15:28:50 +08:00
( int )( dMinD + 0.5 ), pszSDNo );
}
arVals . RemoveAll ();
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () >= 2 )
{
pXDataMap -> SetAt ( PIPE_INTERFACEL2 , _ttof ( arVals . GetAt ( 0 )) / dUnit );
pXDataMap -> SetAt ( PIPE_INTERFACED2 , _ttof ( arVals . GetAt ( 1 )) / dUnit );
}
return FALSE ;
}
int TDbPipeSupport :: QueryRPorHP ( CUIISQLiteServer * pDb , LPCTSTR pszLevel , double dDn , double ddn )
{
//[AecSpecBranch] (
2026-10-04 00:04:20 +08:00
//[等级] CHAR(256),
//[主管] INTEGER,
//[支管] INTEGER,
//[结构] CHAR(17));
2026-09-28 15:28:50 +08:00
/*
0 RT REDUCING TEE
1 T EQUAL TEE
2 H HALF COUPLING
3 P BRANCH WELD
4 RP REINFORCING PAD
5 SO SOCKOLET
6 W WELDOLET
*/
static LPCTSTR ssBs [] = { _T ( "RT" ), _T ( "T" ), _T ( "H" ), _T ( "P" ), _T ( "RP" ), _T ( "SO" ), _T ( "W" ), NULL };
int nLen = sizeof ( ssBs ) / sizeof ( LPCTSTR ) - 1 ;
CString sSQL , sB ;
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构] from AecSpecBranch where [等级]='%s' and [主管]=%d and [支管]=%d" ), pszLevel ,( int )( dDn + 0.5 ),( int )( ddn + 0.5 ));
2026-09-28 15:28:50 +08:00
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () >= 1 )
{
sB = arVals . GetAt ( 0 );
for ( int i = 0 ; i < nLen ; i ++ )
{
if ( sB . CompareNoCase ( ssBs [ i ]) == 0 )
{
return i ;
}
}
}
2026-10-04 00:04:20 +08:00
else //无等级查询
2026-09-28 15:28:50 +08:00
{
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [结构] from AecSpecBranch where [主管]=%d and [支管]=%d" ), ( int )( dDn + 0.5 ), ( int )( ddn + 0.5 ));
2026-09-28 15:28:50 +08:00
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () >= 1 )
{
sB = arVals . GetAt ( 0 );
for ( int i = 0 ; i < nLen ; i ++ )
{
if ( sB . CompareNoCase ( ssBs [ i ]) == 0 )
{
return i ;
}
}
}
}
return 0 ;
}
BOOL TDbPipeSupport :: QueryRP ( CUIISQLiteServer * pDb , double dDn , AecDbObjXDataMap * pXDataMap )
{
CString sSQL ;
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [外径D2],[壁厚],[标准号] from [AecRp] where [接管公称直径]=%d" ), ( int )( dDn + 0.5 ));
2026-09-28 15:28:50 +08:00
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () >= 3 )
{
pXDataMap -> SetAt ( PIPE_D , _ttof ( arVals . GetAt ( 0 )));
pXDataMap -> SetAt ( PIPE_THICK , _ttof ( arVals . GetAt ( 1 )));
pXDataMap -> SetAt ( PIPE_STDNO , arVals . GetAt ( 2 ));
return TRUE ;
}
return FALSE ;
}
BOOL TDbPipeSupport :: QueryHP ( CUIISQLiteServer * pDb , double dDn , AecDbObjXDataMap * pXDataMap )
{
CString sSQL ;
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select [外径],[长度],[标准号] from [AecHp] where [接管公称直径]=%d" ), ( int )( dDn + 0.5 ));
2026-09-28 15:28:50 +08:00
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () >= 3 )
{
pXDataMap -> SetAt ( PIPE_D , _ttof ( arVals . GetAt ( 0 )));
pXDataMap -> SetAt ( KEY_L , _ttof ( arVals . GetAt ( 1 )));
pXDataMap -> SetAt ( PIPE_STDNO , arVals . GetAt ( 2 ));
return TRUE ;
}
return FALSE ;
}
BOOL TDbPipeSupport :: QuerySBFSpec ( CUIISQLiteServer * pDb , const CString & sLevel , double dDn , AecDbObjXDataMap * pXDataMap )
{
CString sSQL ;
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select * from [AecSpecFlange] where [公称直径]=%d and [等级名称]='%s' and [类别]='8字盲板'" ),( int )( dDn + 0.5 ), sLevel );
2026-09-28 15:28:50 +08:00
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
/*
*0 [ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
2026-10-04 00:04:20 +08:00
1 [项目名称] varchar(255),
2 [等级名称] varchar(250),
3 [类别] varchar(250),
4 [类型] varchar(250),
5 [公称直径] INTEGER,
6 [材质] varchar(50),
7 [标准号] varchar(250),
8 [端面] varchar(50),
9 [压力] FLOAT,
10 [描述] varchar(255),
11 [制造类型] CHAR(50),
12 [元件代码] CHAR(50),
13 [短代码] CHAR(50));
2026-09-28 15:28:50 +08:00
*/
if ( arVals . GetSize () < 14 )
{
2026-10-04 00:04:20 +08:00
acutPrintf ( _T ( " \n 没有查询到8字盲板数据 %s" ), sSQL );
2026-09-28 15:28:50 +08:00
return FALSE ;
}
pXDataMap -> SetAt ( PIPE_FLANGP , arVals . GetAt ( 4 ));
pXDataMap -> SetAt ( PIPE_MATERIALFT , arVals . GetAt ( 6 ));
pXDataMap -> SetAt ( PIPE_STDNO , arVals . GetAt ( 7 ));
pXDataMap -> SetAt ( PIPE_FLANGF , arVals . GetAt ( 8 ));
pXDataMap -> SetAt ( PIPE_PRESSURE , arVals . GetAt ( 9 ));
pXDataMap -> SetAt ( PIPE_DESCR , arVals . GetAt ( 10 ));
pXDataMap -> SetAt ( KEY_PRODTP , arVals . GetAt ( 11 ));
pXDataMap -> SetAt ( KEY_ICODE , arVals . GetAt ( 12 ));
pXDataMap -> SetAt ( KEY_SCODE , arVals . GetAt ( 13 ));
return TRUE ;
}
BOOL TDbPipeSupport :: QuerySBFlange ( CUIISQLiteServer * pDb , double dDn , double dPress , AecDbObjXDataMap * pXDataMap )
{
CString sSQL ;
CString sStd = _T ( "HG/T 21547" );
pXDataMap -> GetAt ( PIPE_STDNO , sStd );
CString sFF = _T ( "FF" );
pXDataMap -> GetAt ( PIPE_FLANGF , sFF );
/*
0 [ID] INTEGER PRIMARY KEY AUTOINCREMENT,
2026-10-04 00:04:20 +08:00
1 [公称直径] INTEGER,
2 [压力] FLOAT,
2026-09-28 15:28:50 +08:00
3 [d] INTEGER,
4 [L] INTEGER,
5 [T1] INTEGER,
6 [T] FLOAT,
7 [B] INTEGER,
8 [Q] INTEGER,
9 [G] INTEGER,
2026-10-04 00:04:20 +08:00
10 [端面] CHAR(17),
11 [标准号] CHAR(50));
2026-09-28 15:28:50 +08:00
*/
2026-10-04 00:04:20 +08:00
sSQL . Format ( _T ( "select * from [AecBFlangeData] where [公称直径]=%d and [压力]>%.1f and [压力]<%.1f " ),
2026-09-28 15:28:50 +08:00
( int )( dDn + 0.5 ), dPress - 0.05 , dPress + 0.05 );
CStringArray arVals ;
pDb -> GetSelData ( sSQL , arVals );
if ( arVals . GetSize () < 11 )
{
2026-10-04 00:04:20 +08:00
acutPrintf ( _T ( " \n 没有查询到插板数据 %s" ), sSQL );
2026-09-28 15:28:50 +08:00
return FALSE ;
}
pXDataMap -> SetAt ( KEY_B , _ttof ( arVals . GetAt ( 7 )));
pXDataMap -> SetAt ( KEY_DD , _ttof ( arVals . GetAt ( 3 )));
pXDataMap -> SetAt ( KEY_L , _ttof ( arVals . GetAt ( 4 )));
pXDataMap -> SetAt ( KEY_T , _ttof ( arVals . GetAt ( 6 )));
2026-10-04 00:04:20 +08:00
pXDataMap -> SetAt ( PIPE_THICK , _ttof ( arVals . GetAt ( 6 ))); //总厚度
2026-09-28 15:28:50 +08:00
pXDataMap -> SetAt ( KEY_T2 , _ttof ( arVals . GetAt ( 5 )));
pXDataMap -> SetAt ( KEY_Q , _ttof ( arVals . GetAt ( 8 )));
pXDataMap -> SetAt ( KEY_G , _ttof ( arVals . GetAt ( 9 )));
2026-10-04 00:04:20 +08:00
pXDataMap -> SetAt ( KEY_ON , TRUE ); //开关
2026-09-28 15:28:50 +08:00
pXDataMap -> SetAt ( PIPE_FLANGF , arVals . GetAt ( 10 ));
return TRUE ;
}