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

709 lines
28 KiB
C++

// DialCombine3DTask.cpp : implementation file
//
#include "stdafx.h"
#include "geomative.h"
#include "DialCombine3DTask.h"
#include <vector>
#include "FileOperTools.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern int g_iLanguage;
extern SYSTEMTIME g_sysCurTime;
extern HHOOK hHook;
extern LRESULT __stdcall CBTHookProc(long nCode, WPARAM wParam, LPARAM lParam);
extern void SplitterString(CStringArray &szArray,const CString& szSource, const CString& szSplitter);
extern int g_iUILanguage;
/////////////////////////////////////////////////////////////////////////////
// CDialCombine3DTask dialog
CDialCombine3DTask::CDialCombine3DTask(_ConnectionPtr& pConnection, DWORD dwProID, CWnd* pParent /*=NULL*/)
: CDialog(CDialCombine3DTask::IDD, pParent)
{
//{{AFX_DATA_INIT(CDialCombine3DTask)
m_strTaskName = _T("");
//}}AFX_DATA_INIT
m_pConnection = pConnection;
m_dwProID = dwProID;
m_dwTdID = 0;
m_iSptType = 0;
m_iTestType = 0;
}
void CDialCombine3DTask::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDialCombine3DTask)
DDX_Control(pDX, IDC_COMBO_COORDINATE, m_cmbCoordinate);
DDX_Control(pDX, IDC_LIST_NEED_SELECT, m_ctrlNeedSelList);
DDX_Control(pDX, IDC_LIST_NEED_COMBINE, m_ctrlCombineList);
DDX_Text(pDX, IDC_EDIT_TASK_NAME, m_strTaskName);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDialCombine3DTask, CDialog)
//{{AFX_MSG_MAP(CDialCombine3DTask)
ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
ON_BN_CLICKED(IDC_BUTTON_REMOVE, OnButtonRemove)
ON_WM_CLOSE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDialCombine3DTask message handlers
BOOL CDialCombine3DTask::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_ctrlNeedSelList.SetExtendedStyle(LVS_EX_FULLROWSELECT |LVS_EX_HEADERDRAGDROP
| LVS_EX_ONECLICKACTIVATE | LVS_EX_GRIDLINES |LVS_EX_MULTIWORKAREAS );
m_ctrlCombineList.SetExtendedStyle(LVS_EX_FULLROWSELECT |LVS_EX_HEADERDRAGDROP
| LVS_EX_ONECLICKACTIVATE | LVS_EX_GRIDLINES |LVS_EX_MULTIWORKAREAS );
if (LANG_ZHCN == g_iUILanguage)
{
SetWindowText(_T("合并任务"));
GetDlgItem(IDC_STATIC_ROLL_TASK_LIST)->SetWindowText(_T("滚动任务列表"));
GetDlgItem(IDC_STATIC_MEGERED_TASK_LIST)->SetWindowText(_T("进行合并任务列表"));
GetDlgItem(IDC_STATIC_CMB_TASK_NAME)->SetWindowText(_T("任务名称:"));
GetDlgItem(IDC_STATIC_CMB_DIRECT)->SetWindowText(_T("合并方向:"));
GetDlgItem(IDC_BUTTON_ADD)->SetWindowText(_T("增加"));
GetDlgItem(IDOK)->SetWindowText(_T("合并"));
GetDlgItem(IDC_BUTTON_REMOVE)->SetWindowText(_T("移除"));
m_ctrlNeedSelList.InsertColumn(0, _T("任务名称"), LVCFMT_LEFT, 150);
m_ctrlNeedSelList.InsertColumn(1, _T("脚本名称"), LVCFMT_LEFT, 100);
m_ctrlNeedSelList.InsertColumn(2, _T("脚本类型"), LVCFMT_LEFT, 80);
m_ctrlNeedSelList.InsertColumn(3, _T("测试方法"), LVCFMT_LEFT, 100);
m_ctrlNeedSelList.InsertColumn(4, _T("网格大小"), LVCFMT_LEFT, 80);
m_ctrlNeedSelList.InsertColumn(5, _T("电极数"), LVCFMT_LEFT, 100);
m_ctrlNeedSelList.InsertColumn(6, _T("测点数"), LVCFMT_LEFT, 100);
m_ctrlCombineList.InsertColumn(0, _T("任务名称"), LVCFMT_LEFT, 150);
m_ctrlCombineList.InsertColumn(1, _T("脚本名称"), LVCFMT_LEFT, 100);
m_ctrlCombineList.InsertColumn(2, _T("脚本类型"), LVCFMT_LEFT, 80);
m_ctrlCombineList.InsertColumn(3, _T("测试方法"), LVCFMT_LEFT, 100);
m_ctrlCombineList.InsertColumn(4, _T("网格大小"), LVCFMT_LEFT, 80);
m_ctrlCombineList.InsertColumn(5, _T("电极数"), LVCFMT_LEFT, 100);
m_ctrlCombineList.InsertColumn(6, _T("测点数"), LVCFMT_LEFT, 100);
}
else
{
m_ctrlNeedSelList.InsertColumn(0, _T("Task name"), LVCFMT_LEFT, 150);
m_ctrlNeedSelList.InsertColumn(1, _T("Script name"), LVCFMT_LEFT, 100);
m_ctrlNeedSelList.InsertColumn(2, _T("Script type"), LVCFMT_LEFT, 80);
m_ctrlNeedSelList.InsertColumn(3, _T("Test method"), LVCFMT_LEFT, 100);
m_ctrlNeedSelList.InsertColumn(4, _T("Grid size"), LVCFMT_LEFT, 80);
m_ctrlNeedSelList.InsertColumn(5, _T("Electrode number"), LVCFMT_LEFT, 100);
m_ctrlNeedSelList.InsertColumn(6, _T("Point number"), LVCFMT_LEFT, 100);
m_ctrlCombineList.InsertColumn(0, _T("Task name"), LVCFMT_LEFT, 150);
m_ctrlCombineList.InsertColumn(1, _T("Script name"), LVCFMT_LEFT, 100);
m_ctrlCombineList.InsertColumn(2, _T("Script type"), LVCFMT_LEFT, 80);
m_ctrlCombineList.InsertColumn(3, _T("Test method"), LVCFMT_LEFT, 100);
m_ctrlCombineList.InsertColumn(4, _T("Grid size"), LVCFMT_LEFT, 80);
m_ctrlCombineList.InsertColumn(5, _T("Electrode number"), LVCFMT_LEFT, 100);
m_ctrlCombineList.InsertColumn(6, _T("Point number"), LVCFMT_LEFT, 100);
}
((CEdit*)(GetDlgItem(IDC_EDIT_TASK_NAME)))->SetLimitText(50);
m_cmbCoordinate.ResetContent();
m_cmbCoordinate.AddString(_T("X"));
m_cmbCoordinate.AddString(_T("Y"));
InitalTaskInfo();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CDialCombine3DTask::OnButtonAdd()
{
// TODO: Add your control notification handler code here
POSITION pos = m_ctrlNeedSelList.GetFirstSelectedItemPosition();
if (NULL == pos)
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("请先选择数据."));
else
MessageBoxEx(NULL, _T("Please selected data firstly."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return;
}
while(pos)
{
int iItem = m_ctrlNeedSelList.GetNextSelectedItem(pos);
int iCmbListIndex = m_ctrlCombineList.GetItemCount();
m_ctrlCombineList.InsertItem(iCmbListIndex, m_ctrlNeedSelList.GetItemText(iItem, 0));
m_ctrlCombineList.SetItemData(iCmbListIndex, m_ctrlNeedSelList.GetItemData(iItem));
m_ctrlCombineList.SetItemText(iCmbListIndex, 1, m_ctrlNeedSelList.GetItemText(iItem, 1));
m_ctrlCombineList.SetItemText(iCmbListIndex, 2, m_ctrlNeedSelList.GetItemText(iItem, 2));
m_ctrlCombineList.SetItemText(iCmbListIndex, 3, m_ctrlNeedSelList.GetItemText(iItem, 3));
m_ctrlCombineList.SetItemText(iCmbListIndex, 4, m_ctrlNeedSelList.GetItemText(iItem, 4));
m_ctrlCombineList.SetItemText(iCmbListIndex, 5, m_ctrlNeedSelList.GetItemText(iItem, 5));
m_ctrlCombineList.SetItemText(iCmbListIndex, 6, m_ctrlNeedSelList.GetItemText(iItem, 6));
}
}
void CDialCombine3DTask::OnButtonRemove()
{
// TODO: Add your control notification handler code here
UINT iSelItemIndex = (int)VAL_ZERO;
while (m_ctrlCombineList.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED) != -1) //删除CListCtrl选中的多行
{
iSelItemIndex = m_ctrlCombineList.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);
m_ctrlCombineList.DeleteItem(iSelItemIndex);
}
}
void CDialCombine3DTask::OnOK()
{
// TODO: Add extra validation here
if (!CheckValuekValid())
{
return;
}
if (!CombineTask())
{
return;
}
CDialog::OnOK();
}
void CDialCombine3DTask::InitalTaskInfo()
{
_RecordsetPtr pRecTd = NULL;
_RecordsetPtr pRecCm = NULL;
CString szSql = _T("");
pRecTd.CreateInstance(_uuidof(Recordset));
pRecCm.CreateInstance(_uuidof(Recordset));
try
{
szSql.Format(_T("select Clabel from cm where Cname = '%s' and Cvalue = %d and LANG = %d"),_T("stype"), 2, g_iLanguage);
pRecCm->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText);
CString strStype = _T("");
if (pRecCm->GetRecordCount() > 0)
{
strStype = (LPCTSTR)(_bstr_t)pRecCm->GetCollect(_T("Clabel"));
}
pRecCm->Close();
CStringArray strArrType;
strArrType.RemoveAll();
strArrType.Add(_T("Resistivity"));
strArrType.Add(_T("Induced polarization"));
strArrType.Add(_T("Self-potential"));
szSql.Format(_T("select * from td where CRtime > 0 and Stype = 2 and TZID in (select ID from tz where PRID = %d)"),m_dwProID);
pRecTd->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText);
int iIndex = 0;
while ((short)VAL_ZERO == pRecTd->adoEOF)
{
m_ctrlNeedSelList.InsertItem(iIndex, (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("TDname")));
m_ctrlNeedSelList.SetItemText(iIndex, 1, pRecTd->GetCollect(_T("Sname")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Sname")));
m_ctrlNeedSelList.SetItemText(iIndex, 2, strStype);
int iType = pRecTd->GetCollect(_T("Ttype")).iVal;
if (iType >= 0 && iType < 3)
{
m_ctrlNeedSelList.SetItemText(iIndex, 3, strArrType.GetAt(iType));
}
m_ctrlNeedSelList.SetItemText(iIndex, 4, pRecTd->GetCollect(_T("rect")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("rect")));
m_ctrlNeedSelList.SetItemText(iIndex, 5, pRecTd->GetCollect(_T("Eamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Eamount")));
m_ctrlNeedSelList.SetItemText(iIndex, 6, pRecTd->GetCollect(_T("TPamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("TPamount")));
DWORD dwID = pRecTd->GetCollect(_T("ID")).lVal;
m_ctrlNeedSelList.SetItemData(iIndex, dwID);
iIndex++;
pRecTd->MoveNext();
}
pRecTd->Close();
}
catch (_com_error e)
{
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
AfxMessageBox((LPCTSTR)e.Description());
pRecTd->Close();
}
}
bool CDialCombine3DTask::CheckValuekValid()
{
if (!UpdateData(TRUE))
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("撤回数据失败."));
else
MessageBoxEx(NULL, _T("Retire data failed."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return false;
}
if (m_strTaskName.IsEmpty())
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("请输入任务名."));
else
MessageBoxEx(NULL, _T("Please input task name firstly."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return false;
}
if (-1 == m_cmbCoordinate.GetCurSel())
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("请选择合并方向."));
else
MessageBoxEx(NULL, _T("Please select combine direction."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return false;
}
if (0 == m_ctrlCombineList.GetItemCount())
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("请添加任务到合并任务列表里去."));
else
MessageBoxEx(NULL, _T("Please add task into merge task list."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return false;
}
return true;
}
bool CDialCombine3DTask::CombineTask()
{
_RecordsetPtr pRecTd = NULL;
_CommandPtr pCmdOperTd = NULL;
CString strSql = _T("");
try
{
int iXGridSize = 0;
int iStartPole = 0;
CStringArray strArr;
CString strVal = _T("");
pRecTd.CreateInstance(_uuidof(Recordset));
pCmdOperTd.CreateInstance(_uuidof(Command));
pCmdOperTd->ActiveConnection = m_pConnection;
m_pConnection->BeginTrans();
DWORD dwTdChanelID = 0;
DWORD dwTdID = 0;
if (!CombineTaskTd(dwTdChanelID))
{
m_pConnection->RollbackTrans();
return false;
}
int iTsn = 0, iTotalEAmount = 0;
std::vector<int> vtGridSize;
int iPreEAMount = 0;
vtGridSize.clear();
for (int i = 0; i < m_ctrlCombineList.GetItemCount(); i++)
{
strArr.RemoveAll();
strVal.Empty();
strVal = m_ctrlCombineList.GetItemText(i, 4);
SplitterString(strArr, strVal, _T(","));
if ( 4 != strArr.GetSize())
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("合并任务列表中任务的网格不一致."));
else
MessageBoxEx(NULL, _T("The grid size of task in the list is inconsistent."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
m_pConnection->RollbackTrans();
return false;
}
vtGridSize.push_back((atoi(strArr.GetAt(2))+1) * (atoi(strArr.GetAt(3))+1));
//计算起始电极序号
if (0 != i)
{
iStartPole += vtGridSize[i-1];
}
strSql.Empty();
strSql.Format(_T("select * from td3dcon where TCHID in (select ID from tdchannel where TDID = %d and CHnumber = 1) order by TSN"),
m_ctrlCombineList.GetItemData(i));
pRecTd->Open(strSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText);
int iTmpEamount = pRecTd->GetRecordCount();
iTotalEAmount += iTmpEamount;
//在合并三维任务时,VRAWDATA和IRAWDATA不需要进行导入到合并的任务中去,因为合并任务只是为了导出DAT进行反演
SHORT shC1 = 0, shC2 = 0, shP1 = 0, shP2 = 0, shN = 0;
float fK = 0, fI = 0, fV = 0, fR0 = 0, fSP =0;
float fR0_LC = 0, fM0_LC = 0;
BOOL bUse;
while ((short)VAL_ZERO == pRecTd->adoEOF)
{
shC1 = pRecTd->GetCollect(_T("C1")).iVal;
if (shC1 > 0)
{
shC1 += iStartPole;
}
shC2 = pRecTd->GetCollect(_T("C2")).iVal;
if (shC2 > 0)
{
shC2 += iStartPole;
}
shP1 = pRecTd->GetCollect(_T("P1")).iVal;
if (shP1 > 0)
{
shP1 += iStartPole;
}
shP2 = pRecTd->GetCollect(_T("P2")).iVal;
if (shP2 > 0)
{
shP2 += iStartPole;
}
shN = pRecTd->GetCollect(_T("N")).iVal;
fK = (float)pRecTd->GetCollect(_T("K")).fltVal;
fI = (float)pRecTd->GetCollect(_T("I")).fltVal;
fV = (float)pRecTd->GetCollect(_T("V")).fltVal;
fR0 = (float)pRecTd->GetCollect(_T("R0")).fltVal;
fSP = (float)pRecTd->GetCollect(_T("SP")).fltVal;
fR0_LC = (float)pRecTd->GetCollect(_T("R0_LC")).fltVal;
fM0_LC = (float)pRecTd->GetCollect(_T("M0_LC")).fltVal;
bUse = pRecTd->GetCollect(_T("bUse")).bVal;
strSql.Empty();
strSql.Format(_T("insert into td3dcon(TCHID,TSN,C1,C2,P1,P2,N,K,I,V,R0,SP,bUse,R0_LC,M0_LC) values(%u,%d,%d,%d,%d,%d,%d,%f,%f,%f,%f,%f,%d,%f,%f)"),
dwTdChanelID, ++iTsn,
shC1,
shC2,
shP1,
shP2,
shN,
fK,
fI,
fV,
fR0,
fSP,
bUse,
fR0_LC,
fM0_LC);
pCmdOperTd->CommandText = strSql.AllocSysString();
pCmdOperTd->Execute(NULL, NULL, adCmdText);
pRecTd->MoveNext();
}
pRecTd->Close();
//如果是激电数据的话,需要相应的属性表
strSql.Empty();
strSql.Format(_T("insert into td_spc_attr(TCHID,TSN,THL,D,r,TWCNT,TW0Index,TW1Index,TW2Index,TW3Index,TW4Index,TW5Index,TW6Index,TW7Index,TW8Index,TW9Index) "
"select %d, TSN+%d,THL,D,r,TWCNT,TW0Index,TW1Index,TW2Index,TW3Index,TW4Index,TW5Index,TW6Index,TW7Index,TW8Index,TW9Index from td_spc_attr "
"where TCHID in (select ID from tdchannel where TDID = %d and CHnumber = 1) order by TSN"),
dwTdChanelID,
iPreEAMount,
m_ctrlCombineList.GetItemData(i));
pCmdOperTd->CommandText = strSql.AllocSysString();
pCmdOperTd->Execute(NULL, NULL, adCmdText);
iPreEAMount += iTmpEamount;
}
//并且取第一个任务的时窗信息作为整个合并任务的时窗信息
strSql.Empty();
strSql.Format(_T("insert into ac (TDID,M0ST, M0TW, M1ST, M1TW, M2ST, M2TW, M3ST, M3TW, M4ST, M4TW, M5ST, M5TW, M6ST, M6TW, "
"M7ST, M7TW, M8ST, M8TW, M9ST, M9TW, M10ST, M10TW, M11ST, M11TW, M12ST, M12TW, M13ST, M13TW, M14ST, M14TW, "
"M15ST, M15TW, M16ST, M16TW, M17ST, M17TW, M18ST, M18TW, M19ST, M19TW) select %d, M0ST, M0TW, M1ST, M1TW,"
"M2ST, M2TW, M3ST, M3TW, M4ST, M4TW, M5ST, M5TW, M6ST, M6TW, M7ST, M7TW, M8ST, M8TW, M9ST, M9TW, M10ST, M10TW,"
"M11ST, M11TW, M12ST, M12TW, M13ST, M13TW, M14ST, M14TW, M15ST, M15TW, M16ST, M16TW, M17ST, M17TW, M18ST, M18TW,"
"M19ST, M19TW from ac where TDID = %d"),
m_dwTdID,
m_ctrlCombineList.GetItemData(0));
pCmdOperTd->CommandText = strSql.AllocSysString();
pCmdOperTd->Execute(NULL, NULL, adCmdText);
//更新td表中的测点数
strSql.Empty();
strSql.Format(_T("update td set TPamount = %d where ID = %d"), iTotalEAmount, m_dwTdID);
pCmdOperTd->CommandText = strSql.AllocSysString();
pCmdOperTd->Execute(NULL, NULL, adCmdText);
m_pConnection->CommitTrans();
return true;
}
catch (_com_error e)
{
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
AfxMessageBox((LPCTSTR)e.Description());
m_pConnection->RollbackTrans();
CString strErr = _T("");
strErr.Format(_T("CombineTask failed.Sql = %s"),strSql);
CFileOperTools::GetInstance()->WriteComLog(strErr);
return false;
}
}
bool CDialCombine3DTask::CombineTaskTd(DWORD &dwTdChID)
{
_RecordsetPtr pRecTd = NULL;
_RecordsetPtr pRecTdChanel = NULL;
_CommandPtr pCmdOperTd = NULL;
CString strSql = _T("");
CString strErr = _T("");
try
{
int iXGridSize = 0;
int iYGridSize = 0;
CString strVal = _T("");
CStringArray strArray;
int iTotalYGridSize = 0;
int iTotalXGridSize = 0;
DWORD dwID = 0;
for (int i = 0; i < m_ctrlCombineList.GetItemCount(); i++)
{
strVal = m_ctrlCombineList.GetItemText(i, 4);
if (strVal.IsEmpty())
{
MessageBoxEx(NULL, _T("The grid size of task can not be empty."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return false;
}
strArray.RemoveAll();
SplitterString(strArray, strVal, _T(","));
//在这里得到的rect的格式为0,0,9,3 以10*4的矩阵来说
if (4 != strArray.GetSize())
{
MessageBoxEx(NULL, _T("The grid size of task error."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return false;
}
if (0 == i)
{
iXGridSize = atoi(strArray.GetAt(2))+1;
iYGridSize = atoi(strArray.GetAt(3)) + 1;
dwID = m_ctrlCombineList.GetItemData(i);
}
else
{
//获取哪个方向合并
if (1 == m_cmbCoordinate.GetCurSel())
{
//Y方向合并X不变,如果XGridSize不相等,则报错
if (iXGridSize != (atoi(strArray.GetAt(2)) + 1))
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("合并任务列表中任务的网格X不一致."));
else
MessageBoxEx(NULL, _T("The grid size of task in the list is inconsistent."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return false;
}
}
else
{
//X方向合并Y不变,如果YGridSize不相等,则报错
if (iYGridSize != (atoi(strArray.GetAt(3)) + 1))
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("合并任务列表中任务的网格Y不一致."));
else
MessageBoxEx(NULL, _T("The grid size of task in the list is inconsistent."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return false;
}
}
}
iTotalYGridSize += (atoi(strArray.GetAt(3))+1);
iTotalXGridSize += (atoi(strArray.GetAt(2)) + 1);
}
strVal.Empty();
//合并后的
//如果是按照Y轴来进行合并的,那么矩阵大小需要进行颠倒
UINT32 dwEamount = 0;
if (1 == m_cmbCoordinate.GetCurSel())
{
//strVal.Format(_T("0,0,%d,%d"), iTotalYGridSize - 1, iXGridSize - 1);
//Y不变,X累加
strVal.Format(_T("0,0,%d,%d"), iXGridSize - 1, iTotalYGridSize - 1);
OutputDebugString(_T("Y方向合并:") + strVal + _T("\n"));
dwEamount = iXGridSize*iTotalYGridSize;
}
else
{
//strVal.Format(_T("0,0,%d,%d"), iXGridSize - 1, iTotalYGridSize - 1);
//X不变,Y累加
strVal.Format(_T("0,0,%d,%d"), iTotalXGridSize - 1, iYGridSize - 1);
OutputDebugString(_T("X方向合并:")+strVal + _T("\n"));
dwEamount = iTotalXGridSize*iYGridSize;
}
CGUCodeCreator guCodeCreator;
CString strSSCN = guCodeCreator.GenerateGUIDCode();
CString strTaskCN = _T("");
strTaskCN.Format(_T("ERT%04d%02d%02d%02d%02d%02d"),g_sysCurTime.wYear, g_sysCurTime.wMonth,
g_sysCurTime.wDay,g_sysCurTime.wHour, g_sysCurTime.wMinute, g_sysCurTime.wSecond);
CString strSSName = _T("CombineTask");
pRecTd.CreateInstance(_uuidof(Recordset));
pRecTdChanel.CreateInstance(_uuidof(Recordset));
pCmdOperTd.CreateInstance(_uuidof(Command));
pCmdOperTd->ActiveConnection = m_pConnection;
strSql.Empty();
strSql.Format(_T("select * from td where ID = %d"), dwID);
pRecTd->Open(strSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText);
if (0 == pRecTd->GetRecordCount())
{
strErr.Empty();
strErr.Format(_T("Query task(%d) information failed."),dwID);
MessageBoxEx(NULL, strErr, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
pRecTd->Close();
return false;
}
CString strRectLoc = _T("");
strRectLoc = pRecTd->GetCollect(_T("rect_loc")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("rect_loc"));
CString strDay = _T(""), strTime = _T("");
strDay.Format(_T("%d-%d-%d"), g_sysCurTime.wYear, g_sysCurTime.wMonth, g_sysCurTime.wDay);
strTime.Format(_T("%02d:%02d:%02d"), g_sysCurTime.wHour, g_sysCurTime.wMinute, g_sysCurTime.wSecond);
//获取AR
strSql.Empty();
strSql.Format(_T("select * from tdchannel where TDID = %d and CHnumber = 1"),dwID);
pRecTdChanel->Open(strSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText);
if (0 == pRecTdChanel->GetRecordCount())
{
strErr.Empty();
strErr.Format(_T("Query task chanel(%d) information failed."),dwID);
MessageBoxEx(NULL, strErr, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
pRecTd->Close();
pRecTdChanel->Close();
return false;
}
int iAR = pRecTdChanel->GetCollect(_T("AR")).iVal;
pRecTdChanel->Close();
CString strTlocation = _T("");
strTlocation.Format(_T("%s"),pRecTd->GetCollect(_T("Tlocation")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Tlocation")));
DWORD dwDeID = pRecTd->GetCollect(_T("DEID")).vt == VT_NULL ? 0 : pRecTd->GetCollect(_T("DEID")).lVal;
CString strDesn = _T("");
strDesn.Format(_T("%s"),pRecTd->GetCollect(_T("DESN")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("DESN")));
DWORD dwTZID = pRecTd->GetCollect(_T("TZID")).vt == VT_NULL ? 0 : pRecTd->GetCollect(_T("TZID")).lVal;
DWORD dwSCID = (pRecTd->GetCollect(_T("SCID")).vt == VT_NULL) ? 0 : pRecTd->GetCollect(_T("SCID")).lVal;
m_iSptType = pRecTd->GetCollect(_T("Stype")).vt == VT_NULL ? 0 : pRecTd->GetCollect(_T("Stype")).iVal;
m_iTestType = pRecTd->GetCollect(_T("Ttype")).vt == VT_NULL ? 0 : pRecTd->GetCollect(_T("Ttype")).iVal;
SHORT iTTmode = pRecTd->GetCollect(_T("Tmode")).vt == VT_NULL ? 0 : pRecTd->GetCollect(_T("Tmode")).iVal;
SHORT iCHamount = pRecTd->GetCollect(_T("CHamount")).vt == VT_NULL ? 0 : pRecTd->GetCollect(_T("CHamount")).iVal;
SHORT iN = pRecTd->GetCollect(_T("N")).vt == VT_NULL ? 0 : pRecTd->GetCollect(_T("N")).iVal;
SHORT iTRwave = pRecTd->GetCollect(_T("TRwave")).vt == VT_NULL ? 0 : pRecTd->GetCollect(_T("TRwave")).iVal;
SHORT iTRfrequency = pRecTd->GetCollect(_T("TRfrequency")).vt == VT_NULL ? 0 : pRecTd->GetCollect(_T("TRfrequency")).iVal;
SHORT iIfrequency = pRecTd->GetCollect(_T("Ifrequency")).vt == VT_NULL ? 0 : pRecTd->GetCollect(_T("Ifrequency")).iVal;
SHORT iSAfrequency = pRecTd->GetCollect(_T("SAfrequency")).vt == VT_NULL ? 0 : pRecTd->GetCollect(_T("SAfrequency")).iVal;
SHORT iClayout = pRecTd->GetCollect(_T("Clayout")).vt == VT_NULL ? 0 : pRecTd->GetCollect(_T("Clayout")).iVal;
CString strEspace = pRecTd->GetCollect(_T("Espace")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Espace"));
CString strEdistance = pRecTd->GetCollect(_T("Edistance")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("Edistance"));
//如果是按照Y轴来进行合并的,那么对电极间距需要进行颠倒
/*if (1 == m_cmbCoordinate.GetCurSel())
{
CStringArray strArrEdistance;
strArrEdistance.RemoveAll();
SplitterString(strArrEdistance, strEdistance, _T(","));
if (2 != strArrEdistance.GetSize())
{
MessageBoxEx(NULL, _T("Parser edistance error."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
}
else
{
float fXEdis = atof(strArrEdistance.GetAt(0));
float fYEdis = atof(strArrEdistance.GetAt(1));
strEdistance.Empty();
strEdistance.Format(_T("%.2f,%.2f"), fYEdis, fXEdis);
}
}*/
SHORT iWeather = pRecTd->GetCollect(_T("weather")).vt == VT_NULL ? 0 : pRecTd->GetCollect(_T("weather")).iVal;
SHORT iWDIR = pRecTd->GetCollect(_T("WDIR")).vt == VT_NULL ? 0 : pRecTd->GetCollect(_T("WDIR")).iVal;
float fTemperature = pRecTd->GetCollect(_T("temperature")).vt == VT_NULL ? 0 : pRecTd->GetCollect(_T("temperature")).fltVal;
float fHeight = pRecTd->GetCollect(_T("height")).vt == VT_NULL ? 0 : pRecTd->GetCollect(_T("height")).fltVal;
float fHumidity = pRecTd->GetCollect(_T("humidity")).vt == VT_NULL ? 0 : pRecTd->GetCollect(_T("humidity")).fltVal;
SHORT iCRtime = pRecTd->GetCollect(_T("CRtime")).vt == VT_NULL ? 0 : pRecTd->GetCollect(_T("CRtime")).iVal;
CString strPM = pRecTd->GetCollect(_T("PM")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("PM"));
CString strOP = pRecTd->GetCollect(_T("OP")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("OP"));
CString strQA = pRecTd->GetCollect(_T("QA")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecTd->GetCollect(_T("QA"));
//在这里测点总数留待后面插入具体数据后进行更新
strSql.Empty();
strSql.Format(_T("insert into td(TDname,TDCN,Tlocation,DEID,DESN,TZID,SCID,SCCN,Sname,Stype,Ttype,Tmode,Eamount,TPamount,CHamount,N,TRwave,TRfrequency,Ifrequency,"
"SAfrequency,Clayout,Espace,Edistance,weather,WDIR,temperature,height,humidity,Cdate,Ctime,Tdate,Ttime,Rdirection,CRtime,PM,OP,QA,rect,rect_loc,InitiEamount) "
"values('%s','%s','%s',%u,'%s',%u,%u,'%s','%s',%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,'%s','%s',%d,%d,%.2f,%.2f,%.2f,#%s#,#%s#,#%s#,#%s#,%d,%d,'%s','%s','%s','%s','%s',%d)"),
m_strTaskName,
strTaskCN,
strTlocation,
dwDeID,
strDesn,
dwTZID,
dwSCID,
strSSCN,
strSSName,
m_iSptType,
m_iTestType,
iTTmode,
dwEamount,
0,
iCHamount,
iN,
iTRwave,
iTRfrequency,
iIfrequency,
iSAfrequency,
iClayout,
strEspace,
strEdistance,
iWeather,
iWDIR,
fTemperature,
fHeight,
fHumidity,
strDay,
strTime,
strDay,
strTime,
m_cmbCoordinate.GetCurSel()+1,
iCRtime,
strPM,
strOP,
strQA,
strVal,
strRectLoc,
0);
pCmdOperTd->CommandText = strSql.AllocSysString();
pCmdOperTd->Execute(NULL, NULL, adCmdText);
//获取插入任务的ID
pRecTd->Close();
strSql = _T("select max(ID) as ID from td");
pRecTd->Open(strSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText);
m_dwTdID = pRecTd->GetCollect(_T("ID")).lVal;
//插入TdChanel
strSql.Empty();
strSql.Format(_T("insert into tdchannel(TDID,CHnumber,AR) values(%u,%d,%d)"), m_dwTdID, 1, iAR);
pCmdOperTd->CommandText = strSql.AllocSysString();
pCmdOperTd->Execute(NULL, NULL, adCmdText);
//获取TdChanel的ID
strSql = _T("select max(ID) as ID from tdchannel");
pRecTdChanel->Open(strSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText);
dwTdChID = pRecTdChanel->GetCollect(_T("ID")).lVal;
pRecTdChanel->Close();
pRecTd->Close();
return true;
}
catch(_com_error e)
{
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL);
AfxMessageBox((LPCTSTR)e.Description());
pRecTd->Close();
pRecTdChanel->Close();
strErr.Empty();
strErr.Format(_T("CombineTaskTD failed. strSql = %s"),strSql);
CFileOperTools::GetInstance()->WriteComLog(strErr);
return false;
}
}
void CDialCombine3DTask::OnClose()
{
// TODO: Add your message handler code here and/or call default
CDialog::OnCancel();
}