// DialCombine3DTask.cpp : implementation file // #include "stdafx.h" #include "geomative.h" #include "DialCombine3DTask.h" #include #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 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(); }