Files
envi-code/SourceCode/Code2026/tg_shs/inc/Mep/SAmountItem.h
T
2026-09-28 15:28:50 +08:00

119 lines
3.3 KiB
C++

// SAmountItem.h: interface for the SAmountItem class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SAMOUNTITEM_H__E504668B_4AAD_45AB_862B_E4A6311E65C6__INCLUDED_)
#define AFX_SAMOUNTITEM_H__E504668B_4AAD_45AB_862B_E4A6311E65C6__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class TELAPI SAmountItem
{
// Construction
public:
SAmountItem(int iItem, const TCHAR* szBlkName, const TCHAR* szName,
const TCHAR* szSpec, const TCHAR* szUnit, double nNum, const TCHAR* szDemo);
SAmountItem(){};
virtual ~SAmountItem(){};
SAmountItem & operator = (const SAmountItem &src) {
m_csBlkName = src.m_csBlkName;
m_csName = src.m_csName;
m_csSpec = src.m_csSpec;
m_csUnit = src.m_csUnit;
m_csDemo = src.m_csDemo;
m_nNum = src.m_nNum;
m_iType = src.m_iType;
return *this;
}
CString m_csBlkName;
CString m_csName;
CString m_csSpec;
CString m_csUnit;
CString m_csDemo;
CString m_csAttribText;
double m_nNum;
int m_iType; // 0:管线 1:阀门 2:管道设备 3:管道附件 4:洁具 5:其他设备
static int SortByItem(const SAmountItem *, const SAmountItem *);
};
inline int IntCmp(const int *i, const int *j)
{
if(*i < *j)
return -1;
else if(*i > *j)
return 1;
else
return 0;
}
inline int SAmountItem::SortByItem(const SAmountItem *p1, const SAmountItem *p2)
{
SAmountItem *pp1 = (SAmountItem *)p1,
*pp2 = (SAmountItem *)p2;
int ret = IntCmp(&pp1->m_iType, &pp2->m_iType);
if(ret != 0)
return ret;
if(pp1->m_iType == 0 && pp2->m_iType == 0){ //双方都是管线,要比较材质和管径
CString csName1 = pp1->m_csName;
CString csName2 = pp2->m_csName;
ret = _tcscmp(csName1, csName2);
if(ret != 0)
return ret;
CString csSpec1 = pp1->m_csSpec;
CString csSpec2 = pp2->m_csSpec;
TCHAR cName1[256]=_T(""), eName1[256]=_T("");
TCHAR cName2[256]=_T(""), eName2[256]=_T("");
CT_strnth(csSpec1, 1, cName1);
CT_strnth(csSpec1, 2, eName1);
CT_strnth(csSpec2, 1, cName2);
CT_strnth(csSpec2, 2, eName2);
if(_tcscmp(eName1, _T(""))!=0 && _tcscmp(eName2, _T(""))!=0 ) //有空格,说明管材和规格写在一起了
{
ret = _tcscmp(cName1, cName2);
if(ret != 0)
return ret;
}
int num1, num2, numWith;
XString xsText;
StringAnalysis((const TCHAR*)csSpec1, xsText, &num1, &numWith);
StringAnalysis((const TCHAR*)csSpec2, xsText, &num2, &numWith);
return IntCmp(&num1, &num2);
}
else if((pp1->m_iType == 3 && pp2->m_iType == 3)
|| (pp1->m_iType == 2 && pp2->m_iType == 2)
|| (pp1->m_iType == 1 && pp2->m_iType == 1)) //双方都是附件,要比较材质和管径
{
CString csName1 = pp1->m_csName;
CString csName2 = pp2->m_csName;
ret = _tcscmp(csName1, csName2);
if(ret != 0)
return ret;
return _tcscmp(pp1->m_csSpec, pp2->m_csSpec);
}
else
return _tcscmp(pp1->m_csSpec, pp2->m_csSpec);
return 0;
}
inline SAmountItem::SAmountItem(int iItem, const TCHAR* szBlkName, const TCHAR* szName,
const TCHAR* szSpec, const TCHAR* szUnit, double nNum, const TCHAR* szDemo)
{
m_iType = iItem;
m_csBlkName = szBlkName;
m_csName = szName;
m_csSpec = szSpec;
m_csUnit = szUnit;
m_nNum = nNum;
m_csDemo = szDemo;
}
#endif // !defined(AFX_SAMOUNTITEM_H__E504668B_4AAD_45AB_862B_E4A6311E65C6__INCLUDED_)