CDSVmsIfscF.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. //---------------------------------------------------------------------------
  2. #pragma hdrstop
  3. #include "CDSVmsIfscF.h"
  4. #include "AppGlobalF.h"
  5. //---------------------------------------------------------------------------
  6. #pragma package(smart_init)
  7. //---------------------------------------------------------------------------
  8. TVmsLinkIfsc::TVmsLinkIfsc()
  9. {
  10. }
  11. //---------------------------------------------------------------------------
  12. TVmsLinkIfsc::~TVmsLinkIfsc()
  13. {
  14. }
  15. //---------------------------------------------------------------------------
  16. //---------------------------------------------------------------------------
  17. TVmsIfsc::TVmsIfsc()
  18. {
  19. VMS_IFSC_NM = ""; ///VARCHAR2(60) Y VMS 정보제공구간 명
  20. DSPL_STRT_NODE_NM = ""; //VARCHAR2(30) Y 표출 시작 노드 명
  21. DSPL_END_NODE_NM = ""; //VARCHAR2(30) Y 표출 종료 노드 명
  22. DETR_ID = 0; //NUMBER(10) Y 우회도로 ID
  23. USE_YN = "Y";
  24. AXIS_YN = "N";
  25. DEL_YN = "N";
  26. MIN[0] = 20; MAX[0] = 180;
  27. MIN[1] = 10; MAX[1] = 19;
  28. MIN[2] = 0; MAX[2] = 9;
  29. InitTraffic();
  30. }
  31. //---------------------------------------------------------------------------
  32. TVmsIfsc::~TVmsIfsc()
  33. {
  34. FLists.RemoveAll();
  35. }
  36. //---------------------------------------------------------------------------
  37. void TVmsIfsc::InitTraffic()
  38. {
  39. PRCN_DT = "19700101000000";
  40. SPED = 0;
  41. CMTR_GRAD_CD = "0";
  42. TRVL_HH = 0;
  43. }
  44. //---------------------------------------------------------------------------
  45. void TVmsIfsc::CalcSectLngt()
  46. {
  47. SECT_LNGT = 0;
  48. FOR_STL(TVmsLinkIfsc*, pIfsc, FLists) {
  49. SECT_LNGT += pIfsc->SECT_LNGT;
  50. }
  51. }
  52. //---------------------------------------------------------------------------
  53. //---------------------------------------------------------------------------
  54. TVmsIfscManager *VmsIfscManager = NULL;
  55. //---------------------------------------------------------------------------
  56. TVmsIfscManager::TVmsIfscManager()
  57. {
  58. }
  59. //---------------------------------------------------------------------------
  60. TVmsIfscManager::~TVmsIfscManager()
  61. {
  62. FLists.RemoveAll();
  63. }
  64. //---------------------------------------------------------------------------
  65. void TVmsIfscManager::InitTraffic()
  66. {
  67. FLists.Lock();
  68. try
  69. {
  70. FOR_STL(TVmsIfsc*, pObj, FLists)
  71. {
  72. pObj->InitTraffic();
  73. }
  74. }
  75. __finally
  76. {
  77. FLists.UnLock();
  78. }
  79. FIfscLists.Lock();
  80. try
  81. {
  82. FOR_STL(TIfscTraf*, pIfsc, FIfscLists) {
  83. pIfsc->PRCN_DT = "19700101000000";
  84. pIfsc->SPED = 0;
  85. pIfsc->CMTR_GRAD_CD = "LTC0";
  86. pIfsc->TRVL_HH = 0;
  87. }
  88. }
  89. __finally
  90. {
  91. FIfscLists.UnLock();
  92. }
  93. }
  94. //---------------------------------------------------------------------------
  95. bool TVmsIfscManager::LoadFromDb(TADOConnection *ADbConn/*=NULL*/)
  96. {
  97. String sQry;
  98. TADOQuery *pADO = NULL;
  99. FLists.Lock();
  100. try
  101. {
  102. FLists.RemoveAll();
  103. }
  104. __finally
  105. {
  106. FLists.UnLock();
  107. }
  108. sQry = "SELECT A.*, \r\n"
  109. " NVL(B.MIN1, 20) AS MIN1, NVL(B.MAX1, 180) AS MAX1, \r\n"
  110. " NVL(B.MIN2, 10) AS MIN2, NVL(B.MAX2, 19) AS MAX2, \r\n"
  111. " NVL(B.MIN3, 0) AS MIN3, NVL(B.MAX3, 9) AS MAX3 \r\n"
  112. " FROM TB_VMS_IFSC A, \r\n"
  113. " (SELECT VMS_IFSC_ID, \r\n"
  114. " SUM(MIN1) AS MIN1, SUM(MAX1) AS MAX1, \r\n"
  115. " SUM(MIN2) AS MIN2, SUM(MAX2) AS MAX2, \r\n"
  116. " SUM(MIN3) AS MIN3, SUM(MAX3) AS MAX3 \r\n"
  117. " FROM (SELECT VMS_IFSC_ID, LWSTSPED AS MIN1, HGHSSPED AS MAX1, 0 AS MIN2, 0 AS MAX2, 0 AS MIN3, 0 AS MAX3 \r\n"
  118. " FROM TB_VMS_IFSC_CMTR_GRAD \r\n"
  119. " WHERE CMTR_GRAD_CD = '1' \r\n"
  120. " UNION ALL \r\n"
  121. " SELECT VMS_IFSC_ID, 0 AS MIN1, 0 AS MAX1, LWSTSPED AS MIN2, HGHSSPED AS MAX2, 0 AS MIN3, 0 AS MAX3 \r\n"
  122. " FROM TB_VMS_IFSC_CMTR_GRAD \r\n"
  123. " WHERE CMTR_GRAD_CD = '2' \r\n"
  124. " UNION ALL \r\n"
  125. " SELECT VMS_IFSC_ID, 0 AS MIN1, 0 AS MAX1, 0 AS MIN2, 0 AS MAX2, LWSTSPED AS MIN3, HGHSSPED AS MAX3 \r\n"
  126. " FROM TB_VMS_IFSC_CMTR_GRAD \r\n"
  127. " WHERE CMTR_GRAD_CD = '3') \r\n"
  128. " GROUP BY VMS_IFSC_ID) B \r\n"
  129. " WHERE A.USE_YN = 'Y' \r\n"
  130. " AND A.EDTN_CD = 'EDI0' \r\n"
  131. " AND A.VMS_IFSC_ID = B.VMS_IFSC_ID \r\n"
  132. " ORDER BY A.VMS_IFSC_ID \r\n";
  133. FLists.Lock();
  134. try
  135. {
  136. try
  137. {
  138. pADO = new TADOQuery(NULL);
  139. pADO->Close();
  140. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  141. pADO->SQL->Clear();
  142. pADO->SQL->Text = sQry;
  143. pADO->Open();
  144. for( ; !pADO->Eof; pADO->Next())
  145. {
  146. TVmsIfsc *pObj = new TVmsIfsc();
  147. pObj->VMS_IFSC_ID = pADO->FieldByName("VMS_IFSC_ID")->AsInteger;
  148. pObj->VMS_IFSC_NM = pADO->FieldByName("VMS_IFSC_NM")->AsString;
  149. pObj->DSPL_STRT_NODE_NM = pADO->FieldByName("DSPL_STRT_NODE_NM")->AsString;
  150. pObj->DSPL_END_NODE_NM = pADO->FieldByName("DSPL_END_NODE_NM")->AsString;
  151. pObj->DETR_ID = pADO->FieldByName("DETR_ID")->AsInteger;
  152. pObj->USE_YN = pADO->FieldByName("USE_YN")->AsString;
  153. pObj->ROAD_NM = pADO->FieldByName("ROAD_NM")->AsString;
  154. pObj->SPOT_NM = pADO->FieldByName("SPOT_NM")->AsString;
  155. pObj->AXIS_YN = pADO->FieldByName("AXIS_YN")->AsString;
  156. pObj->MIN[0] = pADO->FieldByName("MIN1")->AsInteger;
  157. pObj->MAX[0] = pADO->FieldByName("MAX1")->AsInteger;
  158. pObj->MIN[1] = pADO->FieldByName("MIN2")->AsInteger;
  159. pObj->MAX[1] = pADO->FieldByName("MAX2")->AsInteger;
  160. pObj->MIN[2] = pADO->FieldByName("MIN3")->AsInteger;
  161. pObj->MAX[2] = pADO->FieldByName("MAX3")->AsInteger;
  162. pObj->CNGS_SPD = pADO->FieldByName("CNGS_SPD")->AsInteger;
  163. pObj->DEL_YN = "N";
  164. FLists.Push(pObj->VMS_IFSC_ID, pObj);
  165. }
  166. }
  167. catch(EDatabaseError &E)
  168. {
  169. DBERRORMSG("VMS정보제공구간정보조회", String(E.ClassName()), E.Message, sQry);
  170. throw Exception(String(E.ClassName()) + E.Message);
  171. }
  172. catch(Exception &e)
  173. {
  174. DBERRORMSG("VMS정보제공구간정보조회", String(e.ClassName()), e.Message, sQry);
  175. throw Exception(String(e.ClassName()) + e.Message);
  176. }
  177. }
  178. __finally
  179. {
  180. if (pADO)
  181. {
  182. pADO->Close();
  183. delete pADO;
  184. }
  185. FLists.UnLock();
  186. }
  187. return LoadSubFromDb(ADbConn);
  188. }
  189. //---------------------------------------------------------------------------
  190. bool TVmsIfscManager::LoadSubFromDb(TADOConnection *ADbConn/*=NULL*/)
  191. {
  192. String sQry;
  193. TADOQuery *pADO = NULL;
  194. sQry = "SELECT A.*, NVL(B.IFSC_NM, '-') AS IFSC_NM, \r\n"
  195. " B.STRT_NM, B.END_NM, NVL(B.SECT_LNGT, 0) AS SECT_LNGT \r\n"
  196. " FROM TB_VMS_LINK_IFSC A, \r\n"
  197. " TB_IFSC B \r\n"
  198. // " WHERE A.IFSC_ID = B.IFSC_ID(+) \r\n"
  199. " WHERE A.IFSC_ID = B.IFSC_ID \r\n"
  200. " ORDER BY A.VMS_IFSC_ID, A.ORD \r\n";
  201. FLists.Lock();
  202. try
  203. {
  204. TVmsIfsc *pIfsc;
  205. TVmsLinkIfsc *pObj;
  206. int VMS_IFSC_ID;
  207. int ORD;
  208. try
  209. {
  210. pADO = new TADOQuery(NULL);
  211. pADO->Close();
  212. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  213. pADO->SQL->Clear();
  214. pADO->SQL->Text = sQry;
  215. pADO->Open();
  216. for( ; !pADO->Eof; pADO->Next())
  217. {
  218. VMS_IFSC_ID = pADO->FieldByName("VMS_IFSC_ID")->AsInteger;
  219. //ORD = pADO->FieldByName("ORD")->AsInteger;
  220. pIfsc = FLists.Find(VMS_IFSC_ID);
  221. if (!pIfsc) continue;
  222. ORD = pIfsc->FLists.Size()+1;
  223. pObj = pIfsc->FLists.Find(ORD);
  224. if (!pObj)
  225. {
  226. pObj = new TVmsLinkIfsc();
  227. pIfsc->FLists.Push(ORD, pObj);
  228. }
  229. pObj->VMS_IFSC_ID = VMS_IFSC_ID;
  230. pObj->ORD = ORD;
  231. pObj->IFSC_ID = pADO->FieldByName("IFSC_ID")->AsString;
  232. pObj->IFSC_NM = pADO->FieldByName("IFSC_NM")->AsString;
  233. pObj->STRT_NM = pADO->FieldByName("STRT_NM")->AsString;
  234. pObj->END_NM = pADO->FieldByName("END_NM")->AsString;
  235. pObj->SECT_LNGT = pADO->FieldByName("SECT_LNGT")->AsInteger;
  236. }
  237. }
  238. catch(EDatabaseError &E)
  239. {
  240. DBERRORMSG("VMS정보제공구간링크정보조회", String(E.ClassName()), E.Message, sQry);
  241. throw Exception(String(E.ClassName()) + E.Message);
  242. }
  243. catch(Exception &e)
  244. {
  245. DBERRORMSG("VMS정보제공구간링크정보조회", String(e.ClassName()), e.Message, sQry);
  246. throw Exception(String(e.ClassName()) + e.Message);
  247. }
  248. }
  249. __finally
  250. {
  251. if (pADO)
  252. {
  253. pADO->Close();
  254. delete pADO;
  255. }
  256. FOR_STL(TVmsIfsc*, pVmsIfsc, FLists) {
  257. pVmsIfsc->CalcSectLngt();
  258. }
  259. FLists.UnLock();
  260. }
  261. return true;
  262. }
  263. //---------------------------------------------------------------------------
  264. bool TVmsIfscManager::LoadTraffic(TADOConnection *ADbConn/*=NULL*/)
  265. {
  266. String sQry;
  267. TADOQuery *pADO = NULL;
  268. InitTraffic();
  269. sQry = "SELECT A.VMS_IFSC_ID, \r\n"
  270. " NVL(B.RGST_DT, '19700101000000') AS PRCN_DT, \r\n"
  271. " NVL(B.CMTR_GRAD_CD, '0') AS CMTR_GRAD_CD, \r\n"
  272. " NVL(B.SPED, 0) AS SPED, \r\n"
  273. " NVL(B.TRVL_HH, 0) AS TRVL_HH \r\n"
  274. " FROM TB_VMS_IFSC A, \r\n"
  275. " (SELECT * \r\n"
  276. " FROM TB_VMS_CMTRINFR \r\n"
  277. " WHERE RGST_DT >= TO_CHAR(SYSDATE-10/1440, 'YYYYMMDDHH24MISS') ) B \r\n"
  278. " WHERE A.VMS_IFSC_ID = B.VMS_IFSC_ID(+) \r\n";
  279. FLists.Lock();
  280. try
  281. {
  282. try
  283. {
  284. pADO = new TADOQuery(NULL);
  285. pADO->Close();
  286. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  287. pADO->SQL->Clear();
  288. pADO->SQL->Text = sQry;
  289. pADO->Open();
  290. for( ; !pADO->Eof; pADO->Next())
  291. {
  292. int VMS_IFSC_ID = pADO->FieldByName("VMS_IFSC_ID")->AsInteger;
  293. TVmsIfsc *pObj = FLists.Find(VMS_IFSC_ID);
  294. if (!pObj) continue;
  295. pObj->PRCN_DT = pADO->FieldByName("PRCN_DT")->AsString; //N VARCHAR2(14) Y 등록 일시
  296. pObj->SPED = pADO->FieldByName("SPED")->AsInteger; //N NUMBER(3) Y 0 속도
  297. pObj->CMTR_GRAD_CD = pADO->FieldByName("CMTR_GRAD_CD")->AsString; //N VARCHAR2(7) Y 소통 등급 코드 ==>예는 0,1,2,3으로 들어가네???
  298. pObj->TRVL_HH = pADO->FieldByName("TRVL_HH")->AsInteger; //N NUMBER(6) Y 0 통행 시간
  299. }
  300. }
  301. catch(EDatabaseError &E)
  302. {
  303. DBERRORMSG("VMS_IFSC교통정보조회", String(E.ClassName()), E.Message, sQry);
  304. throw Exception(String(E.ClassName()) + E.Message);
  305. }
  306. catch(Exception &e)
  307. {
  308. DBERRORMSG("VMS_IFSC교통정보조회", String(e.ClassName()), e.Message, sQry);
  309. throw Exception(String(e.ClassName()) + e.Message);
  310. }
  311. }
  312. __finally
  313. {
  314. if (pADO)
  315. {
  316. pADO->Close();
  317. delete pADO;
  318. }
  319. FLists.UnLock();
  320. }
  321. return LoadTrafficIfsc(ADbConn);
  322. }
  323. //---------------------------------------------------------------------------
  324. bool TVmsIfscManager::LoadTrafficIfsc(TADOConnection *ADbConn/*=NULL*/)
  325. {
  326. String sQry;
  327. TADOQuery *pADO = NULL;
  328. sQry = "SELECT A.VMS_IFSC_ID, A.IFSC_ID, \r\n"
  329. " NVL(B.PRCN_DT, '19700101000000') AS PRCN_DT, \r\n"
  330. " NVL(B.CMTR_GRAD_CD, 'LTC0') AS CMTR_GRAD_CD, \r\n"
  331. " NVL(B.SPED, 0) AS SPED, \r\n"
  332. " NVL(B.TRVL_HH, 0) AS TRVL_HH \r\n"
  333. " FROM TB_VMS_LINK_IFSC A, \r\n"
  334. " (SELECT * \r\n"
  335. " FROM TB_IFSC_TRAF \r\n"
  336. " WHERE PRCN_DT >= TO_CHAR(SYSDATE-10/1440, 'YYYYMMDDHH24MISS') ) B \r\n"
  337. "WHERE A.IFSC_ID = B.IFSC_ID(+) \r\n";
  338. FIfscLists.Lock();
  339. try
  340. {
  341. try
  342. {
  343. pADO = new TADOQuery(NULL);
  344. pADO->Close();
  345. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  346. pADO->SQL->Clear();
  347. pADO->SQL->Text = sQry;
  348. pADO->Open();
  349. for( ; !pADO->Eof; pADO->Next())
  350. {
  351. String IFSC_ID = pADO->FieldByName("IFSC_ID")->AsString;
  352. TIfscTraf *pObj = FIfscLists.Find(IFSC_ID);
  353. if (!pObj) {
  354. pObj = new TIfscTraf();
  355. FIfscLists.Push(IFSC_ID, pObj);
  356. }
  357. pObj->PRCN_DT = pADO->FieldByName("PRCN_DT")->AsString; //N VARCHAR2(14) Y 등록 일시
  358. pObj->SPED = pADO->FieldByName("SPED")->AsInteger; //N NUMBER(3) Y 0 속도
  359. pObj->CMTR_GRAD_CD = pADO->FieldByName("CMTR_GRAD_CD")->AsString; //N VARCHAR2(7) Y 소통 등급 코드 ==>예는 0,1,2,3으로 들어가네???
  360. pObj->TRVL_HH = pADO->FieldByName("TRVL_HH")->AsInteger; //N NUMBER(6) Y 0 통행 시간
  361. }
  362. }
  363. catch(EDatabaseError &E)
  364. {
  365. DBERRORMSG("VMS_IFSC교통정보조회2", String(E.ClassName()), E.Message, sQry);
  366. throw Exception(String(E.ClassName()) + E.Message);
  367. }
  368. catch(Exception &e)
  369. {
  370. DBERRORMSG("VMS_IFSC교통정보조회2", String(e.ClassName()), e.Message, sQry);
  371. throw Exception(String(e.ClassName()) + e.Message);
  372. }
  373. }
  374. __finally
  375. {
  376. if (pADO)
  377. {
  378. pADO->Close();
  379. delete pADO;
  380. }
  381. FIfscLists.UnLock();
  382. }
  383. return true;
  384. }
  385. //---------------------------------------------------------------------------