| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435 |
- /**************************************************************************************************
- 版本所有(C), 2020-2022, 北京普达迪泰
- ***************************************************************************************************
- 文 件 名: StaticTaskThread.h
- 功能描述: IDPMS静态任务处理
- 版 本 号: 1.00初版
- 作 者: HYF
- 生成日期; 2021-12-20
- 最近修改:
- 函数列表:
- 修改历史:
- 1.日 期 :2021-12-20
- 作 者 : HYF
- 修改内容 : 创建文件
- **************************************************************************************************/
- #include "pch.h"
- #include "StaticTaskThread.h"
- #include "EquipDataManager.h"
- #include "EquipDataCircleManager.h"
- #include "EquipDataPlaneManager.h"
- #include "EquipDataLineManager.h"
- #include "EquipDataPointManager.h"
- #include "TaskManager.h"
- #include "IDPMSComm.h"
- #include "StaticData.h"
- CString g_szTaskPrjFolderName(_T(""));
- IMPLEMENT_DYNCREATE(StaticTaskThread, CUIThread)
- BEGIN_MESSAGE_MAP(StaticTaskThread, CWinThread)
- // {{AFX_MSG_MAP(CARTDevSearchTask)
- // NOTE - the ClassWizard will add and remove mapping macros here.
- ON_THREAD_MESSAGE(WM_STATIC, OnStatic)
- ON_THREAD_MESSAGE(WM_STATIC_DATA, OnStaticData)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- StaticTaskThread::StaticTaskThread(void)
- {
-
- }
- StaticTaskThread::~StaticTaskThread(void)
- {
- }
- BOOL StaticTaskThread::InitInstance()
- {
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :GetPhotoPath
- 功能描述 :获取最新像片路径
- 输入参数 :略
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- BOOL StaticTaskThread::GetPhotoPath(CString &szTargetPath)
- {
- CString szPhotoDir = AppConfig::GetString(_T("Directory"), _T("PhotoDir"));
- if (szPhotoDir.IsEmpty()) return FALSE;
- CFileFind finder;
- CString szSearchDir;
- szSearchDir.Format("%s%s",szPhotoDir, _T("\\*.*"));
- BOOL bFound = finder.FindFile(szSearchDir);
- CTime time0 = 0;
- CString szTargetDir;
- while (bFound) {
- bFound = finder.FindNextFile();
- CString szPath = finder.GetFilePath();
- if (finder.IsDirectory() && !finder.IsDots()) {
- CString szDirName = finder.GetFileName();
- CFileStatus fileStatus;
-
- CFile::GetStatus(szPhotoDir + "\\" + szDirName, fileStatus);
- CTime time1 = fileStatus.m_ctime;
- if (time0 < time1) {
- szTargetDir = szDirName;
- time0 = time1;
- }
- }
- }
-
- if (szTargetDir.IsEmpty()) return FALSE;
- szTargetPath.Append(szPhotoDir);
- szTargetPath.Append(_T("\\"));
- szTargetPath.Append(szTargetDir);
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :OnStatic
- 功能描述 :静态零位测量
- 输入参数 :略
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- BOOL StaticTaskThread::SendCommandAndAckHandle(IDPMSComm *&pComm, CString& szCommand, DMSResponse *&pRes) {
- int iRet = pComm->SendCommand(szCommand, pRes);
- if (iRet == -1) {
- this->PostMsg(WM_START_IDPMS, pRes);
- delete pComm;
- return FALSE;
- }
- else if (iRet == 0) {
- this->PostMsg(WM_FAILURE, pRes);
- pComm->Close();
- delete pComm;
- pComm = NULL;
- return FALSE;
- }
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :OnStatic
- 功能描述 :静态零位测量
- 输入参数 :略
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- BOOL StaticTaskThread::SendCommandAndAckHandle(IDPMSComm *&pComm, CString& szCommand, LPCTSTR szEndFlag, DMSResponse *&pRes) {
- int iRet = pComm->SendCommand(szCommand, pRes, szEndFlag);
- if (iRet == -1) {
- this->PostMsg(WM_START_IDPMS, pRes);
- delete pComm;
- return FALSE;
- }
- else if (iRet == 0) {
- this->PostMsg(WM_FAILURE, pRes);
- pComm->Close();
- delete pComm;
- pComm = NULL;
- return FALSE;
- }
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :OnStatic
- 功能描述 :静态零位测量
- 输入参数 :略
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- void StaticTaskThread::OnStatic(WPARAM wParam,LPARAM lParam)
- {
- CString szCommand;
- BOOL bRet = TRUE;
- DMSResponse *pRes = NULL;
- CString szPhotoPath;
- // 获取像片路径
- bRet = this->GetPhotoPath(szPhotoPath);
- if (!bRet) {
- LOG::E(_T("像片路径不存在"));
- this->PostMsg(WM_FAILURE, pRes);
- return;
- }
- // IDPMS通讯器
- IDPMSComm *pComm = new IDPMSComm();
- bRet = pComm->Open();
- if (!bRet) {
- this->PostMsg(WM_START_IDPMS, pRes);
- delete pComm;
- return;
- }
- // 1.删除当前工程
- //szCommand.Format("idpms-cd:set0003");
- //bRet = SendCommandAndAckHandle(pComm, szCommand, pRes);
- //bret = sendcommandandackhandle(pcomm, szcommand, pres);
- // if (!bRet) return ;
-
- // 2.删除之前的工程文件
- CString szCameraFolder;
- CString szPrjFolder;
- szPrjFolder.Format("%s_%s_单相机", m_szEquipTypeCode, m_szEquipCode);
- szCameraFolder.Format("C:\\PD\\IDPMS\\工程\\%s_%s_单相机", m_szEquipTypeCode, m_szEquipCode);
- bRet = Utils::DeleteFolder(szCameraFolder);
- if (!bRet){
- LOG::E(szCameraFolder, _T("删除失败"));
- szCameraFolder.Format("C:\\PD\\IDPMS\\工程\\%s_%s_单相机A", m_szEquipTypeCode, m_szEquipCode);
- szPrjFolder.Format("%s_%s_单相机A", m_szEquipTypeCode, m_szEquipCode);
- bRet = Utils::DeleteFolder(szCameraFolder);
- }
- g_szTaskPrjFolderName.Format("%s", szPrjFolder);
- //// 3.Copy相机驱动文件
- //CString szSourceCam("C:\\PD\\IDPMS\\工程\\1号相机\\平差数据\\PDDT-HCCAM_CLG1.cam");
- //CString szTargetCam;
- //szTargetCam.Format("C:\\Program Files\\PD\\IDPMS\\模板工程\\%s\\PDDT-HCCAM_CLG1.cam", m_szEquipTypeCode);
- //CopyFile(szSourceCam, szTargetCam, FALSE);
- // 3.Copy相机驱动文件
- CString szSourceCam("C:\\PD\\IDPMS\\工程\\1号相机\\平差数据\\PDDT-7103FDJ-01.cam");
- CString szTargetCam;
- szTargetCam.Format("C:\\Program Files\\PD\\IDPMS\\模板工程\\%s\\PDDT-7103FDJ-01.cam", m_szEquipTypeCode);
- CopyFile(szSourceCam, szTargetCam, FALSE);
- // 4.根据模板新建文件
- szCommand.Format("IDCMD0017(PDTL=%s,PDSV=%s,PDDT= false)", m_szEquipTypeCode, szPrjFolder);
- bRet = SendCommandAndAckHandle(pComm, szCommand, pRes);
- if (!bRet) return;
-
- Sleep(2000);
- // // 5.读取单相机相片
- // szCommand.Format("IDPMS-CD:SET0008");
- // iRet = pComm->SendCommand(szCommand, pRes);
- // if (iRet <= 0) {
- // this->PostMsg(WM_FAILURE, pRes);
- // pComm->Close();
- //delete pComm;
- // return ;
- // }
-
- // 6.读取当前路径下所有相片
- szCommand.Format("IDPMS-CD:SET1701:%s", szPhotoPath);
- bRet = SendCommandAndAckHandle(pComm, szCommand, pRes);
- if (!bRet) return;
-
- // 7.开始测量
- szCommand.Format("IDCMD0016(PDST=true,PDGO=true,PDCE=true,PDWN=false,PDFP=false,PDSS=true)");
- bRet = SendCommandAndAckHandle(pComm, szCommand, _T("CPDSimpleBundleStats"), pRes);
- if (!bRet) return;
-
- // 8.轴对准
- szCommand.Format("IDPMS-CD:SET3701:p1=CKO:p2=CKOY:p3=CKOZ:p1x=Y:p1y=Z:p1z=X:p2type=type:p3type=type:sys=frame");
- bRet = SendCommandAndAckHandle(pComm, szCommand, pRes);
- if (!bRet) return;
- // 9.生成当前型号测量数据
- //CString dataFile = AppConfig::GetString(_T("IDPMS"), _T("DataFile1"));
- CString newFileFind;
- bRet = GetFileName(szCameraFolder, _T("BDA3D"), newFileFind);
- if (!bRet) {
- this->PostMsg(WM_FAILURE, pRes);
- pComm->Close();
- delete pComm;
- return;
- }
- szCommand.Format("IDPMS-CD:SET6201:SUB6201:PDSD=false:PDNM=%s", newFileFind);
- bRet = SendCommandAndAckHandle(pComm, szCommand, pRes);
- if (!bRet) return;
- // 10.解析报告文件
- CString szFile;
- szFile.Format("C:\\PD\\IDPMS\\工程\\%s\\%s.txt", szPrjFolder, newFileFind);
- StaticData data(m_taskId, m_szEquipTypeCode, m_szEquipCode);
- data.LoadDataFromFile(szFile);
-
- // 11.保存到数据库
- CString szMsg;
- BOOL isValid = data.Validate(szMsg);
- data.SaveToDB();
- // 12.生成动态测量驱动TXT文件
- data.OutputConfig();
- // 13.清理内存
- data.Clear();
- if (!isValid) {
- if (pRes == NULL) pRes = (DMSResponse *)Utils::DMS_CreateMsg();
- DMSResponse *pMSG = (DMSResponse *)pRes;
- pMSG->bRet = FALSE;
- pMSG->iCode = 0;
- memset(pMSG->szMsg, 0, DMS_MSG_SIZE);
- strncat_s((char *)pMSG->szMsg, DMS_MSG_SIZE, szMsg.GetBuffer(), szMsg.GetLength());
- }
- else {
- if (pRes != NULL) {
- DMSResponse *pMSG = (DMSResponse *)pRes;
- memset(pMSG->szMsg, 0, DMS_MSG_SIZE);
- }
- }
- this->PostMsg(WM_SUCCESS, pRes);
- // 关闭通讯器
- pComm->Close();
- delete pComm;
- return;
- }
- /**************************************************************************************************
- 函 数 名 :GetPhotoPath
- 功能描述 :获取最新像片路径
- 输入参数 :略
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- BOOL StaticTaskThread::GetFileName(CString &szPath, CString szPrefix, CString &szTargetFile)
- {
- if (szPath.IsEmpty()) return FALSE;
- CString szTName;
- CFileFind ff;
- CString szFilter;
- szFilter.Format("%s\\%s*.TDX", szPath, szPrefix);
- BOOL bFound = ff.FindFile(szFilter);
- CTime time0 = 0;
- CString szTargetDir;
- while (bFound) {
- bFound = ff.FindNextFile();
- CString szPath = ff.GetFilePath();
- if (!ff.IsDirectory() && !ff.IsDots()) {
- if (szTName.IsEmpty()) {
- szTName = ff.GetFileTitle();
- }
- else if (szTName < ff.GetFileTitle()) {
- szTName = ff.GetFileTitle();
- }
- }
- }
- if (szTName.IsEmpty()) return FALSE;
- szTargetFile.Empty();
- szTargetFile.Append(szTName);
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :OnStatic
- 功能描述 :静态零位测量
- 输入参数 :略
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- void StaticTaskThread::OnStaticData(WPARAM wParam, LPARAM lParam)
- {
- CString szCommand;
- BOOL bRet = TRUE;
- int iRet = 0;
- DMSResponse *pRes = NULL;
- // IDPMS通讯器
- IDPMSComm *pComm = new IDPMSComm();
- bRet = pComm->Open();
- if (!bRet) {
- this->PostMsg(WM_START_IDPMS, pRes);
- delete pComm;
- return;
- }
- // 1.获取最新数据文件名
- CString newFileFind;
- CString szCameraFolder;
- szCameraFolder.Format("C:\\PD\\IDPMS\\工程\\%s", g_szTaskPrjFolderName);
- bRet = GetFileName(szCameraFolder, _T("BDA3D"), newFileFind);
- if (!bRet) {
- this->PostMsg(WM_UPDATE_FAILURE, pRes);
- pComm->Close();
- delete pComm;
- return;
- }
- // 2.生成最新数据
- szCommand.Format("IDPMS-CD:SET6201:SUB6201:PDSD=false:PDNM=%s", newFileFind);
- iRet = pComm->SendCommand(szCommand, pRes);
- if (iRet <= 0) {
- this->PostMsg(WM_UPDATE_FAILURE, pRes);
- pComm->Close();
- delete pComm;
- return;
- }
- // 3.解析报告文件
- CString szFile;
- szFile.Format("C:\\PD\\IDPMS\\工程\\%s\\%s.txt", g_szTaskPrjFolderName, newFileFind);
- StaticData data(m_taskId, m_szEquipTypeCode, m_szEquipCode);
- data.LoadDataFromFile(szFile);
- // 4.保存到数据库
- CString szMsg;
- BOOL isValidate = data.Validate(szMsg);
- data.SaveToDB();
- // 5.生成动态测量驱动TXT文件
- data.OutputConfig();
- // 6.清理内存
- data.Clear();
- if (!isValidate) {
- if (pRes == NULL) pRes = (DMSResponse *)Utils::DMS_CreateMsg();
- DMSResponse *pMSG = (DMSResponse *)pRes;
- pMSG->bRet = FALSE;
- pMSG->iCode = 0;
- strncat_s((char *)pMSG->szMsg, DMS_MSG_SIZE, szMsg.GetBuffer(), szMsg.GetLength());
- LOG::D(szMsg);
- }
- else
- {
- if (pRes != NULL) {
- DMSResponse *pMSG = (DMSResponse *)pRes;
- memset(pMSG->szMsg, 0, DMS_MSG_SIZE);
- }
- }
- this->PostMsg(WM_UPDATE_SUCCESS, pRes);
- // 关闭通讯器
- pComm->Close();
- delete pComm;
- return;
- }
|