CDSLinkF.cpp 23 KB

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