Files
coco df489d5640 a
2026-07-03 16:05:30 +08:00

221 lines
8.1 KiB
C++

// Script3D.cpp: implementation of the CScript3D class.
//
//////////////////////////////////////////////////////////////////////
#include "geomative.h"
#include "Script3D.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CScript3D::CScript3D(DWORD dwID, _ConnectionPtr& pConnection): CScript(dwID, pConnection)
{
m_iAR = 0;
}
CScript3D::~CScript3D()
{
}
bool CScript3D::ShowChannelList(CListCtrl& sptChannelList)
{
_RecordsetPtr pRecCh = NULL;
_RecordsetPtr pRecMed = NULL;
CString szSql = _T("");
int iIndex = (int)VAL_ZERO;
DWORD dwHandle = (DWORD)VAL_ZERO;
pRecCh.CreateInstance(_uuidof(Recordset));
pRecMed.CreateInstance(_uuidof(Recordset));
if ((int)VAL_ZERO != sptChannelList.GetItemCount())
{
sptChannelList.DeleteAllItems();
}
szSql.Empty();
szSql.Format(_T("select a.ID as ID,a.CHnumber as CHnumber,b.MEname as MEname,a.AR as AR from channel a,medium b where a.SCID = %d and a.AR = b.AR and b.LANG = %d order by a.CHnumber"), m_dwID, LANG_ENUS);
pRecCh->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText);
while ((short)VAL_ZERO == pRecCh->adoEOF)
{
sptChannelList.InsertItem(iIndex, pRecCh->GetCollect(_T("CHnumber")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecCh->GetCollect(_T("CHnumber")));
sptChannelList.SetItemText(iIndex, 1, pRecCh->GetCollect(_T("MEname")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecCh->GetCollect(_T("MEname")));
dwHandle = m_handleProcessor.GenerateHandle((DWORD)pRecCh->GetCollect(_T("ID")).ulVal, PZ_STYLE_SPT_CH);
sptChannelList.SetItemData(iIndex, dwHandle);
m_iAR = pRecCh->GetCollect(_T("AR")).iVal;
iIndex++;
pRecCh->MoveNext();
}
pRecCh->Close();
return true;
}
bool CScript3D::ShowSptConInfo(CListCtrl& sptConList)
{
_RecordsetPtr pRecSptList = NULL;
CString szSql;
int iIndex = (int)VAL_ZERO;
pRecSptList.CreateInstance(_uuidof(Recordset));
if ((int)VAL_ZERO != sptConList.GetItemCount())
{
sptConList.DeleteAllItems();
}
szSql.Empty();
szSql.Format(_T("select b.CHnumber as CHnumber,a.TSN as TSN,a.C1 as C1,a.C2 as C2,a.P1 as P1,a.P2 as P2,a.K as K,a.N as N from script3d a,channel b "
"where b.SCID = %d and a.CHID = b.ID order by a.TSN,a.CHID"), m_dwID);
pRecSptList->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText);
while ((short)VAL_ZERO == pRecSptList->adoEOF)
{
sptConList.InsertItem(iIndex, pRecSptList->GetCollect(_T("CHnumber")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("CHnumber")));
sptConList.SetItemText(iIndex, 1, pRecSptList->GetCollect(_T("TSN")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("TSN")));
sptConList.SetItemText(iIndex, 2, pRecSptList->GetCollect(_T("C1")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("C1")));
sptConList.SetItemText(iIndex, 3, pRecSptList->GetCollect(_T("C2")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("C2")));
sptConList.SetItemText(iIndex, 4, pRecSptList->GetCollect(_T("P1")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("P1")));
sptConList.SetItemText(iIndex, 5, pRecSptList->GetCollect(_T("P2")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("P2")));
sptConList.SetItemText(iIndex, 6, pRecSptList->GetCollect(_T("K")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("K")));
sptConList.SetItemText(iIndex, 7, pRecSptList->GetCollect(_T("N")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("N")));
//给每一行绑定一个唯一的数,这个数可以传到SortItems里面的对比函数作为lParam1和lParam2,分别用来代表不同的行
//否则如果不调用SetItemData,则lParam1和lParam2都会为0
sptConList.SetItemData(iIndex, (pRecSptList->GetCollect(_T("TSN")).vt == VT_NULL) ? 0 : (int)pRecSptList->GetCollect(_T("TSN")).iVal);
iIndex++;
pRecSptList->MoveNext();
}
pRecSptList->Close();
AdjustRecListColumn(m_iAR, sptConList);
return true;
}
bool CScript3D::ShowSptDetailInfo(CListCtrl &sptDetailList)
{
_RecordsetPtr pRecSCon = NULL;
_RecordsetPtr pRecSHead = NULL;
_RecordsetPtr pRecMed = NULL;
_RecordsetPtr pRecCm = NULL;
CString szSql = _T("");
CString szLabel = _T("");
int iRowIndex = (int)VAL_ZERO;
pRecSCon.CreateInstance(_uuidof(Recordset));
pRecSHead.CreateInstance(_uuidof(Recordset));
pRecMed.CreateInstance(_uuidof(Recordset));
pRecCm.CreateInstance(_uuidof(Recordset));
while (sptDetailList.GetItemCount() != iRowIndex)
{
sptDetailList.SetItemText(iRowIndex, 1, _T(""));
iRowIndex++;
}
szSql.Empty();
szSql.Format(_T("select CN,Sname,Eamount,CHamount,TPamount,definer,Format(DEdate,'YYYY-MM-DD') as DEdate,SCdesc from scon where ID = %u"), m_dwID);
pRecSCon->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText);
if ((long)VAL_ZERO != pRecSCon->GetRecordCount())
{
sptDetailList.SetItemText(0, 1, pRecSCon->GetCollect(_T("CN")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("CN")));
sptDetailList.SetItemText(1, 1, pRecSCon->GetCollect(_T("Sname")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("Sname")));
sptDetailList.SetItemText(2, 1, pRecSCon->GetCollect(_T("Eamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("Eamount")));
sptDetailList.SetItemText(3, 1, pRecSCon->GetCollect(_T("CHamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("CHamount")));
sptDetailList.SetItemText(4, 1, pRecSCon->GetCollect(_T("TPamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("TPamount")));
sptDetailList.SetItemText(5, 1, pRecSCon->GetCollect(_T("definer")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("definer")));
sptDetailList.SetItemText(6, 1, pRecSCon->GetCollect(_T("DEdate")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("DEdate")));
sptDetailList.SetItemText(7, 1, pRecSCon->GetCollect(_T("SCdesc")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("SCdesc")));
}
pRecSCon->Close();
return true;
}
void CScript3D::AdjustRecListColumn(int iAR, CListCtrl& sptConListInfo)
{
if (iAR < 1)
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("解析设备数组类型错误"));
else
MessageBoxEx(NULL, _T("Parser device array type error."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return;
}
std::vector<int> vtListOrder;
vtListOrder.clear();
switch (iAR)
{
case 22:
case 23:
case 25:
case 26:
vtListOrder.push_back(2);
vtListOrder.push_back(4);
vtListOrder.push_back(5);
vtListOrder.push_back(3);
break;
case 24:
case 27:
vtListOrder.push_back(3);
vtListOrder.push_back(2);
vtListOrder.push_back(4);
vtListOrder.push_back(5);
break;
default:
vtListOrder.push_back(2);
vtListOrder.push_back(3);
vtListOrder.push_back(4);
vtListOrder.push_back(5);
break;
}
//根据vtListOrder来进行列的顺序的更改
CHeaderCtrl* pHeaderCtrl = sptConListInfo.GetHeaderCtrl();
if (pHeaderCtrl != NULL)
{
int nColumnCount = pHeaderCtrl->GetItemCount();
LPINT pnOrder = (LPINT) malloc(nColumnCount*sizeof(int));
ASSERT(pnOrder != NULL);
//获得列顺序到数组
sptConListInfo.GetColumnOrderArray(pnOrder, nColumnCount);
if (nColumnCount < 6)
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("解析列表列错误"));
else
MessageBoxEx(NULL, _T("Parser list column error."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
free(pnOrder);
return;
}
int temp ;
for (int i = 0; i < vtListOrder.size(); i++)
{
temp = vtListOrder[i];
pnOrder[i+2] =temp;
}
//设置列顺序
sptConListInfo.SetColumnOrderArray(nColumnCount, pnOrder);
free(pnOrder);
}
}