CDSRepeatCongestF.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. //---------------------------------------------------------------------------
  2. #pragma hdrstop
  3. #include "CDSRepeatCongestF.h"
  4. #include "AppGlobalF.h"
  5. //---------------------------------------------------------------------------
  6. #pragma package(smart_init)
  7. TItsRepeatCongest::TItsRepeatCongest()
  8. {
  9. Clear();
  10. }
  11. //---------------------------------------------------------------------------
  12. void TItsRepeatCongest::Clear()
  13. {
  14. #if 0
  15. //FIFSC_ID = ""; // 정보제공구간 ID
  16. FSTAT_YM = ""; // 통계 년월
  17. FDAY_TYPE_CD = ""; // 요일 유형 코드
  18. FCNFS_STRT_HM = ""; // 혼잡 시작 시분
  19. FCNFS_END_HM = ""; // 혼잡 종료 시분
  20. FAVRG_SPED = ""; // 평균 속도
  21. FAVRG_TRVL_HH = ""; // 평균 통행 시간
  22. FDCSN_YN = ""; // 확정 여부
  23. FCRTN_YMD = ""; // 생성 일자
  24. FREPT_CNGS_SECT_ORGN_CD = ""; // 반복 정체 구간 원본 코드
  25. #endif
  26. }
  27. //---------------------------------------------------------------------------
  28. TItsRepeatCongest::~TItsRepeatCongest()
  29. {
  30. }
  31. //---------------------------------------------------------------------------
  32. void TItsRepeatCongest::SetValue(String &AOrgValue, String AValue)
  33. {
  34. if (AOrgValue != AValue)
  35. {
  36. AOrgValue = AValue;
  37. if (FCompleted) FModified = true;
  38. }
  39. }
  40. //---------------------------------------------------------------------------
  41. void TItsRepeatCongest::SetFIFSC_ID(String AValue)
  42. {
  43. SetValue(FIFSC_ID, AValue);
  44. }
  45. //---------------------------------------------------------------------------
  46. void TItsRepeatCongest::SetFSTAT_YM(String AValue)
  47. {
  48. SetValue(FSTAT_YM, AValue);
  49. }
  50. //---------------------------------------------------------------------------
  51. void TItsRepeatCongest::SetFDAY_TYPE_CD(String AValue)
  52. {
  53. SetValue(FDAY_TYPE_CD, AValue);
  54. }
  55. //---------------------------------------------------------------------------
  56. void TItsRepeatCongest::SetFCNFS_STRT_HM(String AValue)
  57. {
  58. SetValue(FCNFS_STRT_HM, AValue);
  59. }
  60. //---------------------------------------------------------------------------
  61. void TItsRepeatCongest::SetFCNFS_END_HM(String AValue)
  62. {
  63. SetValue(FCNFS_END_HM, AValue);
  64. }
  65. //---------------------------------------------------------------------------
  66. void TItsRepeatCongest::SetFAVRG_SPED(String AValue)
  67. {
  68. SetValue(FAVRG_SPED, AValue);
  69. }
  70. //---------------------------------------------------------------------------
  71. void TItsRepeatCongest::SetFAVRG_TRVL_HH(String AValue)
  72. {
  73. SetValue(FAVRG_TRVL_HH, AValue);
  74. }
  75. //---------------------------------------------------------------------------
  76. void TItsRepeatCongest::SetFDCSN_YN(String AValue)
  77. {
  78. SetValue(FDCSN_YN, AValue);
  79. }
  80. //---------------------------------------------------------------------------
  81. void TItsRepeatCongest::SetFCRTN_YMD(String AValue)
  82. {
  83. SetValue(FCRTN_YMD, AValue);
  84. }
  85. //---------------------------------------------------------------------------
  86. void TItsRepeatCongest::SetFREPT_CNGS_SECT_ORGN_CD(String AValue)
  87. {
  88. SetValue(FREPT_CNGS_SECT_ORGN_CD, AValue);
  89. }
  90. //---------------------------------------------------------------------------
  91. //---------------------------------------------------------------------------
  92. TItsRepeatCongestManager *ItsRepeatCongestManager = NULL;
  93. //---------------------------------------------------------------------------
  94. /*
  95. * RepeatCongest Manager
  96. */
  97. TItsRepeatCongestManager::TItsRepeatCongestManager()
  98. {
  99. }
  100. //---------------------------------------------------------------------------
  101. TItsRepeatCongestManager::~TItsRepeatCongestManager()
  102. {
  103. }
  104. //---------------------------------------------------------------------------
  105. bool TItsRepeatCongestManager::LoadFromDb(TADOConnection *ADbConn/*=NULL*/)
  106. {
  107. bool bResult = true;
  108. String sQry;
  109. TADOQuery *pADO = NULL;
  110. sQry = "SELECT * \r\n"
  111. " FROM TB_REPT_CNGS_SECT \r\n";
  112. // " ORDER BY IFSC_ID \r\n";
  113. try
  114. {
  115. FDataSeq = 0;
  116. FLists.Lock();
  117. FListsCnfm.Lock();
  118. FLists.RemoveAll();
  119. FListsCnfm.RemoveAll();
  120. try
  121. {
  122. pADO = new TADOQuery(NULL);
  123. pADO->Close();
  124. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  125. pADO->SQL->Clear();
  126. pADO->SQL->Text = sQry;
  127. pADO->Open();
  128. for( ; !pADO->Eof; pADO->Next())
  129. {
  130. TItsRepeatCongest *pRepeatCongest = new TItsRepeatCongest();
  131. pRepeatCongest->FIFSC_ID = pADO->FieldByName("IFSC_ID")->AsString; // 정보제공구간 ID
  132. pRepeatCongest->FSTAT_YM = pADO->FieldByName("CRTN_YMD")->AsString; // 통계 년월
  133. pRepeatCongest->FDAY_TYPE_CD = pADO->FieldByName("DAY_TYPE_CD")->AsString; // 요일 유형 코드
  134. pRepeatCongest->FCNFS_STRT_HM = pADO->FieldByName("CNFS_STRT_HM")->AsString; // 혼잡 시작 시분
  135. pRepeatCongest->FCNFS_END_HM = pADO->FieldByName("CNFS_END_HM")->AsString; // 혼잡 종료 시분
  136. pRepeatCongest->FAVRG_SPED = pADO->FieldByName("AVRG_SPED")->AsString; // 평균 속도
  137. pRepeatCongest->FAVRG_TRVL_HH = pADO->FieldByName("AVRG_TRVL_HH")->AsString; // 평균 통행 시간
  138. pRepeatCongest->FDCSN_YN = pADO->FieldByName("DCSN_YN")->AsString; // 확정 여부
  139. pRepeatCongest->FCRTN_YMD = pADO->FieldByName("CRTN_YMD")->AsString; // 생성 일자
  140. pRepeatCongest->FREPT_CNGS_SECT_ORGN_CD = pADO->FieldByName("REPT_CNGS_SECT_ORGN_CD")->AsString; // 반복 정체 구간 원본 코드
  141. if( pRepeatCongest->FDCSN_YN != "Y" )
  142. FLists.Push(String(FDataSeq++), pRepeatCongest);
  143. else
  144. FListsCnfm.Push(String(FDataSeq++), pRepeatCongest);
  145. pRepeatCongest->Completed = true;
  146. }
  147. }
  148. catch(EDatabaseError &E)
  149. {
  150. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  151. DBERRORLOG("TItsRepeatCongestManager::LoadFromDb", String(E.ClassName()), E.Message, sQry);
  152. return false;
  153. throw Exception(String(E.ClassName()) + E.Message);
  154. }
  155. catch(Exception &exception)
  156. {
  157. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  158. DBERRORLOG("TItsRepeatCongestManager::LoadFromDb", String(exception.ClassName()), exception.Message, sQry);
  159. return false;
  160. throw Exception(String(exception.ClassName()) + exception.Message);
  161. }
  162. }
  163. __finally
  164. {
  165. if (pADO)
  166. {
  167. pADO->Close();
  168. delete pADO;
  169. }
  170. FLists.UnLock();
  171. FListsCnfm.UnLock();
  172. }
  173. #if 1
  174. return bResult;
  175. #else
  176. return LoadFromDbWthrCnfm(ADbConn);
  177. #endif
  178. }
  179. //---------------------------------------------------------------------------
  180. bool TItsRepeatCongestManager::LoadFromDbWthr(TADOConnection *ADbConn/*=NULL*/)
  181. {
  182. bool bResult = true;
  183. String sQry;
  184. TADOQuery *pADO = NULL;
  185. sQry = "SELECT * \r\n"
  186. " FROM TB_REPT_CNGS_SECT_WTHR \r\n";
  187. // " ORDER BY IFSC_ID \r\n";
  188. try
  189. {
  190. FDataSeqWthr = 0;
  191. FListsWthr.Lock();
  192. FListsCnfmWthr.Lock();
  193. FListsWthr.RemoveAll();
  194. FListsCnfmWthr.RemoveAll();
  195. try
  196. {
  197. pADO = new TADOQuery(NULL);
  198. pADO->Close();
  199. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  200. pADO->SQL->Clear();
  201. pADO->SQL->Text = sQry;
  202. pADO->Open();
  203. for( ; !pADO->Eof; pADO->Next())
  204. {
  205. TItsRepeatCongestWthr *pRepeatCongest = new TItsRepeatCongestWthr();
  206. pRepeatCongest->IFSC_ID = pADO->FieldByName("IFSC_ID")->AsString; // 정보제공구간 ID
  207. pRepeatCongest->CRTN_YMD = pADO->FieldByName("CRTN_YMD")->AsString; // 생성 일자
  208. pRepeatCongest->WTHR_TYPE_CD = pADO->FieldByName("WTHR_TYPE_CD")->AsString; // 기상 코드
  209. pRepeatCongest->CNFS_STRT_HM = pADO->FieldByName("CNFS_STRT_HM")->AsString; // 혼잡 시작 시분
  210. pRepeatCongest->CNFS_END_HM = pADO->FieldByName("CNFS_END_HM")->AsString; // 혼잡 종료 시분
  211. pRepeatCongest->AVRG_SPED = pADO->FieldByName("AVRG_SPED")->AsString; // 평균 속도
  212. pRepeatCongest->AVRG_TRVL_HH = pADO->FieldByName("AVRG_TRVL_HH")->AsString; // 평균 통행 시간
  213. pRepeatCongest->DCSN_YN = pADO->FieldByName("DCSN_YN")->AsString; // 확정 여부
  214. pRepeatCongest->REPT_CNGS_SECT_ORGN_CD = pADO->FieldByName("REPT_CNGS_SECT_ORGN_CD")->AsString; // 반복 정체 구간 원본 코드
  215. if( pRepeatCongest->DCSN_YN != "Y" )
  216. FListsWthr.Push(String(FDataSeqWthr++), pRepeatCongest);
  217. else
  218. FListsCnfmWthr.Push(String(FDataSeqWthr++), pRepeatCongest);
  219. pRepeatCongest->Completed = true;
  220. }
  221. }
  222. catch(EDatabaseError &E)
  223. {
  224. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  225. DBERRORLOG("TItsRepeatCongestManager::LoadFromDbWthr", String(E.ClassName()), E.Message, sQry);
  226. return false;
  227. throw Exception(String(E.ClassName()) + E.Message);
  228. }
  229. catch(Exception &exception)
  230. {
  231. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  232. DBERRORLOG("TItsRepeatCongestManager::LoadFromDbWthr", String(exception.ClassName()), exception.Message, sQry);
  233. return false;
  234. throw Exception(String(exception.ClassName()) + exception.Message);
  235. }
  236. }
  237. __finally
  238. {
  239. if (pADO)
  240. {
  241. pADO->Close();
  242. delete pADO;
  243. }
  244. FListsWthr.UnLock();
  245. FListsCnfmWthr.UnLock();
  246. }
  247. return bResult;
  248. }
  249. //---------------------------------------------------------------------------
  250. bool TItsRepeatCongestManager::LoadFromDbWthrCnfm(TADOConnection *ADbConn/*=NULL*/)
  251. {
  252. bool bResult = true;
  253. String sQry;
  254. TADOQuery *pADO = NULL;
  255. sQry = "SELECT * \r\n"
  256. " FROM TB_REPT_CNGS_SECT_WTHR \r\n"
  257. " WHERE DCSN_YN = 'Y' \r\n";
  258. // " ORDER BY IFSC_ID \r\n";
  259. try
  260. {
  261. FDataSeqWthr = 0;
  262. FListsWthr.Lock();
  263. FListsCnfmWthr.Lock();
  264. FListsWthr.RemoveAll();
  265. FListsCnfmWthr.RemoveAll();
  266. try
  267. {
  268. pADO = new TADOQuery(NULL);
  269. pADO->Close();
  270. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  271. pADO->SQL->Clear();
  272. pADO->SQL->Text = sQry;
  273. pADO->Open();
  274. for( ; !pADO->Eof; pADO->Next())
  275. {
  276. TItsRepeatCongestWthr *pRepeatCongest = new TItsRepeatCongestWthr();
  277. pRepeatCongest->IFSC_ID = pADO->FieldByName("IFSC_ID")->AsString; // 정보제공구간 ID
  278. pRepeatCongest->CRTN_YMD = pADO->FieldByName("CRTN_YMD")->AsString; // 생성 일자
  279. pRepeatCongest->WTHR_TYPE_CD = pADO->FieldByName("WTHR_TYPE_CD")->AsString; // 기상 코드
  280. pRepeatCongest->CNFS_STRT_HM = pADO->FieldByName("CNFS_STRT_HM")->AsString; // 혼잡 시작 시분
  281. pRepeatCongest->CNFS_END_HM = pADO->FieldByName("CNFS_END_HM")->AsString; // 혼잡 종료 시분
  282. pRepeatCongest->AVRG_SPED = pADO->FieldByName("AVRG_SPED")->AsString; // 평균 속도
  283. pRepeatCongest->AVRG_TRVL_HH = pADO->FieldByName("AVRG_TRVL_HH")->AsString; // 평균 통행 시간
  284. pRepeatCongest->DCSN_YN = pADO->FieldByName("DCSN_YN")->AsString; // 확정 여부
  285. pRepeatCongest->REPT_CNGS_SECT_ORGN_CD = pADO->FieldByName("REPT_CNGS_SECT_ORGN_CD")->AsString; // 반복 정체 구간 원본 코드
  286. if( pRepeatCongest->DCSN_YN != "Y" )
  287. FListsWthr.Push(String(FDataSeqWthr++), pRepeatCongest);
  288. else
  289. FListsCnfmWthr.Push(String(FDataSeqWthr++), pRepeatCongest);
  290. pRepeatCongest->Completed = true;
  291. }
  292. }
  293. catch(EDatabaseError &E)
  294. {
  295. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  296. DBERRORLOG("TItsRepeatCongestManager::LoadFromDbWthrCnfm", String(E.ClassName()), E.Message, sQry);
  297. return false;
  298. throw Exception(String(E.ClassName()) + E.Message);
  299. }
  300. catch(Exception &exception)
  301. {
  302. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  303. DBERRORLOG("TItsRepeatCongestManager::LoadFromDbWthrCnfm", String(exception.ClassName()), exception.Message, sQry);
  304. return false;
  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. FListsWthr.UnLock();
  316. FListsCnfmWthr.UnLock();
  317. }
  318. return bResult;
  319. }
  320. //---------------------------------------------------------------------------