CDSIfsc_VMSF.cpp 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. //---------------------------------------------------------------------------
  2. #pragma hdrstop
  3. #include "CDSIfsc_VMSF.h"
  4. #include "AppGlobalF.h"
  5. //---------------------------------------------------------------------------
  6. #pragma package(smart_init)
  7. //---------------------------------------------------------------------------
  8. TIfsc::TIfsc()
  9. {
  10. InitTraffic();
  11. }
  12. //---------------------------------------------------------------------------
  13. TIfsc::~TIfsc()
  14. {
  15. }
  16. //---------------------------------------------------------------------------
  17. void TIfsc::InitTraffic()
  18. {
  19. PRCN_DT = ""; //N VARCHAR2(14) Y 가공 일시
  20. TFVL = 0; //N NUMBER(6) Y 0 교통량
  21. SPED = 0; //N NUMBER(3) Y 0 속도
  22. PTRN_SPED = 0; //N NUMBER(3) Y 0 패턴 속도
  23. OCPY_RATE = 0; //N NUMBER(5,2) Y 0 점유 율
  24. TRVL_HH = 0; //N NUMBER(6) Y 0 통행 시간
  25. CMTR_GRAD_CD = "0"; //N VARCHAR2(7) Y 소통 등급 코드
  26. DATA_NUM = 0; //N NUMBER(3) Y 0 데이터 개수
  27. }
  28. //---------------------------------------------------------------------------
  29. //---------------------------------------------------------------------------
  30. TIfscManager *IfscManager = NULL;
  31. //---------------------------------------------------------------------------
  32. //---------------------------------------------------------------------------
  33. TIfscManager::TIfscManager()
  34. {
  35. }
  36. //---------------------------------------------------------------------------
  37. TIfscManager::~TIfscManager()
  38. {
  39. FLists.RemoveAll();
  40. }
  41. //---------------------------------------------------------------------------
  42. void TIfscManager::InitTraffic()
  43. {
  44. try
  45. {
  46. FLists.Lock();
  47. FOR_STL(TIfsc*, pObj, FLists)
  48. {
  49. pObj->InitTraffic();
  50. }
  51. }
  52. __finally
  53. {
  54. FLists.UnLock();
  55. }
  56. }
  57. //---------------------------------------------------------------------------
  58. bool TIfscManager::LoadFromDb(TADOConnection *ADbConn/*=NULL*/)
  59. {
  60. String sQry;
  61. TADOQuery *pADO = NULL;
  62. sQry = "SELECT A.* \r\n"
  63. " FROM TB_IFSC A \r\n";
  64. try
  65. {
  66. FLists.Lock();
  67. try
  68. {
  69. pADO = new TADOQuery(NULL);
  70. pADO->Close();
  71. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  72. pADO->SQL->Clear();
  73. pADO->SQL->Text = sQry;
  74. pADO->Open();
  75. for( ; !pADO->Eof; pADO->Next())
  76. {
  77. String DEL_YN = pADO->FieldByName("DEL_YN")->AsString;
  78. if (DEL_YN == "Y") continue;
  79. TIfsc *pObj = new TIfsc();
  80. pObj->IFSC_ID = pADO->FieldByName("IFSC_ID")->AsString; //N NUMBER(10) N 정보제공구간 ID
  81. pObj->IFSC_NM = pADO->FieldByName("IFSC_NM")->AsString; //N VARCHAR2(100) Y 정보제공구간 명
  82. pObj->DRCT_CD = pADO->FieldByName("DRCT_CD")->AsString; //N VARCHAR2(7) Y 방향 코드
  83. pObj->STRT_NM = pADO->FieldByName("STRT_NM")->AsString; //N VARCHAR2(100) Y 시점 명
  84. pObj->END_NM = pADO->FieldByName("END_NM")->AsString; //N VARCHAR2(100) Y 종점 명
  85. pObj->SECT_LNGT = pADO->FieldByName("SECT_LNGT")->AsInteger; //N NUMBER(5) Y 0 구간 길이
  86. pObj->EXTR_CNCT_SECT_YN = pADO->FieldByName("EXTR_CNCT_SECT_YN")->AsString; //N CHAR(1) Y 'N' 외부 연계 구간 여부
  87. pObj->DEL_YN = pADO->FieldByName("DEL_YN")->AsString; //N CHAR(1) Y 'N' 삭제 여부
  88. pObj->RMRK = pADO->FieldByName("RMRK")->AsString; //N VARCHAR2(600) Y 비고
  89. pObj->F_NODE_ID = pADO->FieldByName("F_NODE_ID")->AsString; //N NUMBER(10) Y 시작 노드 ID
  90. pObj->T_NODE_ID = pADO->FieldByName("T_NODE_ID")->AsString; //N NUMBER(10) Y 종료 노드 ID
  91. pObj->SECT_GRAD_CD = pADO->FieldByName("SECT_GRAD_CD")->AsString; //N VARCHAR2(7) Y 구간 등급 코드
  92. pObj->AREA_CD = pADO->FieldByName("AREA_CD")->AsString; //N VARCHAR2(7) Y 지역 코드
  93. FLists.Push(pObj->IFSC_ID, pObj);
  94. }
  95. }
  96. catch(EDatabaseError &E)
  97. {
  98. DBERRORMSG("IFSC정보조회", String(E.ClassName()), E.Message, sQry);
  99. throw Exception(String(E.ClassName()) + E.Message);
  100. }
  101. catch(Exception &e)
  102. {
  103. DBERRORMSG("IFSC정보조회", String(e.ClassName()), e.Message, sQry);
  104. throw Exception(String(e.ClassName()) + e.Message);
  105. }
  106. }
  107. __finally
  108. {
  109. if (pADO)
  110. {
  111. pADO->Close();
  112. delete pADO;
  113. }
  114. FLists.UnLock();
  115. }
  116. return true;
  117. }
  118. //---------------------------------------------------------------------------
  119. bool TIfscManager::LoadTraffic(TADOConnection *ADbConn/*=NULL*/)
  120. {
  121. String sQry;
  122. TADOQuery *pADO = NULL;
  123. InitTraffic();
  124. sQry = "SELECT IFSC_ID AS LINKID, NVL(PRCN_DT, '19000101000000') AS PRCN_DT, \r\n"
  125. " NVL(TFVL, 0) AS TFVL, NVL(SPED, 0) AS SPED, \r\n"
  126. " NVL(PTRN_SPED, 0) AS PTRN_SPED, NVL(OCPY_RATE, 0) AS OCPY_RATE, \r\n"
  127. " NVL(TRVL_HH, 0) AS TRVL_HH, \r\n"
  128. " DECODE(CMTR_GRAD_CD, 'LTC1', '1', \r\n"
  129. " 'LTC2', '2', \r\n"
  130. " 'LTC3', '3', '0') AS CMTR_GRAD_CD, \r\n"
  131. " NVL(DATA_NUM, 0) AS DATA_NUM \r\n"
  132. " FROM TB_IFSC_TRAF \r\n"
  133. " WHERE PRCN_DT > TO_CHAR(SYSDATE - 5 / 1440, 'YYYYMMDDHH24MISS') \r\n";
  134. #if 0
  135. sQry = "SELECT 2 AS LEVL, A.IFSC_ID AS LINKID, NVL(B.SPED, 0) AS SPEED, NVL(CMTR_GRAD_CD, 'LTC0') CMTR_GRAD_CD, \r\n"
  136. " DECODE(CMTR_GRAD_CD, 'LTC1', '1', 'LTC2', '2', 'LTC3', '3', '0') TRF_GRADE, \r\n"
  137. " NVL(B.PRCN_DT, '19000101000000') AS REGDATE, \r\n"
  138. " NVL(B.DATA_NUM, 0) AS DATACNT, \r\n"
  139. " NVL(B.TRVL_HH, 0) AS TRVTM \r\n"
  140. " FROM TB_IFSC A, \r\n"
  141. " (SELECT * \r\n"
  142. " FROM TB_IFSC_TRAF \r\n"
  143. //" WHERE PRCN_DT > TO_CHAR(SYSDATE - 5 / 1440, 'YYYYMMDDHH24MISS') \r\n"
  144. " ) B \r\n"
  145. " WHERE A.IFSC_ID = B.IFSC_ID(+) \r\n";
  146. #endif
  147. try
  148. {
  149. FLists.Lock();
  150. try
  151. {
  152. pADO = new TADOQuery(NULL);
  153. pADO->Close();
  154. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  155. pADO->SQL->Clear();
  156. pADO->SQL->Text = sQry;
  157. pADO->Open();
  158. for( ; !pADO->Eof; pADO->Next())
  159. {
  160. String LINKID = pADO->FieldByName("LINKID")->AsString;
  161. TIfsc *pObj = FLists.Find(LINKID);
  162. if (!pObj) continue;
  163. pObj->PRCN_DT = pADO->FieldByName("PRCN_DT")->AsString; //N VARCHAR2(14) Y 가공 일시
  164. pObj->TFVL = pADO->FieldByName("TFVL")->AsInteger; //N NUMBER(6) Y 0 교통량
  165. pObj->SPED = pADO->FieldByName("SPED")->AsInteger; //N NUMBER(3) Y 0 속도
  166. pObj->PTRN_SPED = pADO->FieldByName("PTRN_SPED")->AsInteger; //N NUMBER(3) Y 0 패턴 속도
  167. pObj->OCPY_RATE = pADO->FieldByName("OCPY_RATE")->AsFloat; //N NUMBER(5,2) Y 0 점유 율
  168. pObj->TRVL_HH = pADO->FieldByName("TRVL_HH")->AsInteger; //N NUMBER(6) Y 0 통행 시간
  169. pObj->CMTR_GRAD_CD = pADO->FieldByName("CMTR_GRAD_CD")->AsString; //N VARCHAR2(7) Y 소통 등급 코드
  170. pObj->DATA_NUM = pADO->FieldByName("DATA_NUM")->AsInteger; //N NUMBER(3) Y 0 데이터 개수
  171. }
  172. }
  173. catch(EDatabaseError &E)
  174. {
  175. DBERRORMSG("IFSC교통정보조회", String(E.ClassName()), E.Message, sQry);
  176. throw Exception(String(E.ClassName()) + E.Message);
  177. }
  178. catch(Exception &e)
  179. {
  180. DBERRORMSG("IFSC교통정보조회", String(e.ClassName()), e.Message, sQry);
  181. throw Exception(String(e.ClassName()) + e.Message);
  182. }
  183. }
  184. __finally
  185. {
  186. if (pADO)
  187. {
  188. pADO->Close();
  189. delete pADO;
  190. }
  191. FLists.UnLock();
  192. }
  193. return true;
  194. }
  195. //---------------------------------------------------------------------------