CDSLinkF.cpp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590
  1. //---------------------------------------------------------------------------
  2. #pragma hdrstop
  3. #include "CDSLinkF.h"
  4. #include "CDSLayerF.h"
  5. #include "ITS_OPLibF.h"
  6. //---------------------------------------------------------------------------
  7. #pragma package(smart_init)
  8. TItsLink::TItsLink()
  9. {
  10. IFSC_ID = "";
  11. ROAD_ID = "";
  12. Clear();
  13. }
  14. //---------------------------------------------------------------------------
  15. void TItsLink::Clear()
  16. {
  17. }
  18. //---------------------------------------------------------------------------
  19. TItsLink::~TItsLink()
  20. {
  21. }
  22. //---------------------------------------------------------------------------
  23. void TItsLink::InitTraffic()
  24. {
  25. TRAF->InitTraffic();
  26. }
  27. //---------------------------------------------------------------------------
  28. //---------------------------------------------------------------------------
  29. TItsLinkManager *ItsLinkManager = NULL;
  30. //---------------------------------------------------------------------------
  31. /*
  32. * Link Manager
  33. */
  34. TItsLinkManager::TItsLinkManager()
  35. {
  36. }
  37. //---------------------------------------------------------------------------
  38. TItsLinkManager::~TItsLinkManager()
  39. {
  40. FLists.RemoveAll();
  41. FClctSystStts.RemoveAll();
  42. }
  43. //---------------------------------------------------------------------------
  44. void TItsLinkManager::InitTraffic()
  45. {
  46. try
  47. {
  48. FLists.Lock();
  49. FOR_STL(TItsLink*, pObj, FLists)
  50. {
  51. pObj->InitTraffic();
  52. }
  53. }
  54. __finally
  55. {
  56. FLists.UnLock();
  57. }
  58. }
  59. //---------------------------------------------------------------------------
  60. bool TItsLinkManager::LoadFromDb(TADOConnection *ADbConn/*=NULL*/)
  61. {
  62. String sQry;
  63. TADOQuery *pADO = NULL;
  64. #if 1
  65. // for POHANG
  66. sQry = "SELECT LINK_ID, F_NODE AS F_NODE_ID, T_NODE AS T_NODE_ID, ROAD_USE, LANES, \r\n"
  67. " ROAD_RANK, TRIM(ROAD_TYPE) AS ROAD_TYPE, ROAD_NO, TRIM(ROAD_NAME) ROAD_NAME, \r\n"
  68. " MULTI_LINK, TRIM(LINK_CONNECT) AS LINK_CONNECT, MAX_SPD, \r\n"
  69. " TRIM(REST_VEH) AS REST_VEH, REST_W, REST_H, LINK_LENG, RMRK, \r\n"
  70. " DEL_YN, DFLT_SPED, DFLT_SPED_USE_YN, \r\n"
  71. " SECT_GRAD_CD, AREA_CD, \r\n"
  72. " DECODE(AREA_CD, 'LAT001', 'Y', 'N') REGN_YN, 1 AS PARA_ID \r\n"
  73. " FROM TB_LINK \r\n";
  74. #else
  75. sQry = "SELECT LINK_ID, F_NODE_ID, T_NODE_ID, ROAD_USE, LANES, \r\n"
  76. " ROAD_RANK, TRIM(ROAD_TYPE) AS ROAD_TYPE, ROAD_NO, TRIM(ROAD_NAME) ROAD_NAME, \r\n"
  77. " MULTI_LINK, TRIM(LINK_CONNECT) AS LINK_CONNECT, MAX_SPD, \r\n"
  78. " TRIM(REST_VEH) AS REST_VEH, REST_W, REST_H, LINK_LENG, RMRK, \r\n"
  79. " DEL_YN, DFLT_SPED, DFLT_SPED_USE_YN, \r\n"
  80. " SECT_GRAD_CD, AREA_CD, \r\n"
  81. " DECODE(AREA_CD, 'LAT001', 'Y', 'N') REGN_YN, PARA_ID \r\n"
  82. " FROM TB_LINK \r\n";
  83. #endif
  84. FLists.Lock();
  85. try
  86. {
  87. FLists.RemoveAll();
  88. try
  89. {
  90. pADO = new TADOQuery(NULL);
  91. pADO->Close();
  92. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  93. pADO->SQL->Clear();
  94. pADO->SQL->Text = sQry;
  95. pADO->Prepared = true;
  96. pADO->Open();
  97. //int nRows = pADO->RecordCount;
  98. for( ; !pADO->Eof; pADO->Next())
  99. {
  100. TItsLink *pLink = new TItsLink();
  101. pLink->IsVertex = false;
  102. pLink->LINK_ID = pADO->FieldByName("LINK_ID")->AsString; //'링크ID';;
  103. pLink->F_NODE_ID = pADO->FieldByName("F_NODE_ID")->AsString; //'시작노드ID';;
  104. pLink->T_NODE_ID = pADO->FieldByName("T_NODE_ID")->AsString; //'종료노드ID';;
  105. pLink->ROAD_USE = pADO->FieldByName("ROAD_USE")->AsString; //'도로사용여부';;
  106. pLink->LANES = pADO->FieldByName("LANES")->AsString; //'차로수';;
  107. pLink->ROAD_RANK = pADO->FieldByName("ROAD_RANK")->AsString; //'도로등급';;
  108. pLink->ROAD_TYPE = pADO->FieldByName("ROAD_TYPE")->AsString; //'도로유형';;
  109. pLink->ROAD_NO = pADO->FieldByName("ROAD_NO")->AsString; //'도로번호';;
  110. pLink->ROAD_NAME = pADO->FieldByName("ROAD_NAME")->AsString.Trim(); //'도로명';;
  111. pLink->MULTI_LINK = pADO->FieldByName("MULTI_LINK")->AsString; //'중용구간여부';;
  112. pLink->LINK_CONNECT = pADO->FieldByName("LINK_CONNECT")->AsString; //'연결로코드';;
  113. pLink->MAX_SPD = pADO->FieldByName("MAX_SPD")->AsString; //'최고제한속도';;
  114. pLink->REST_VEH = pADO->FieldByName("REST_VEH")->AsString; //'통행제한차량';;
  115. pLink->REST_W = pADO->FieldByName("REST_W")->AsString; //'통과제한하중';;
  116. pLink->REST_H = pADO->FieldByName("REST_H")->AsString; //'통과제한높이';;
  117. pLink->LINK_LENG = pADO->FieldByName("LINK_LENG")->AsString; //'연장';;
  118. pLink->RMRK = pADO->FieldByName("RMRK")->AsString.Trim(); //'비고';;
  119. pLink->DEL_YN = pADO->FieldByName("DEL_YN")->AsString; //'삭제 여부';;
  120. pLink->DFLT_SPED = pADO->FieldByName("DFLT_SPED")->AsString; //'디폴트 속도';;
  121. pLink->DFLT_SPED_USE_YN = pADO->FieldByName("DFLT_SPED_USE_YN")->AsString; //'디폴트 속도 사용 여부';;
  122. pLink->SECT_GRAD_CD = pADO->FieldByName("SECT_GRAD_CD")->AsString; //'구간 등급 코드';;
  123. pLink->AREA_CD = pADO->FieldByName("AREA_CD")->AsString; //'지역 코드';;
  124. pLink->REGN_YN = pADO->FieldByName("REGN_YN")->AsString; //'로컬지역여부';
  125. pLink->PARA_ID = pADO->FieldByName("PARA_ID")->AsString; //'파라미터ID
  126. //pLink->REGN_YN = "Y";
  127. FLists.Push(pLink->LINK_ID, pLink);
  128. pLink->Completed = true;
  129. pLink->TRAF = new TCDSTraffic();
  130. }
  131. }
  132. catch(EDatabaseError &E)
  133. {
  134. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  135. DBERRORMSG("TItsLinkManager::LoadFromDb", String(E.ClassName()), E.Message, sQry);
  136. throw Exception(String(E.ClassName()) + E.Message);
  137. }
  138. catch(Exception &exception)
  139. {
  140. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  141. DBERRORMSG("TItsLinkManager::LoadFromDb", String(exception.ClassName()), exception.Message, sQry);
  142. throw Exception(String(exception.ClassName()) + exception.Message);
  143. }
  144. }
  145. __finally
  146. {
  147. if (pADO)
  148. {
  149. pADO->Close();
  150. delete pADO;
  151. }
  152. FLists.UnLock();
  153. }
  154. if (g_AppCfg.isLoadFromFile)
  155. {
  156. return LoadVrtxFromFile(ADbConn);
  157. }
  158. return LoadVrtxFromDb(ADbConn);
  159. }
  160. //---------------------------------------------------------------------------
  161. bool TItsLinkManager::LoadVrtxFromFile(TADOConnection *ADbConn/*=NULL*/)
  162. {
  163. String sQry;
  164. AnsiString sAppDir = ExtractFilePath(Application->ExeName);
  165. AnsiString sFileName = sAppDir + "\\MAPDATA\\layers\\LINK.dat";
  166. sQry = String(sFileName);
  167. FILE *fd;
  168. if ((fd = fopen(sFileName.c_str(), "r")) == NULL)
  169. {
  170. return false;
  171. }
  172. FLists.Lock();
  173. TStringList *sl = NULL;
  174. char szBuff[8192];
  175. int nCnt = 0;
  176. try
  177. {
  178. sl = new TStringList;
  179. sl->Delimiter = ';';
  180. sl->StrictDelimiter = true;
  181. while (1)
  182. {
  183. nCnt++;
  184. memset(szBuff, 0x00, sizeof(szBuff));
  185. if (fgets(szBuff, sizeof(szBuff), fd) == NULL) break;
  186. sl->DelimitedText = String(szBuff);
  187. if (sl->Count != 3)
  188. {
  189. continue;
  190. }
  191. try {
  192. String LINK_ID = sl->Strings[0];
  193. TItsLink *pObj = FLists.Find(LINK_ID);
  194. if (pObj)
  195. {
  196. pObj->IsVertex = true;
  197. pObj->X_CRDN_ARR = sl->Strings[1];
  198. //pObj->Y_CRDN_ARR = sl->Strings[2];
  199. pObj->Y_CRDN_ARR = StringReplace(sl->Strings[2], "\n", "", TReplaceFlags() << rfReplaceAll);
  200. }
  201. }
  202. catch(Exception &e)
  203. {
  204. DBERRORMSG("TItsLinkManager::LoadVertexFromDb", String(e.ClassName()), e.Message, sQry);
  205. throw Exception(String(e.ClassName()) + e.Message);
  206. }
  207. }
  208. }
  209. __finally
  210. {
  211. if (sl) delete sl;
  212. if (fd) fclose(fd);
  213. FLists.UnLock();
  214. }
  215. return true;
  216. }
  217. //---------------------------------------------------------------------------
  218. bool TItsLinkManager::LoadVrtxFromDb(TADOConnection *ADbConn/*=NULL*/)
  219. {
  220. String sQry;
  221. TADOQuery *pADO = NULL;
  222. #if 0
  223. sQry = "SELECT A.LINK_ID, A.LEVL, \r\n"
  224. " A.X_CRDN_ARR, A.Y_CRDN_ARR \r\n"
  225. " FROM TB_LINK_VRTX_ARR A, \r\n"
  226. " TB_LINK B \r\n"
  227. " WHERE B.DEL_YN = 'N' \r\n"
  228. " AND B.LINK_ID = A.LINK_ID \r\n"
  229. " AND A.LEVL = 1 \r\n";
  230. #else
  231. #if 0
  232. sQry = "SELECT * \r\n"
  233. " FROM VW_LINK_VRTX_ARR \r\n";
  234. #else
  235. sQry = "SELECT A.LINK_ID AS LINK_ID, A.LEVL AS LEVL, \r\n"
  236. " SUBSTR(A.X_CRDN_ARR, 1, 400) AS XMSG01, \r\n"
  237. " SUBSTR(A.X_CRDN_ARR, 401, 400) AS XMSG02, \r\n"
  238. " SUBSTR(A.X_CRDN_ARR, 801, 400) AS XMSG03, \r\n"
  239. " SUBSTR(A.X_CRDN_ARR, 1201, 400) AS XMSG04, \r\n"
  240. " SUBSTR(A.X_CRDN_ARR, 1601, 400) AS XMSG05, \r\n"
  241. " SUBSTR(A.X_CRDN_ARR, 2001, 400) AS XMSG06, \r\n"
  242. " SUBSTR(A.X_CRDN_ARR, 2401, 400) AS XMSG07, \r\n"
  243. " SUBSTR(A.X_CRDN_ARR, 2801, 400) AS XMSG08, \r\n"
  244. " SUBSTR(A.X_CRDN_ARR, 3201, 400) AS XMSG09, \r\n"
  245. " SUBSTR(A.X_CRDN_ARR, 3601, 400) AS XMSG10, \r\n"
  246. " SUBSTR(A.X_CRDN_ARR, 4001, 400) AS XMSG11, \r\n"
  247. " SUBSTR(A.X_CRDN_ARR, 4401, 400) AS XMSG12, \r\n"
  248. " SUBSTR(A.Y_CRDN_ARR, 1, 400) AS YMSG01, \r\n"
  249. " SUBSTR(A.Y_CRDN_ARR, 401, 400) AS YMSG02, \r\n"
  250. " SUBSTR(A.Y_CRDN_ARR, 801, 400) AS YMSG03, \r\n"
  251. " SUBSTR(A.Y_CRDN_ARR, 1201, 400) AS YMSG04, \r\n"
  252. " SUBSTR(A.Y_CRDN_ARR, 1601, 400) AS YMSG05, \r\n"
  253. " SUBSTR(A.Y_CRDN_ARR, 2001, 400) AS YMSG06, \r\n"
  254. " SUBSTR(A.Y_CRDN_ARR, 2401, 400) AS YMSG07, \r\n"
  255. " SUBSTR(A.Y_CRDN_ARR, 2801, 400) AS YMSG08, \r\n"
  256. " SUBSTR(A.Y_CRDN_ARR, 3201, 400) AS YMSG09, \r\n"
  257. " SUBSTR(A.Y_CRDN_ARR, 3601, 400) AS YMSG10, \r\n"
  258. " SUBSTR(A.Y_CRDN_ARR, 4001, 400) AS YMSG11, \r\n"
  259. " SUBSTR(A.Y_CRDN_ARR, 4401, 400) AS YMSG12 \r\n"
  260. " FROM VW_LINK_VRTX_ARR A \r\n";
  261. #endif
  262. #endif
  263. TItsLink* pObj;
  264. FLists.Lock();
  265. try
  266. {
  267. try
  268. {
  269. pADO = new TADOQuery(NULL);
  270. pADO->Close();
  271. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  272. pADO->SQL->Clear();
  273. pADO->SQL->Text = sQry;
  274. pADO->Prepared = true;
  275. pADO->Open();
  276. for( ; !pADO->Eof; pADO->Next())
  277. {
  278. String LINK_ID = pADO->FieldByName("LINK_ID")->AsString;
  279. pObj = FLists.Find(LINK_ID);
  280. if (!pObj) continue;
  281. #if 0
  282. LEVL = pADO->FieldByName("LEVL")->AsInteger;
  283. TItsVrtx* pVrtx = new TItsVrtx();
  284. pVrtx->X_CRDN_ARR = pADO->FieldByName("X_CRDN_ARR")->AsString;
  285. pVrtx->Y_CRDN_ARR = pADO->FieldByName("Y_CRDN_ARR")->AsString;
  286. pObj->Vrtxs.Push(LEVL, pVrtx);
  287. #else
  288. pObj->IsVertex = true;
  289. #if 0
  290. pObj->X_CRDN_ARR = pADO->FieldByName("X_CRDN_ARR")->AsString;
  291. pObj->Y_CRDN_ARR = pADO->FieldByName("Y_CRDN_ARR")->AsString;
  292. #else
  293. pObj->X_CRDN_ARR = "";
  294. pObj->Y_CRDN_ARR = "";
  295. String COLM;
  296. for (int ii = 1; ii < 13; ii++)
  297. {
  298. COLM.printf(L"XMSG%02d", ii);
  299. pObj->X_CRDN_ARR += pADO->FieldByName(COLM)->AsString;
  300. COLM.printf(L"YMSG%02d", ii);
  301. pObj->Y_CRDN_ARR += pADO->FieldByName(COLM)->AsString;
  302. }
  303. #endif
  304. #endif
  305. }
  306. }
  307. catch(EDatabaseError &E)
  308. {
  309. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  310. DBERRORMSG("TItsLinkManager::LoadVrtxFromDb", String(E.ClassName()), E.Message, sQry);
  311. throw Exception(String(E.ClassName()) + E.Message);
  312. }
  313. catch(Exception &exception)
  314. {
  315. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  316. DBERRORMSG("TItsLinkManager::LoadVrtxFromDb", String(exception.ClassName()), exception.Message, sQry);
  317. throw Exception(String(exception.ClassName()) + exception.Message);
  318. }
  319. }
  320. __finally
  321. {
  322. if (pADO)
  323. {
  324. pADO->Close();
  325. delete pADO;
  326. }
  327. FLists.UnLock();
  328. }
  329. return true;
  330. }
  331. //---------------------------------------------------------------------------
  332. bool TItsLinkManager::LoadRegionVertexFromDb(TADOConnection *ADbConn/*=NULL*/)
  333. {
  334. String sQry;
  335. TADOQuery *pADO = NULL;
  336. sQry = "SELECT * FROM TB_REGION_VRTX WHERE CENTERID = 'L01'";
  337. try
  338. {
  339. try
  340. {
  341. pADO = new TADOQuery(NULL);
  342. pADO->Close();
  343. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  344. pADO->SQL->Clear();
  345. pADO->SQL->Text = sQry;
  346. pADO->Prepared = true;
  347. pADO->Open();
  348. for( ; !pADO->Eof; pADO->Next())
  349. {
  350. String CENTERID = pADO->FieldByName("CENTERID")->AsString;
  351. FRegionPointCnt = pADO->FieldByName("POINTCNT")->AsInteger;
  352. FRegionVertex = pADO->FieldByName("VERTEX")->AsString;
  353. }
  354. }
  355. catch(EDatabaseError &E)
  356. {
  357. DBERRORMSG("TItsLinkManager::LoadRegionVertexFromDb", String(E.ClassName()), E.Message, sQry);
  358. throw Exception(String(E.ClassName()) + E.Message);
  359. }
  360. catch(Exception &exception)
  361. {
  362. DBERRORMSG("TItsLinkManager::LoadRegionVertexFromDb", String(exception.ClassName()), exception.Message, sQry);
  363. throw Exception(String(exception.ClassName()) + exception.Message);
  364. }
  365. }
  366. __finally
  367. {
  368. if (pADO)
  369. {
  370. pADO->Close();
  371. delete pADO;
  372. }
  373. FLists.UnLock();
  374. }
  375. return true;
  376. }
  377. //---------------------------------------------------------------------------
  378. bool TItsLinkManager::LoadTraffic(TADOConnection *ADbConn/*=NULL*/)
  379. {
  380. bool bResult = true;
  381. String sQry;
  382. TADOQuery *pADO = NULL;
  383. InitTraffic();
  384. sQry = "SELECT A.LINK_ID, PRCN_DT, TFVL, SPED, OCPY_RATE, TRVL_HH, CMTR_GRAD_CD, MISS_YN, \r\n"
  385. " PRCN_SPED, SMTH_SPED, ADJS_SPED, PTRN_SPED, PRCN_SORC, ADJS_SORC, DATA_NUM, \r\n"
  386. " (CASE WHEN PRCN_DT <= TO_CHAR(SYSDATE - 10/1440, 'YYYYMMDDHH24MISS') \r\n"
  387. " THEN 'Y' ELSE 'N' END) AS MISSING, \r\n"
  388. " (CASE WHEN PRCN_DT >= TO_CHAR(SYSDATE - 15/1440, 'YYYYMMDDHH24MISS') \r\n"
  389. " THEN 'Y' ELSE 'N' END) AS LASTANS, \r\n"
  390. " (SELECT MAX(PRCN_DT) FROM TB_LINK_TRAF) MPRCN_DT \r\n"
  391. " FROM TB_LINK_TRAF A, TB_LINK B \r\n"
  392. " WHERE A.LINK_ID = B.LINK_ID \r\n";
  393. FLists.Lock();
  394. try
  395. {
  396. try
  397. {
  398. pADO = new TADOQuery(NULL);
  399. pADO->Close();
  400. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  401. pADO->SQL->Clear();
  402. pADO->SQL->Text = sQry;
  403. pADO->Prepared = true;
  404. pADO->Open();
  405. for( ; !pADO->Eof; pADO->Next())
  406. {
  407. String ID = pADO->FieldByName("LINK_ID")->AsString;
  408. TItsLink *pObj = FLists.Find(ID);
  409. if (!pObj) continue;
  410. pObj->TRAF->PRCN_DT = pADO->FieldByName("PRCN_DT")->AsString;
  411. pObj->TRAF->TFVL = pADO->FieldByName("TFVL")->AsInteger;
  412. pObj->TRAF->SPED = pADO->FieldByName("SPED")->AsInteger;
  413. pObj->TRAF->OCPY_RATE = pADO->FieldByName("OCPY_RATE")->AsFloat;
  414. pObj->TRAF->TRVL_HH = pADO->FieldByName("TRVL_HH")->AsInteger;
  415. pObj->TRAF->CMTR_GRAD_CD = pADO->FieldByName("CMTR_GRAD_CD")->AsString;
  416. pObj->TRAF->MISSING = pADO->FieldByName("MISSING")->AsString; // 결측여부
  417. pObj->TRAF->LASTANS = pADO->FieldByName("LASTANS")->AsString; // 최근 15분 이내 가공
  418. pObj->TRAF->MPRCN_DT = pADO->FieldByName("MPRCN_DT")->AsString; // 가공시각(최신)
  419. pObj->TRAF->DATA_NUM = pADO->FieldByName("DATA_NUM")->AsInteger;
  420. pObj->TRAF->PTRN_SPED = pADO->FieldByName("PTRN_SPED")->AsInteger;
  421. if (pObj->TRAF->CMTR_GRAD_CD == "LTC0") pObj->TRAF->MISSING = "Y";
  422. if (pObj->TRAF->MISSING == "Y") pObj->TRAF->CMTR_GRAD_CD = "LTC0";
  423. if (pObj->TRAF->CMTR_GRAD_CD == "LTC1") pObj->TRAF->TRAF_GRAD = 1;
  424. else if (pObj->TRAF->CMTR_GRAD_CD == "LTC2") pObj->TRAF->TRAF_GRAD = 2;
  425. else if (pObj->TRAF->CMTR_GRAD_CD == "LTC3") pObj->TRAF->TRAF_GRAD = 3;
  426. else pObj->TRAF->TRAF_GRAD = 0;
  427. pObj->TRAF->MISS_YN = pADO->FieldByName("MISS_YN")->AsString; // '결측 여부';
  428. pObj->TRAF->PRCN_SPED = pADO->FieldByName("PRCN_SPED")->AsInteger; // '가공 속도';
  429. pObj->TRAF->SMTH_SPED = pADO->FieldByName("SMTH_SPED")->AsInteger; // '평활화 속도';
  430. pObj->TRAF->ADJS_SPED = pADO->FieldByName("ADJS_SPED")->AsInteger; // '보정 속도';
  431. pObj->TRAF->PRCN_SORC = pADO->FieldByName("PRCN_SORC")->AsString; // '가공 소스';
  432. pObj->TRAF->ADJS_SORC = pADO->FieldByName("ADJS_SORC")->AsString; // '보정 소스';
  433. if (pObj->TRAF->CMTR_GRAD_CD == "LTC0" && pObj->TRAF->MISS_YN == "Y") pObj->TRAF->MISSING = "Y";
  434. }
  435. }
  436. catch(EDatabaseError &E)
  437. {
  438. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  439. DBERRORLOG("TItsLinkManager::LoadTraffic", String(E.ClassName()), E.Message, sQry);
  440. return false;
  441. throw Exception(String(E.ClassName()) + E.Message);
  442. }
  443. catch(Exception &exception)
  444. {
  445. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  446. DBERRORLOG("TItsLinkManager::LoadTraffic", String(exception.ClassName()), exception.Message, sQry);
  447. return false;
  448. throw Exception(String(exception.ClassName()) + exception.Message);
  449. }
  450. }
  451. __finally
  452. {
  453. if (pADO)
  454. {
  455. pADO->Close();
  456. delete pADO;
  457. }
  458. FLists.UnLock();
  459. }
  460. return bResult;
  461. }
  462. //---------------------------------------------------------------------------
  463. bool TItsLinkManager::LoadClctSystStts(TADOConnection *ADbConn/*=NULL*/)
  464. {
  465. bool bResult = true;
  466. String sQry;
  467. TADOQuery *pADO = NULL;
  468. FOR_STL(TClctSystStts*, pObj, FClctSystStts)
  469. {
  470. pObj->IsCollected = false;
  471. }
  472. sQry = "SELECT A.PRCN_DT, A.CLCT_SYST_CD, B.CLCT_SYST_NM, A.CLCT_NUM, A.FLTR_NUM, A.FUSN_NUM \r\n"
  473. " FROM TB_CLCT_SYST_STTS_HS A, \r\n"
  474. " TB_CLCT_SYST_STUP B \r\n"
  475. " WHERE A.PRCN_DT = (SELECT MAX(PRCN_DT) \r\n"
  476. " FROM TB_CLCT_SYST_STTS_HS \r\n"
  477. " WHERE PRCN_DT >= TO_CHAR(SYSDATE - 1/24, 'YYYYMMDDHH24MISS') \r\n"
  478. " ) \r\n"
  479. " AND B.CLCT_SYST_CD = A.CLCT_SYST_CD(+) \r\n"
  480. " AND B.USE_YN = 'Y' \r\n";
  481. FLists.Lock();
  482. try
  483. {
  484. try
  485. {
  486. pADO = new TADOQuery(NULL);
  487. pADO->Close();
  488. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  489. pADO->SQL->Clear();
  490. pADO->SQL->Text = sQry;
  491. pADO->Prepared = true;
  492. pADO->Open();
  493. for( ; !pADO->Eof; pADO->Next())
  494. {
  495. String CLCT_SYST_CD = pADO->FieldByName("CLCT_SYST_CD")->AsString;
  496. TClctSystStts *pObj = FClctSystStts.Find(CLCT_SYST_CD);
  497. if (!pObj)
  498. {
  499. pObj = new TClctSystStts();
  500. pObj->CLCT_SYST_CD = CLCT_SYST_CD;
  501. FClctSystStts.Push(pObj->CLCT_SYST_CD, pObj);
  502. }
  503. pObj->CLCT_SYST_NM = pADO->FieldByName("CLCT_SYST_NM")->AsString;
  504. pObj->PRCN_DT = pADO->FieldByName("PRCN_DT")->AsString;
  505. pObj->CLCT_NUM = pADO->FieldByName("CLCT_NUM")->AsInteger;
  506. pObj->FLTR_NUM = pADO->FieldByName("FLTR_NUM")->AsInteger;
  507. pObj->FUSN_NUM = pADO->FieldByName("FUSN_NUM")->AsInteger;
  508. pObj->IsCollected = true;
  509. }
  510. }
  511. catch(EDatabaseError &E)
  512. {
  513. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  514. DBERRORLOG("TItsLinkManager::LoadTraffic", String(E.ClassName()), E.Message, sQry);
  515. return false;
  516. throw Exception(String(E.ClassName()) + E.Message);
  517. }
  518. catch(Exception &exception)
  519. {
  520. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  521. DBERRORLOG("TItsLinkManager::LoadTraffic", String(exception.ClassName()), exception.Message, sQry);
  522. return false;
  523. throw Exception(String(exception.ClassName()) + exception.Message);
  524. }
  525. }
  526. __finally
  527. {
  528. if (pADO)
  529. {
  530. pADO->Close();
  531. delete pADO;
  532. }
  533. FLists.UnLock();
  534. }
  535. return bResult;
  536. }
  537. //---------------------------------------------------------------------------