709 lines
28 KiB
C++
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();
|
|
}
|