CDSRepeatCongestF.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. //---------------------------------------------------------------------------
  2. #pragma hdrstop
  3. #include "CDSRepeatCongestF.h"
  4. #include "ITS_OPLibF.h"
  5. //---------------------------------------------------------------------------
  6. #pragma package(smart_init)
  7. TItsRepeatCongest::TItsRepeatCongest()
  8. {
  9. }
  10. //---------------------------------------------------------------------------
  11. TItsRepeatCongest::~TItsRepeatCongest()
  12. {
  13. }
  14. //---------------------------------------------------------------------------
  15. //---------------------------------------------------------------------------
  16. TItsRepeatCongestManager *ItsRepeatCongestManager = NULL;
  17. //---------------------------------------------------------------------------
  18. /*
  19. * RepeatCongest Manager
  20. */
  21. TItsRepeatCongestManager::TItsRepeatCongestManager()
  22. {
  23. }
  24. //---------------------------------------------------------------------------
  25. TItsRepeatCongestManager::~TItsRepeatCongestManager()
  26. {
  27. }
  28. //---------------------------------------------------------------------------
  29. #include <time.h>
  30. AnsiString GetWeekCode(AnsiString ANowTime)
  31. {
  32. time_t lCurTm;
  33. struct tm tmNow, *psCurTm;
  34. sscanf(ANowTime.c_str(), "%04d%02d%02d%02d%02d%02d",
  35. &tmNow.tm_year, &tmNow.tm_mon, &tmNow.tm_mday,
  36. &tmNow.tm_hour, &tmNow.tm_min, &tmNow.tm_sec);
  37. tmNow.tm_year -= 1900; tmNow.tm_mon -= 1; tmNow.tm_isdst = -1;
  38. if ((lCurTm = mktime(&tmNow)) == -1)
  39. {
  40. return "-";
  41. }
  42. psCurTm = localtime(&lCurTm);
  43. // 0--6; Sunday = 0
  44. // 1--7; oracle, SELECt TO_CHAR(SYSDATE, 'D') FROM DUAL;, 주중의 일을 1~7로 표시(일요일이 1)
  45. switch(psCurTm->tm_wday)
  46. {
  47. case 1: return "DTW1"; break; // DTW 월요일 SUNDAY
  48. case 2: return "DTW2"; break; // DTW 화요일 MONDAY
  49. case 3: return "DTW3"; break; // DTW 수요일 WEDNESDAY
  50. case 4: return "DTW4"; break; // DTW 목요일 WEDNESDAY
  51. case 5: return "DTW5"; break; // DTW 금요일 WEDNESDAY
  52. case 6: return "DTW6"; break; // DTW 토요일 WEDNESDAY
  53. case 0: return "DTW7"; break; // DTW 일요일 SATURDAY
  54. }
  55. return "DTW0"; // 여기 들어올수 없음
  56. }
  57. //---------------------------------------------------------------------------
  58. bool TItsRepeatCongestManager::LoadFromDb(TADOConnection *ADbConn/*=NULL*/)
  59. {
  60. bool bResult = true;
  61. String sQry;
  62. TADOQuery *pADO = NULL;
  63. #if 1
  64. String DAY_TYPE_CD = GetWeekCode(Now().FormatString("yyyymmddhhnnss"));
  65. sQry = "SELECT * \r\n"
  66. " FROM TB_REPT_CNGS_SECT \r\n"
  67. " WHERE STAT_YM = TO_CHAR(SYSDATE, 'YYYYMM') \r\n"
  68. " AND TO_CHAR(SYSDATE, 'HH24MI') >= CNFS_STRT_HM \r\n"
  69. " AND TO_CHAR(SYSDATE, 'HH24MI') <= CNFS_END_HM \r\n"
  70. " AND DAY_TYPE_CD = '" + DAY_TYPE_CD + "'";
  71. #else
  72. sQry = "SELECT * \r\n"
  73. " FROM TB_REPT_CNGS_SECT \r\n";
  74. // " ORDER BY IFSC_ID \r\n";
  75. #endif
  76. try
  77. {
  78. FDataSeq = 0;
  79. FLists.Lock();
  80. FListsCnfm.Lock();
  81. FLists.RemoveAll();
  82. FListsCnfm.RemoveAll();
  83. try
  84. {
  85. pADO = new TADOQuery(NULL);
  86. pADO->Close();
  87. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  88. pADO->SQL->Clear();
  89. pADO->SQL->Text = sQry;
  90. pADO->Prepared = true;
  91. pADO->Open();
  92. for( ; !pADO->Eof; pADO->Next())
  93. {
  94. TItsRepeatCongest *pRepeatCongest = new TItsRepeatCongest();
  95. pRepeatCongest->IFSC_ID = pADO->FieldByName("IFSC_ID")->AsString; // 정보제공구간 ID
  96. pRepeatCongest->STAT_YM = pADO->FieldByName("CRTN_YMD")->AsString; // 통계 년월
  97. pRepeatCongest->DAY_TYPE_CD = pADO->FieldByName("DAY_TYPE_CD")->AsString; // 요일 유형 코드
  98. pRepeatCongest->CNFS_STRT_HM = pADO->FieldByName("CNFS_STRT_HM")->AsString; // 혼잡 시작 시분
  99. pRepeatCongest->CNFS_END_HM = pADO->FieldByName("CNFS_END_HM")->AsString; // 혼잡 종료 시분
  100. pRepeatCongest->AVRG_SPED = pADO->FieldByName("AVRG_SPED")->AsString; // 평균 속도
  101. pRepeatCongest->AVRG_TRVL_HH = pADO->FieldByName("AVRG_TRVL_HH")->AsString; // 평균 통행 시간
  102. pRepeatCongest->DCSN_YN = pADO->FieldByName("DCSN_YN")->AsString; // 확정 여부
  103. pRepeatCongest->CRTN_YMD = pADO->FieldByName("CRTN_YMD")->AsString; // 생성 일자
  104. pRepeatCongest->REPT_CNGS_SECT_ORGN_CD = pADO->FieldByName("REPT_CNGS_SECT_ORGN_CD")->AsString; // 반복 정체 구간 원본 코드
  105. if( pRepeatCongest->DCSN_YN != "Y" )
  106. FLists.Push(String(FDataSeq++), pRepeatCongest);
  107. else
  108. FListsCnfm.Push(String(FDataSeq++), pRepeatCongest);
  109. pRepeatCongest->Completed = true;
  110. }
  111. }
  112. catch(EDatabaseError &E)
  113. {
  114. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  115. DBERRORLOG("TItsRepeatCongestManager::LoadFromDb", String(E.ClassName()), E.Message, sQry);
  116. return false;
  117. throw Exception(String(E.ClassName()) + E.Message);
  118. }
  119. catch(Exception &exception)
  120. {
  121. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  122. DBERRORLOG("TItsRepeatCongestManager::LoadFromDb", String(exception.ClassName()), exception.Message, sQry);
  123. return false;
  124. throw Exception(String(exception.ClassName()) + exception.Message);
  125. }
  126. }
  127. __finally
  128. {
  129. if (pADO)
  130. {
  131. pADO->Close();
  132. delete pADO;
  133. }
  134. FLists.UnLock();
  135. FListsCnfm.UnLock();
  136. }
  137. #if 1
  138. return bResult;
  139. #else
  140. return LoadFromDbWthrCnfm(ADbConn);
  141. #endif
  142. }
  143. //---------------------------------------------------------------------------
  144. bool TItsRepeatCongestManager::LoadFromDbWthr(TADOConnection *ADbConn/*=NULL*/)
  145. {
  146. bool bResult = true;
  147. String sQry;
  148. TADOQuery *pADO = NULL;
  149. sQry = "SELECT * \r\n"
  150. " FROM TB_REPT_CNGS_SECT_WTHR \r\n";
  151. // " ORDER BY IFSC_ID \r\n";
  152. try
  153. {
  154. FDataSeqWthr = 0;
  155. FListsWthr.Lock();
  156. FListsCnfmWthr.Lock();
  157. FListsWthr.RemoveAll();
  158. FListsCnfmWthr.RemoveAll();
  159. try
  160. {
  161. pADO = new TADOQuery(NULL);
  162. pADO->Close();
  163. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  164. pADO->SQL->Clear();
  165. pADO->SQL->Text = sQry;
  166. pADO->Prepared = true;
  167. pADO->Open();
  168. for( ; !pADO->Eof; pADO->Next())
  169. {
  170. TItsRepeatCongestWthr *pRepeatCongest = new TItsRepeatCongestWthr();
  171. pRepeatCongest->IFSC_ID = pADO->FieldByName("IFSC_ID")->AsString; // 정보제공구간 ID
  172. pRepeatCongest->CRTN_YMD = pADO->FieldByName("CRTN_YMD")->AsString; // 생성 일자
  173. pRepeatCongest->WTHR_TYPE_CD = pADO->FieldByName("WTHR_TYPE_CD")->AsString; // 기상 코드
  174. pRepeatCongest->CNFS_STRT_HM = pADO->FieldByName("CNFS_STRT_HM")->AsString; // 혼잡 시작 시분
  175. pRepeatCongest->CNFS_END_HM = pADO->FieldByName("CNFS_END_HM")->AsString; // 혼잡 종료 시분
  176. pRepeatCongest->AVRG_SPED = pADO->FieldByName("AVRG_SPED")->AsString; // 평균 속도
  177. pRepeatCongest->AVRG_TRVL_HH = pADO->FieldByName("AVRG_TRVL_HH")->AsString; // 평균 통행 시간
  178. pRepeatCongest->DCSN_YN = pADO->FieldByName("DCSN_YN")->AsString; // 확정 여부
  179. pRepeatCongest->REPT_CNGS_SECT_ORGN_CD = pADO->FieldByName("REPT_CNGS_SECT_ORGN_CD")->AsString; // 반복 정체 구간 원본 코드
  180. if( pRepeatCongest->DCSN_YN != "Y" )
  181. FListsWthr.Push(String(FDataSeqWthr++), pRepeatCongest);
  182. else
  183. FListsCnfmWthr.Push(String(FDataSeqWthr++), pRepeatCongest);
  184. pRepeatCongest->Completed = true;
  185. }
  186. }
  187. catch(EDatabaseError &E)
  188. {
  189. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  190. DBERRORLOG("TItsRepeatCongestManager::LoadFromDbWthr", String(E.ClassName()), E.Message, sQry);
  191. return false;
  192. throw Exception(String(E.ClassName()) + E.Message);
  193. }
  194. catch(Exception &exception)
  195. {
  196. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  197. DBERRORLOG("TItsRepeatCongestManager::LoadFromDbWthr", String(exception.ClassName()), exception.Message, sQry);
  198. return false;
  199. throw Exception(String(exception.ClassName()) + exception.Message);
  200. }
  201. }
  202. __finally
  203. {
  204. if (pADO)
  205. {
  206. pADO->Close();
  207. delete pADO;
  208. }
  209. FListsWthr.UnLock();
  210. FListsCnfmWthr.UnLock();
  211. }
  212. return bResult;
  213. }
  214. //---------------------------------------------------------------------------
  215. bool TItsRepeatCongestManager::LoadFromDbWthrCnfm(TADOConnection *ADbConn/*=NULL*/)
  216. {
  217. bool bResult = true;
  218. String sQry;
  219. TADOQuery *pADO = NULL;
  220. sQry = "SELECT * \r\n"
  221. " FROM TB_REPT_CNGS_SECT_WTHR \r\n"
  222. " WHERE DCSN_YN = 'Y' \r\n";
  223. // " ORDER BY IFSC_ID \r\n";
  224. try
  225. {
  226. FDataSeqWthr = 0;
  227. FListsWthr.Lock();
  228. FListsCnfmWthr.Lock();
  229. FListsWthr.RemoveAll();
  230. FListsCnfmWthr.RemoveAll();
  231. try
  232. {
  233. pADO = new TADOQuery(NULL);
  234. pADO->Close();
  235. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  236. pADO->SQL->Clear();
  237. pADO->SQL->Text = sQry;
  238. pADO->Prepared = true;
  239. pADO->Open();
  240. for( ; !pADO->Eof; pADO->Next())
  241. {
  242. TItsRepeatCongestWthr *pRepeatCongest = new TItsRepeatCongestWthr();
  243. pRepeatCongest->IFSC_ID = pADO->FieldByName("IFSC_ID")->AsString; // 정보제공구간 ID
  244. pRepeatCongest->CRTN_YMD = pADO->FieldByName("CRTN_YMD")->AsString; // 생성 일자
  245. pRepeatCongest->WTHR_TYPE_CD = pADO->FieldByName("WTHR_TYPE_CD")->AsString; // 기상 코드
  246. pRepeatCongest->CNFS_STRT_HM = pADO->FieldByName("CNFS_STRT_HM")->AsString; // 혼잡 시작 시분
  247. pRepeatCongest->CNFS_END_HM = pADO->FieldByName("CNFS_END_HM")->AsString; // 혼잡 종료 시분
  248. pRepeatCongest->AVRG_SPED = pADO->FieldByName("AVRG_SPED")->AsString; // 평균 속도
  249. pRepeatCongest->AVRG_TRVL_HH = pADO->FieldByName("AVRG_TRVL_HH")->AsString; // 평균 통행 시간
  250. pRepeatCongest->DCSN_YN = pADO->FieldByName("DCSN_YN")->AsString; // 확정 여부
  251. pRepeatCongest->REPT_CNGS_SECT_ORGN_CD = pADO->FieldByName("REPT_CNGS_SECT_ORGN_CD")->AsString; // 반복 정체 구간 원본 코드
  252. if( pRepeatCongest->DCSN_YN != "Y" )
  253. FListsWthr.Push(String(FDataSeqWthr++), pRepeatCongest);
  254. else
  255. FListsCnfmWthr.Push(String(FDataSeqWthr++), pRepeatCongest);
  256. pRepeatCongest->Completed = true;
  257. }
  258. }
  259. catch(EDatabaseError &E)
  260. {
  261. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  262. DBERRORLOG("TItsRepeatCongestManager::LoadFromDbWthrCnfm", String(E.ClassName()), E.Message, sQry);
  263. return false;
  264. throw Exception(String(E.ClassName()) + E.Message);
  265. }
  266. catch(Exception &exception)
  267. {
  268. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  269. DBERRORLOG("TItsRepeatCongestManager::LoadFromDbWthrCnfm", String(exception.ClassName()), exception.Message, sQry);
  270. return false;
  271. throw Exception(String(exception.ClassName()) + exception.Message);
  272. }
  273. }
  274. __finally
  275. {
  276. if (pADO)
  277. {
  278. pADO->Close();
  279. delete pADO;
  280. }
  281. FListsWthr.UnLock();
  282. FListsCnfmWthr.UnLock();
  283. }
  284. return bResult;
  285. }
  286. //---------------------------------------------------------------------------