CDSIfscF.cpp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. //---------------------------------------------------------------------------
  2. #pragma hdrstop
  3. #include "CDSIfscF.h"
  4. #include "CDSCtlrF.h"
  5. #include "CDSManagerF.h"
  6. #include "VMSCommLibF.h"
  7. //---------------------------------------------------------------------------
  8. #pragma package(smart_init)
  9. //---------------------------------------------------------------------------
  10. TCDSIfsc::TCDSIfsc()
  11. {
  12. CNGST_CNT = 0;
  13. Init();
  14. }
  15. //---------------------------------------------------------------------------
  16. TCDSIfsc::~TCDSIfsc()
  17. {
  18. }
  19. //---------------------------------------------------------------------------
  20. void TCDSIfsc::Init()
  21. {
  22. PRCN_DT = "";
  23. CMTR_GRAD_CD = "0";
  24. SPED = 0;
  25. TRVL_HH = 0;
  26. }
  27. //---------------------------------------------------------------------------
  28. //---------------------------------------------------------------------------
  29. TCDSIfscManager *CDSIfscManager = NULL;
  30. //---------------------------------------------------------------------------
  31. TCDSIfscManager::TCDSIfscManager()
  32. {
  33. }
  34. //---------------------------------------------------------------------------
  35. TCDSIfscManager::~TCDSIfscManager()
  36. {
  37. FLists.RemoveAll();
  38. }
  39. //---------------------------------------------------------------------------
  40. int TCDSIfscManager::LoadVmsIfscInfo(TADOConnection *ADbConn)
  41. {
  42. String sQry;
  43. TADOQuery *pADO = NULL;
  44. int nSelCnt = 0;
  45. try
  46. {
  47. CtlrItr it;
  48. for(it=CDSCtlrManager->FLists.FObjects.begin(); it != CDSCtlrManager->FLists.FObjects.end(); ++it)
  49. {
  50. TCDSCtlr *pObj = (TCDSCtlr*)it->second;
  51. //기존 제공구간정보를 모두 삭제
  52. //pObj->FIfscLists.RemoveAll();
  53. //기존삭제하던것을 삭제하지 않고 플래그를 설정해서 처리하자.
  54. FOR_STL(TVmsIfsc*, pIfsc, pObj->FIfscLists)
  55. {
  56. pIfsc->IsUsed = false;
  57. }
  58. }
  59. }
  60. catch(Exception &e)
  61. {
  62. }
  63. DWORD dwTick = GetTickCount();
  64. SELSTART;
  65. sQry = "SELECT A.VMS_CTLR_NMBR, B.VMS_IFSC_ID, \r\n"
  66. " B.DSPL_PRRT, C.AXIS_YN, C.CNGS_SPD, \r\n"
  67. " B.CNGS_CNFM_YN, B.CNGS_CNFM_SPED \r\n"
  68. " FROM TB_VMS_CTLR A, \r\n"
  69. " TB_VMS_RLTN_IFSC B, \r\n"
  70. " TB_VMS_IFSC C \r\n"
  71. " WHERE A.VMS_CTLR_NMBR = B.VMS_CTLR_NMBR \r\n"
  72. " AND B.VMS_IFSC_ID = C.VMS_IFSC_ID \r\n"
  73. " AND C.USE_YN = 'Y' \r\n"
  74. " AND A.DEL_YN = 'N' \r\n"
  75. " ORDER BY A.VMS_CTLR_NMBR, B.DSPL_PRRT \r\n";
  76. try
  77. {
  78. try
  79. {
  80. pADO = new TADOQuery(NULL);
  81. pADO->Connection = ADbConn;
  82. SQLText(pADO, sQry, true);
  83. SQLOpen(pADO);
  84. for( ; !pADO->Eof; pADO->Next())
  85. {
  86. AnsiString VMS_CTLR_NMBR = pADO->FieldByName("VMS_CTLR_NMBR")->AsString.Trim();
  87. TCDSCtlr *pObj = CDSCtlrManager->FLists.Find(VMS_CTLR_NMBR);
  88. if (!pObj) continue;
  89. #if 0
  90. TVmsIfsc *pIfsc = new TVmsIfsc();
  91. pIfsc->VMS_IFSC_ID = pADO->FieldByName("VMS_IFSC_ID")->AsString;
  92. pIfsc->AXIS_YN = pADO->FieldByName("AXIS_YN")->AsString;
  93. pIfsc->AXIS_YN = pADO->FieldByName("AXIS_YN")->AsString;
  94. pIfsc->CNGS_SPD = pADO->FieldByName("CNGS_SPD")->AsInteger;
  95. pIfsc->CNGS_CNFM_YN = pADO->FieldByName("CNGS_CNFM_YN")->AsString == "Y" ? true : false;
  96. pIfsc->CNGS_CNFM_SPED = pADO->FieldByName("CNGS_CNFM_SPED")->AsInteger;
  97. pObj->FIfscLists.Push(pIfsc->DSPL_PRRT, pIfsc);
  98. #else
  99. AnsiString VMS_IFSC_ID = pADO->FieldByName("VMS_IFSC_ID")->AsString;
  100. TVmsIfsc *pIfsc = pObj->FIfscLists.Find(VMS_IFSC_ID);
  101. if (!pIfsc)
  102. {
  103. pIfsc = new TVmsIfsc();
  104. if (!pIfsc) continue;
  105. pIfsc->VMS_IFSC_ID = VMS_IFSC_ID;
  106. pObj->FIfscLists.Push(pIfsc->VMS_IFSC_ID, pIfsc);
  107. }
  108. pIfsc->IsUsed = true;
  109. bool CNGS_CNFM_YN = pADO->FieldByName("CNGS_CNFM_YN")->AsString == "Y" ? true : false;
  110. int CNGS_CNFM_SPED = pADO->FieldByName("CNGS_SPD")->AsInteger;
  111. if (CDSManager->FIsStaticCycle)
  112. {
  113. //정체판정 정보가 변경되었으면 정체판정횟수를 초기화한다.
  114. if (pIfsc->CNGS_CNFM_YN != CNGS_CNFM_YN || pIfsc->CNGS_CNFM_SPED != CNGS_CNFM_SPED)
  115. {
  116. pIfsc->CNGST_CNT = 0;
  117. }
  118. }
  119. pIfsc->DSPL_PRRT = pADO->FieldByName("DSPL_PRRT")->AsInteger;
  120. pIfsc->AXIS_YN = pADO->FieldByName("AXIS_YN")->AsString;
  121. pIfsc->AXIS_YN = pADO->FieldByName("AXIS_YN")->AsString;
  122. pIfsc->CNGS_SPD = pADO->FieldByName("CNGS_SPD")->AsInteger;
  123. pIfsc->CNGS_CNFM_YN = CNGS_CNFM_YN;
  124. pIfsc->CNGS_CNFM_SPED = CNGS_CNFM_SPED;
  125. #endif
  126. nSelCnt++;
  127. }
  128. }
  129. catch(EDatabaseError &E)
  130. {
  131. DBERROR(String(E.ClassName()), E.Message, sQry);
  132. return -1;
  133. }
  134. catch(Exception &e)
  135. {
  136. DBERROR(String(e.ClassName()), e.Message, sQry);
  137. return -1;
  138. }
  139. }
  140. __finally
  141. {
  142. SQLFree(pADO);
  143. }
  144. SELEND(nSelCnt, dwTick);
  145. if (JOBTIME(dwTick) > g_AppCfg.JobTimeout) {
  146. TIMEDELAY(nSelCnt, dwTick);
  147. }
  148. return nSelCnt;
  149. }
  150. //---------------------------------------------------------------------------
  151. int TCDSIfscManager::LoadVmsIfscTrafficInfo(TADOConnection *ADbConn)
  152. {
  153. String sQry;
  154. TADOQuery *pADO = NULL;
  155. int nSelCnt = 0;
  156. DWORD dwTick = GetTickCount();
  157. SELSTART;
  158. #if 0
  159. sQry = "SELECT A.VMS_IFSC_ID, A.VMS_IFSC_NM, A.DSPL_STRT_NODE_NM, A.DSPL_END_NODE_NM, \r\n"
  160. " A.ROAD_NM, A.SPOT_NM, \r\n"
  161. " A.DETR_ID, A.AXIS_YN, A.CNGS_SPD, \r\n"
  162. " NVL(B.PRCN_DT, '') AS PRCN_DT, \r\n"
  163. " NVL(B.CMTR_GRAD_CD, '0') AS CMTR_GRAD_CD, \r\n"
  164. " NVL(B.SPED, 0) AS SPED, \r\n"
  165. " NVL(B.TRVL_HH, 0) AS TRVL_HH \r\n"
  166. " FROM TB_VMS_IFSC A, \r\n"
  167. " (SELECT * \r\n"
  168. " FROM TB_VMS_IFSC_TRAF \r\n"
  169. " WHERE PRCN_DT >= TO_CHAR(SYSDATE-10/1440, 'YYYYMMDDHH24MISS') ) B \r\n"
  170. " WHERE A.VMS_IFSC_ID = B.VMS_IFSC_ID(+) \r\n";
  171. #else
  172. //TODO: 기존 테이블 호환을 위해 PRCN_DT 컬럼을 RGST_DT 로 변경
  173. sQry = "SELECT A.VMS_IFSC_ID, A.VMS_IFSC_NM, A.DSPL_STRT_NODE_NM, A.DSPL_END_NODE_NM, \r\n"
  174. " A.ROAD_NM, A.SPOT_NM, \r\n"
  175. " A.DETR_ID, A.AXIS_YN, A.CNGS_SPD, \r\n"
  176. " NVL(B.RGST_DT, '') AS PRCN_DT, \r\n"
  177. " NVL(B.CMTR_GRAD_CD, '0') AS CMTR_GRAD_CD, \r\n"
  178. " NVL(B.SPED, 0) AS SPED, \r\n"
  179. " NVL(B.TRVL_HH, 0) AS TRVL_HH \r\n"
  180. " FROM TB_VMS_IFSC A, \r\n"
  181. " (SELECT * \r\n"
  182. " FROM TB_VMS_IFSC_TRAF \r\n"
  183. " WHERE RGST_DT >= TO_CHAR(SYSDATE-10/1440, 'YYYYMMDDHH24MISS') ) B \r\n"
  184. " WHERE A.VMS_IFSC_ID = B.VMS_IFSC_ID(+) \r\n";
  185. #endif
  186. FOR_STL(TCDSIfsc*, pObj, CDSIfscManager->FLists)
  187. {
  188. pObj->CMTR_GRAD_CD = "0";
  189. pObj->TRVL_HH = 0;
  190. pObj->SPED = 0;
  191. }
  192. try
  193. {
  194. TCDSIfsc *pIfsc;
  195. try
  196. {
  197. pADO = new TADOQuery(NULL);
  198. pADO->Connection = ADbConn;
  199. SQLText(pADO, sQry, true);
  200. SQLOpen(pADO);
  201. for( ; !pADO->Eof; pADO->Next())
  202. {
  203. AnsiString VMS_IFSC_ID = pADO->FieldByName("VMS_IFSC_ID")->AsString.Trim();
  204. pIfsc = FLists.Find(VMS_IFSC_ID);
  205. if (!pIfsc)
  206. {
  207. pIfsc = new TCDSIfsc();
  208. pIfsc->VMS_IFSC_ID = VMS_IFSC_ID;
  209. FLists.Push(pIfsc->VMS_IFSC_ID, pIfsc);
  210. }
  211. pIfsc->VMS_IFSC_NM = pADO->FieldByName("VMS_IFSC_NM")->AsString;
  212. pIfsc->DSPL_STRT_NODE_NM = pADO->FieldByName("DSPL_STRT_NODE_NM")->AsString;
  213. pIfsc->DSPL_END_NODE_NM = pADO->FieldByName("DSPL_END_NODE_NM")->AsString;
  214. pIfsc->DETR_ID = pADO->FieldByName("DETR_ID")->AsString;
  215. pIfsc->ROAD_NM = pADO->FieldByName("ROAD_NM")->AsString;
  216. pIfsc->SPOT_NM = pADO->FieldByName("SPOT_NM")->AsString;
  217. pIfsc->AXIS_YN = pADO->FieldByName("AXIS_YN")->AsString;
  218. pIfsc->PRCN_DT = pADO->FieldByName("PRCN_DT")->AsString;
  219. pIfsc->CMTR_GRAD_CD = pADO->FieldByName("CMTR_GRAD_CD")->AsString;
  220. pIfsc->SPED = pADO->FieldByName("SPED")->AsInteger;
  221. pIfsc->TRVL_HH = pADO->FieldByName("TRVL_HH")->AsInteger;
  222. if (pIfsc->CMTR_GRAD_CD != "0" && pIfsc->TRVL_HH <= 0) {
  223. pIfsc->TRVL_HH = 1;
  224. }
  225. nSelCnt++;
  226. }
  227. }
  228. catch(EDatabaseError &E)
  229. {
  230. DBERROR(String(E.ClassName()), E.Message, sQry);
  231. return -1;
  232. }
  233. catch(Exception &e)
  234. {
  235. DBERROR(String(e.ClassName()), e.Message, sQry);
  236. return -1;
  237. }
  238. }
  239. __finally
  240. {
  241. SQLFree(pADO);
  242. }
  243. if (0)
  244. {
  245. FOR_STL(TCDSIfsc*, pTmp, FLists)
  246. {
  247. try
  248. {
  249. MDEBUG("Ifsc: %s, Grad: %s", pTmp->VMS_IFSC_ID.c_str(), pTmp->CMTR_GRAD_CD.c_str());
  250. }
  251. catch(Exception &e)
  252. {
  253. }
  254. }
  255. }
  256. SELEND(nSelCnt, dwTick);
  257. if (JOBTIME(dwTick) > g_AppCfg.JobTimeout) {
  258. TIMEDELAY(nSelCnt, dwTick);
  259. }
  260. return nSelCnt;
  261. }
  262. //---------------------------------------------------------------------------