CDSUtisF.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. //---------------------------------------------------------------------------
  2. #pragma hdrstop
  3. #include "CDSUtisF.h"
  4. #include "ITSDbF.h"
  5. #include "AppGlobalF.h"
  6. //---------------------------------------------------------------------------
  7. #pragma package(smart_init)
  8. TItsUtis::TItsUtis()
  9. {
  10. FGridIndex = -1; // 그리드 인덱스
  11. Clear();
  12. }
  13. //---------------------------------------------------------------------------
  14. void TItsUtis::Clear()
  15. {
  16. #if 0
  17. FGridIndex = -1; // 그리드 인덱스
  18. #endif
  19. }
  20. //---------------------------------------------------------------------------
  21. TItsUtis::~TItsUtis()
  22. {
  23. }
  24. //---------------------------------------------------------------------------
  25. //---------------------------------------------------------------------------
  26. TItsUtisManager *ItsUtisManager = NULL;
  27. //---------------------------------------------------------------------------
  28. /*
  29. * Utis Manager
  30. */
  31. TItsUtisManager::TItsUtisManager()
  32. {
  33. }
  34. //---------------------------------------------------------------------------
  35. TItsUtisManager::~TItsUtisManager()
  36. {
  37. }
  38. //---------------------------------------------------------------------------
  39. void TItsUtisManager::SetCenterId(String ACenterId)
  40. {
  41. CenterId = ACenterId;
  42. }
  43. //---------------------------------------------------------------------------
  44. bool TItsUtisManager::LoadFromDb(TADOConnection *ADbConn/*=NULL*/)
  45. {
  46. return LoadUtisMaster(ADbConn);
  47. }
  48. //---------------------------------------------------------------------------
  49. bool TItsUtisManager::LoadUtisMaster(TADOConnection *ADbConn/*=NULL*/)
  50. {
  51. for (int ii = 0; ii < MAX_UTIS_RUN; ii++)
  52. {
  53. UtisRun.Status[ii] = "0";
  54. UtisRun.TotCnt[ii] = 0;
  55. UtisRun.RunCnt[ii] = 0;
  56. UtisRun.LastTime[ii] = "";
  57. RseRun[ii] = 0;
  58. }
  59. String sQry;
  60. TADOQuery *pADO = NULL;
  61. sQry = "SELECT COUNT(1) AS CCTVCNT \r\n"
  62. " FROM TB_CCTV_CTLR \r\n"
  63. " WHERE DEL_YN = 'N' \r\n";
  64. FTotCctvCnt = 0;
  65. try
  66. {
  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->Prepared = true;
  75. pADO->Open();
  76. for( ; !pADO->Eof; pADO->Next())
  77. {
  78. FTotCctvCnt = pADO->FieldByName("CCTVCNT")->AsInteger;
  79. }
  80. }
  81. catch(EDatabaseError &E)
  82. {
  83. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  84. DBERRORMSG("TItsUtisManager::LoadUtisMaster", String(E.ClassName()), E.Message, sQry);
  85. throw Exception(String(E.ClassName()) + E.Message);
  86. }
  87. catch(Exception &exception)
  88. {
  89. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  90. DBERRORMSG("TItsUtisManager::LoadUtisMaster", String(exception.ClassName()), exception.Message, sQry);
  91. throw Exception(String(exception.ClassName()) + exception.Message);
  92. }
  93. }
  94. __finally
  95. {
  96. if (pADO)
  97. {
  98. pADO->Close();
  99. delete pADO;
  100. }
  101. }
  102. return true;
  103. }
  104. //---------------------------------------------------------------------------
  105. bool TItsUtisManager::LoadUtisStatusFromDb(TADOConnection *ADbConn/*=NULL*/)
  106. {
  107. try
  108. {
  109. ItsUtisManager->FLists.Lock();
  110. for (int ii = 0; ii < MAX_UTIS_RUN; ii++)
  111. {
  112. UtisRun.Status[ii] = "0";
  113. UtisRun.TotCnt[ii] = 0;
  114. UtisRun.RunCnt[ii] = 0;
  115. UtisRun.LastTime[ii] = "";
  116. RseRun[ii] = 0;
  117. }
  118. LoadUtisStatusUtisRun(ADbConn);
  119. LoadUtisStatusRseRun(ADbConn);
  120. }
  121. __finally
  122. {
  123. ItsUtisManager->FLists.UnLock();
  124. }
  125. return true;
  126. }
  127. //---------------------------------------------------------------------------
  128. bool TItsUtisManager::LoadUtisStatusUtisRun(TADOConnection *ADbConn/*=NULL*/)
  129. {
  130. String sQry;
  131. TADOQuery *pADO = NULL;
  132. //
  133. return true;
  134. sQry = "SELECT OPCODE, TO_CHAR(COLLDT, 'YYYY-MM-DD HH24:MI:SS') AS COLLDT, RECORDCNT, \r\n"
  135. " DECODE(OPCODE, '20', DECODE(SIGN(COLLDT - (SYSDATE - 9/60/24)), -1, 'X', 'O'), \r\n"
  136. " DECODE(SIGN(COLLDT - (SYSDATE - 9/60/24)), -1, 'X', 'O')) AS COMMCHK \r\n"
  137. " FROM RUTIS.CENTERCOMM \r\n"
  138. " WHERE COMMTYPE = '1' \r\n"
  139. " AND OPCODE IN ('38', '39', '20') \r\n";
  140. #if 0
  141. SELECT COUNT(1)
  142. FROM RUTIS.CCTVIMG_BLOB A,
  143. (SELECT CCTVID,
  144. MAX(COLLDT) AS COLLDT
  145. FROM RUTIS.CCTVIMG_BLOB
  146. WHERE COLLDT >= (SYSDATE - 9/60/24)
  147. GROUP BY CCTVID) B,
  148. TB_CCTV_CTLR C
  149. WHERE A.CCTVID = B.CCTVID
  150. AND A.COLLDT = B.COLLDT
  151. AND A.CCTVID = TRIM(C.CCTV_CTLR_ID)
  152. AND C.DEL_YN = 'N'
  153. #endif
  154. String sTrfTime = "-?-";
  155. String sDirTime = "-?-";
  156. String sImgTime = "-?-";
  157. int nTrfCnt = 0;
  158. int nDirCnt = 0;
  159. int nImgCnt = 0;
  160. bool bTrf = false;
  161. bool bDir = false;
  162. bool bImg = false;
  163. try
  164. {
  165. try
  166. {
  167. pADO = new TADOQuery(NULL);
  168. pADO->Close();
  169. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  170. pADO->SQL->Clear();
  171. pADO->SQL->Text = sQry;
  172. pADO->Prepared = true;
  173. pADO->Open();
  174. for( ; !pADO->Eof; pADO->Next())
  175. {
  176. String sOpCode = pADO->FieldByName("OPCODE")->AsString;
  177. if (sOpCode == "38") // 5분 교통정보 수신(센터)
  178. {
  179. String sCommChk = pADO->FieldByName("COMMCHK")->AsString;
  180. if (sCommChk == "O")
  181. {
  182. bTrf = true;
  183. }
  184. sTrfTime = pADO->FieldByName("COLLDT")->AsString;
  185. nTrfCnt = pADO->FieldByName("RECORDCNT")->AsInteger;
  186. }
  187. else
  188. if (sOpCode == "39") // 5분 방향별 교통정보 수신(센터)
  189. {
  190. String sCommChk = pADO->FieldByName("COMMCHK")->AsString;
  191. if (sCommChk == "O")
  192. {
  193. bDir = true;
  194. }
  195. sDirTime = pADO->FieldByName("COLLDT")->AsString;
  196. nDirCnt = pADO->FieldByName("RECORDCNT")->AsInteger;
  197. }
  198. else
  199. if (sOpCode == "20") // 정지영상 생성
  200. {
  201. String sCommChk = pADO->FieldByName("COMMCHK")->AsString;
  202. if (sCommChk == "O")
  203. {
  204. bImg = true;
  205. }
  206. sImgTime = pADO->FieldByName("COLLDT")->AsString;
  207. nImgCnt = pADO->FieldByName("RECORDCNT")->AsInteger;
  208. }
  209. }
  210. if (bTrf)
  211. {
  212. UtisRun.Status[1] = "1";
  213. UtisRun.TotCnt[1] = 0;
  214. UtisRun.RunCnt[1] = nTrfCnt;
  215. UtisRun.LastTime[1] = sTrfTime;
  216. }
  217. else
  218. {
  219. UtisRun.Status[1] = "0";
  220. UtisRun.TotCnt[1] = 0;
  221. UtisRun.RunCnt[1] = 0;
  222. UtisRun.LastTime[1] = sTrfTime;
  223. }
  224. if (bDir)
  225. {
  226. UtisRun.Status[2] = "1";
  227. UtisRun.TotCnt[2] = 0;
  228. UtisRun.RunCnt[2] = nDirCnt;
  229. UtisRun.LastTime[2] = sTrfTime;
  230. }
  231. else
  232. {
  233. UtisRun.Status[2] = "0";
  234. UtisRun.TotCnt[2] = 0;
  235. UtisRun.RunCnt[2] = 0;
  236. UtisRun.LastTime[2] = sDirTime;
  237. }
  238. if (bImg)
  239. {
  240. UtisRun.Status[0] = "1";
  241. UtisRun.TotCnt[0] = nImgCnt;//m_nCctvCnt;
  242. if (nImgCnt > FTotCctvCnt)
  243. nImgCnt = FTotCctvCnt;
  244. UtisRun.RunCnt[0] = nImgCnt;
  245. UtisRun.LastTime[0] = sImgTime;
  246. //if (m_nCctvCnt != nImgCnt)
  247. //{
  248. // UtisRun.Status[0] = 2;
  249. //}
  250. }
  251. else
  252. {
  253. UtisRun.Status[0] = "0";
  254. UtisRun.TotCnt[0] = 0;//nImgCnt;//m_nCctvCnt;
  255. UtisRun.RunCnt[0] = 0;//nImgCnt;
  256. UtisRun.LastTime[0] = sImgTime;
  257. }
  258. }
  259. catch(EDatabaseError &E)
  260. {
  261. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  262. DBERRORMSG("TItsUtisManager::LoadUtisStatusUtisRun", String(E.ClassName()), E.Message, sQry);
  263. throw Exception(String(E.ClassName()) + E.Message);
  264. }
  265. catch(Exception &exception)
  266. {
  267. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  268. DBERRORMSG("TItsUtisManager::LoadUtisStatusUtisRun", String(exception.ClassName()), exception.Message, sQry);
  269. throw Exception(String(exception.ClassName()) + exception.Message);
  270. }
  271. }
  272. __finally
  273. {
  274. if (pADO)
  275. {
  276. pADO->Close();
  277. delete pADO;
  278. }
  279. }
  280. return true;
  281. }
  282. //---------------------------------------------------------------------------
  283. bool TItsUtisManager::LoadUtisStatusRseRun(TADOConnection *ADbConn/*=NULL*/)
  284. {
  285. String sQry;
  286. TADOQuery *pADO = NULL;
  287. return true;
  288. sQry = "SELECT 0 AS COLTYPE, COUNT(1) AS UPCNT \r\n"
  289. " FROM RUTIS.RSEMST \r\n"
  290. "UNION ALL \r\n"
  291. "SELECT 1 AS COLTYPE, COUNT(1) AS UPCNT \r\n"
  292. " FROM RUTIS.RSEOPSTATE A, RUTIS.RSEMST B \r\n"
  293. " WHERE B.RSEID = A.RSEID \r\n"
  294. " AND A.COLLDT > SYSDATE - 30/1440 \r\n";
  295. try
  296. {
  297. try
  298. {
  299. pADO = new TADOQuery(NULL);
  300. pADO->Close();
  301. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  302. pADO->SQL->Clear();
  303. pADO->SQL->Text = sQry;
  304. pADO->Prepared = true;
  305. pADO->Open();
  306. for( ; !pADO->Eof; pADO->Next())
  307. {
  308. int nColType = pADO->FieldByName("COLTYPE")->AsInteger;
  309. if (nColType >= 0 && nColType < MAX_UTIS_RUN)
  310. {
  311. RseRun[nColType] = pADO->FieldByName("UPCNT")->AsInteger;
  312. }
  313. }
  314. }
  315. catch(EDatabaseError &E)
  316. {
  317. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  318. DBERRORMSG("TItsUtisManager::LoadUtisStatusRseRun", String(E.ClassName()), E.Message, sQry);
  319. throw Exception(String(E.ClassName()) + E.Message);
  320. }
  321. catch(Exception &exception)
  322. {
  323. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  324. DBERRORMSG("TItsUtisManager::LoadUtisStatusRseRun", String(exception.ClassName()), exception.Message, sQry);
  325. throw Exception(String(exception.ClassName()) + exception.Message);
  326. }
  327. }
  328. __finally
  329. {
  330. if (pADO)
  331. {
  332. pADO->Close();
  333. delete pADO;
  334. }
  335. ItsUtisManager->FLists.UnLock();
  336. }
  337. return true;
  338. }
  339. //---------------------------------------------------------------------------