TAS00701F.cpp 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "ITSDbF.h"
  6. #include "AppGlobalF.h"
  7. #include "WindowMsgF.h"
  8. #include "ITSLangTransF.h"
  9. #include "ITS_OPLibF.h"
  10. #pragma hdrstop
  11. #include "TAS00701F.h"
  12. //---------------------------------------------------------------------------
  13. #pragma package(smart_init)
  14. #pragma link "cxButtons"
  15. #pragma link "cxCheckBox"
  16. #pragma link "cxClasses"
  17. #pragma link "cxContainer"
  18. #pragma link "cxControls"
  19. #pragma link "cxCustomData"
  20. #pragma link "cxData"
  21. #pragma link "cxDataStorage"
  22. #pragma link "cxEdit"
  23. #pragma link "cxFilter"
  24. #pragma link "cxGraphics"
  25. #pragma link "cxGrid"
  26. #pragma link "cxGridBandedTableView"
  27. #pragma link "cxGridCustomTableView"
  28. #pragma link "cxGridCustomView"
  29. #pragma link "cxGridLevel"
  30. #pragma link "cxGridTableView"
  31. #pragma link "cxLabel"
  32. #pragma link "cxLookAndFeelPainters"
  33. #pragma link "cxLookAndFeels"
  34. #pragma link "cxSpinEdit"
  35. #pragma link "cxSplitter"
  36. #pragma link "cxStyles"
  37. #pragma link "dxSkinBlack"
  38. #pragma link "dxSkinBlue"
  39. #pragma link "dxSkinsCore"
  40. #pragma link "dxSkinscxPCPainter"
  41. #pragma link "dxSkinMcSkin"
  42. #pragma resource "*.dfm"
  43. TTAS00701 *TAS00701 = NULL;
  44. //---------------------------------------------------------------------------
  45. __fastcall TTAS00701::TTAS00701(TComponent* Owner, HWND hHandle,
  46. String AStDay, String AEdDay, String AStHour, String AEdHour, String AWeek, String ADir, String AAtrdNm, int ATable, int AQryType)
  47. : TForm(Owner)
  48. {
  49. LangTrans->Translate(this, ITSDb_GetConnection());
  50. ITSSkin_Load(this);
  51. CMM_LoadForm(g_sFormsDir, this);
  52. FParent = hHandle;
  53. FStDay = AStDay;
  54. FEdDay = AEdDay;
  55. FStHour = AStHour;
  56. FEdHour = AEdHour;
  57. FWeek = AWeek;
  58. FDir = ADir;
  59. FAtrdNm = AAtrdNm;
  60. FTable = ATable;
  61. FQryType = AQryType;
  62. FHourSt = FStHour.ToIntDef(0);
  63. FHourEd = FEdHour.ToIntDef(0);
  64. FStatManager = new TStat0070Manager();
  65. FChartManager = new TStat0070ChartManager();
  66. }
  67. //---------------------------------------------------------------------------
  68. __fastcall TTAS00701::~TTAS00701(void)
  69. {
  70. }
  71. //--------------------------------------------------------------------------
  72. void __fastcall TTAS00701::FormInit()
  73. {
  74. ADOQry->Connection = ITSDb_GetConnection();
  75. m_pGDC = TvList->DataController;
  76. TvList->OptionsView->NoDataToDisplayInfoText = FrmLang->lblNoInfo->Caption;//"<노선별속도분석 정보>";
  77. LblSearch->Caption = FrmLang->lblQryCond->Caption + FStDay + " ~ " + FEdDay;
  78. }
  79. //---------------------------------------------------------------------------
  80. void __fastcall TTAS00701::FormShow(TObject *Sender)
  81. {
  82. FormInit();
  83. Refresh();
  84. TmrShow->Enabled = true;
  85. }
  86. //---------------------------------------------------------------------------
  87. void __fastcall TTAS00701::CommClose()
  88. {
  89. try
  90. {
  91. delete FStatManager;
  92. FStatManager = NULL;
  93. delete FChartManager;
  94. FChartManager = NULL;
  95. }
  96. catch(Exception &e)
  97. {
  98. }
  99. CMM_SaveForm(g_sFormsDir, this);
  100. //TAS00701 = NULL;
  101. }
  102. //---------------------------------------------------------------------------
  103. void __fastcall TTAS00701::TmrShowTimer(TObject *Sender)
  104. {
  105. TmrShow->Enabled = false;
  106. #if 0
  107. TcxGridBand *pBand = TvList->Bands->Items[1];
  108. pBand->Visible = false;
  109. int nCols = pBand->ColumnCount;
  110. int ii;
  111. for (ii = 0; ii < FHourSt; ii++)
  112. {
  113. pBand->Columns[ii]->Visible = false;
  114. }
  115. for (ii = FHourEd+1; ii < nCols; ii++)
  116. {
  117. pBand->Columns[ii]->Visible = false;
  118. }
  119. pBand->Visible = true;
  120. #endif
  121. Application->ProcessMessages();
  122. m_pGDC = TvList->DataController;
  123. CMM_ClearGridTableView(TvList);
  124. TvList->BeginUpdate(lsimImmediate);
  125. try
  126. {
  127. if (FQryType == 0) //시간
  128. {
  129. m_pFrmChart->CbOption->Properties->OnChange = NULL;
  130. m_pFrmChart->CbOption->Properties->Items->Clear();
  131. m_pFrmChart->CbOption->Properties->Items->Add("시간");
  132. m_pFrmChart->CbOption->Properties->Items->Add("일자");
  133. m_pFrmChart->CbOption->ItemIndex = 0;
  134. m_pFrmChart->PnlOption->Visible = true;
  135. Col01->Caption = "일자";
  136. SelHistory1();
  137. DspHistory1();
  138. m_pFrmChart->CbOption->Properties->OnChange = CbOptionPropertiesChange;
  139. DrawChart(0);
  140. }
  141. else
  142. if (FTable == 1) //요일
  143. {
  144. m_pFrmChart->PnlOption->Visible = false;
  145. Col01->Caption = "요일";
  146. SelHistory2();
  147. DspHistory2();
  148. DrawChart(2);
  149. }
  150. }
  151. __finally
  152. {
  153. TvList->EndUpdate();
  154. LblRecords->Caption = FormatFloat("##,##0", m_pGDC->RecordCount) + FrmLang->lblEA->Caption;//" 건";
  155. String sEnd = FrmLang->lblQrySel->Caption + " [" + LblRecords->Caption + "]";//"데이터 " + LblRecords->Caption + " 이 조회 되었습니다.";
  156. Application->MessageBox(sEnd.c_str(),
  157. FrmLang->lblQryEnd->Caption.c_str(),//L"데이터 조회 완료",
  158. MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  159. }
  160. }
  161. //---------------------------------------------------------------------------
  162. void __fastcall TTAS00701::ChkExpandClick(TObject *Sender)
  163. {
  164. CMM_ExpandCollapseChk(TvList, ChkExpand->Checked);
  165. }
  166. //---------------------------------------------------------------------------
  167. String __fastcall TTAS00701::GetDayWeekCode(String ADay)
  168. {
  169. TDateTime dt;
  170. System::Word Year = (System::Word)ADay.SubString( 1, 4).ToIntDef(2018);
  171. System::Word Month = (System::Word)ADay.SubString( 5, 2).ToIntDef(1);
  172. System::Word Day = (System::Word)ADay.SubString( 7, 2).ToIntDef(1);
  173. dt = EncodeDate(Year, Month, Day);
  174. System::Word week = DayOfWeek(dt);
  175. //const days: array[1..7] of string = ('일','월','화','수','목','금','토');
  176. String sWeek[8] = { "", "DTW7", "DTW1", "DTW2", "DTW3", "DTW4", "DTW5", "DTW6" };
  177. return sWeek[week];
  178. }
  179. //---------------------------------------------------------------------------
  180. void __fastcall TTAS00701::SelHistory1()
  181. {
  182. TSqlCursor sqlCrs;
  183. String sQry;
  184. TADOQuery *pADO = ADOQry;
  185. String SQLAtrd = "";
  186. String SQLDrct = "";
  187. String SQLWeek = "";
  188. if (FAtrdNm != "")
  189. {
  190. SQLAtrd = " AND ATRD_NM IN (" + FAtrdNm + ") \r\n";
  191. }
  192. if (FDir != "")
  193. {
  194. SQLDrct = " AND DRCT_CD IN (" + FDir + ") \r\n";
  195. }
  196. if (FWeek != "")
  197. {
  198. SQLWeek = " AND A.DAY_TYPE_CD IN (" + FWeek + ") \r\n";
  199. }
  200. sQry = "SELECT X.STAT_DAY AS STAT_TP, \r\n"
  201. " Y.ATRD_NM, Y.DRCT_CD_NM, Y.DRCT_NM, \r\n"
  202. " X.* \r\n"
  203. " FROM (SELECT /*+ INDEX(A PK_TAS_IFSC_SPED_HH) */ \r\n"
  204. " A.STAT_DAY, B.ATRD_ID, \r\n"
  205. " ROUND(AVG(H00), 0) AS H00, \r\n"
  206. " ROUND(AVG(H01), 0) AS H01, \r\n"
  207. " ROUND(AVG(H02), 0) AS H02, \r\n"
  208. " ROUND(AVG(H03), 0) AS H03, \r\n"
  209. " ROUND(AVG(H04), 0) AS H04, \r\n"
  210. " ROUND(AVG(H05), 0) AS H05, \r\n"
  211. " ROUND(AVG(H06), 0) AS H06, \r\n"
  212. " ROUND(AVG(H07), 0) AS H07, \r\n"
  213. " ROUND(AVG(H08), 0) AS H08, \r\n"
  214. " ROUND(AVG(H09), 0) AS H09, \r\n"
  215. " ROUND(AVG(H10), 0) AS H10, \r\n"
  216. " ROUND(AVG(H11), 0) AS H11, \r\n"
  217. " ROUND(AVG(H12), 0) AS H12, \r\n"
  218. " ROUND(AVG(H13), 0) AS H13, \r\n"
  219. " ROUND(AVG(H14), 0) AS H14, \r\n"
  220. " ROUND(AVG(H15), 0) AS H15, \r\n"
  221. " ROUND(AVG(H16), 0) AS H16, \r\n"
  222. " ROUND(AVG(H17), 0) AS H17, \r\n"
  223. " ROUND(AVG(H18), 0) AS H18, \r\n"
  224. " ROUND(AVG(H19), 0) AS H19, \r\n"
  225. " ROUND(AVG(H20), 0) AS H20, \r\n"
  226. " ROUND(AVG(H21), 0) AS H21, \r\n"
  227. " ROUND(AVG(H22), 0) AS H22, \r\n"
  228. " ROUND(AVG(H23), 0) AS H23, \r\n"
  229. " ROUND(AVG(SPD), 0) AS SPD \r\n"
  230. " FROM TB_TAS_IFSC_SPED_HH A, \r\n"
  231. " MV_ATRD_IFSC B \r\n"
  232. " WHERE A.STAT_DAY BETWEEN :p01 AND :p02 \r\n"
  233. " AND A.IFSC_ID = B.IFSC_ID \r\n"
  234. + SQLAtrd + SQLDrct + SQLWeek +
  235. " GROUP BY A.STAT_DAY, B.ATRD_ID, B.DRCT_CD \r\n"
  236. " ) X, \r\n"
  237. " MV_ATRD Y \r\n"
  238. " WHERE 1=1 \r\n"
  239. " AND Y.ATRD_ID = X.ATRD_ID \r\n"
  240. + SQLAtrd + SQLDrct +
  241. " ORDER BY X.STAT_DAY, Y.ATRD_NM \r\n";
  242. int nRow = 0;
  243. int nIdxSped, ii;
  244. String colName;
  245. try
  246. {
  247. ITSDb_SQLText(pADO, sQry);
  248. ITSDb_SQLBind(pADO, "p01", FStDay);
  249. ITSDb_SQLBind(pADO, "p02", FEdDay);
  250. ITSDb_SQLOpen(pADO);
  251. for( ; !pADO->Eof; pADO->Next(), nRow++)
  252. {
  253. String STAT_TP = pADO->FieldByName("STAT_TP")->AsString;
  254. TStat0070 *pStat = FStatManager->FLists.Find(STAT_TP);
  255. if (!pStat)
  256. {
  257. pStat = new TStat0070();
  258. pStat->STAT_TP = STAT_TP;
  259. pStat->STAT_TP_DESC = APP_FormatStr(pStat->STAT_TP, STR_DATE);
  260. FStatManager->FLists.Push(pStat->STAT_TP, pStat);
  261. }
  262. if (!pStat) continue; //ERROR
  263. String ATRD_ID = pADO->FieldByName("ATRD_ID")->AsString;
  264. TTraf0070 *pTraf = pStat->FLists.Find(ATRD_ID);
  265. if (!pTraf)
  266. {
  267. pTraf = new TTraf0070();
  268. pTraf->ATRD_ID = ATRD_ID;
  269. pTraf->ATRD_NM = pADO->FieldByName("ATRD_NM")->AsString;
  270. pTraf->DRCT_CD_NM = pADO->FieldByName("DRCT_CD_NM")->AsString;
  271. pTraf->DRCT_NM = pADO->FieldByName("DRCT_NM")->AsString;
  272. pStat->FLists.Push(pTraf->ATRD_ID, pTraf);
  273. }
  274. if (!pTraf) continue; //ERROR
  275. TChart0070 *pChart = FChartManager->FLists.Find(ATRD_ID);
  276. if (!pChart)
  277. {
  278. pChart = new TChart0070();
  279. pChart->ATRD_ID = ATRD_ID;
  280. pChart->ATRD_NM = pADO->FieldByName("ATRD_NM")->AsString;
  281. pChart->DRCT_CD_NM = pADO->FieldByName("DRCT_CD_NM")->AsString;
  282. pChart->DRCT_NM = pADO->FieldByName("DRCT_NM")->AsString;
  283. FChartManager->FLists.Push(pChart->ATRD_ID, pChart);
  284. }
  285. if (!pChart) continue; //ERROR
  286. for (ii = FHourSt; ii <= FHourEd; ii++)
  287. {
  288. colName.printf(L"h%02d", ii);
  289. pTraf->SPED[ii] = pADO->FieldByName(colName)->AsInteger;
  290. if (pTraf->SPED[ii] > 0)
  291. {
  292. pTraf->SUM_SPED += pTraf->SPED[ii];
  293. pTraf->DATA_CNT++;
  294. }
  295. }
  296. }
  297. pADO->Close();
  298. }
  299. catch(EDatabaseError &E)
  300. {
  301. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  302. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  303. throw Exception(String(E.ClassName()) + E.Message);
  304. }
  305. catch(Exception &e)
  306. {
  307. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  308. DBERRORMSG(Caption, String(e.ClassName()), e.Message, sQry);
  309. throw Exception(String(e.ClassName()) + e.Message);
  310. }
  311. }
  312. //---------------------------------------------------------------------------
  313. void __fastcall TTAS00701::SelHistory2()
  314. {
  315. TSqlCursor sqlCrs;
  316. String sQry;
  317. TADOQuery *pADO = ADOQry;
  318. String SQLAtrd = "";
  319. String SQLDrct = "";
  320. String SQLWeek = "";
  321. if (FAtrdNm != "")
  322. {
  323. SQLAtrd = " AND ATRD_NM IN (" + FAtrdNm + ") \r\n";
  324. }
  325. if (FDir != "")
  326. {
  327. SQLDrct = " AND DRCT_CD IN (" + FDir + ") \r\n";
  328. }
  329. if (FWeek != "")
  330. {
  331. SQLWeek = " AND A.DAY_TYPE_CD IN (" + FWeek + ") \r\n";
  332. }
  333. sQry = "SELECT X.DAY_TYPE_CD AS STAT_TP, \r\n"
  334. " Y.ATRD_NM, Y.DRCT_CD_NM, Y.DRCT_NM, \r\n"
  335. " X.* \r\n"
  336. " FROM (SELECT /*+ INDEX(A PK_TAS_IFSC_SPED_HH) */ \r\n"
  337. " A.DAY_TYPE_CD, B.ATRD_ID, \r\n"
  338. " ROUND(AVG(H00), 0) AS H00, \r\n"
  339. " ROUND(AVG(H01), 0) AS H01, \r\n"
  340. " ROUND(AVG(H02), 0) AS H02, \r\n"
  341. " ROUND(AVG(H03), 0) AS H03, \r\n"
  342. " ROUND(AVG(H04), 0) AS H04, \r\n"
  343. " ROUND(AVG(H05), 0) AS H05, \r\n"
  344. " ROUND(AVG(H06), 0) AS H06, \r\n"
  345. " ROUND(AVG(H07), 0) AS H07, \r\n"
  346. " ROUND(AVG(H08), 0) AS H08, \r\n"
  347. " ROUND(AVG(H09), 0) AS H09, \r\n"
  348. " ROUND(AVG(H10), 0) AS H10, \r\n"
  349. " ROUND(AVG(H11), 0) AS H11, \r\n"
  350. " ROUND(AVG(H12), 0) AS H12, \r\n"
  351. " ROUND(AVG(H13), 0) AS H13, \r\n"
  352. " ROUND(AVG(H14), 0) AS H14, \r\n"
  353. " ROUND(AVG(H15), 0) AS H15, \r\n"
  354. " ROUND(AVG(H16), 0) AS H16, \r\n"
  355. " ROUND(AVG(H17), 0) AS H17, \r\n"
  356. " ROUND(AVG(H18), 0) AS H18, \r\n"
  357. " ROUND(AVG(H19), 0) AS H19, \r\n"
  358. " ROUND(AVG(H20), 0) AS H20, \r\n"
  359. " ROUND(AVG(H21), 0) AS H21, \r\n"
  360. " ROUND(AVG(H22), 0) AS H22, \r\n"
  361. " ROUND(AVG(H23), 0) AS H23, \r\n"
  362. " ROUND(AVG(SPD), 0) AS SPD \r\n"
  363. " FROM TB_TAS_IFSC_SPED_HH A, \r\n"
  364. " MV_ATRD_IFSC B \r\n"
  365. " WHERE A.STAT_DAY BETWEEN :p01 AND :p02 \r\n"
  366. " AND A.IFSC_ID = B.IFSC_ID \r\n"
  367. + SQLAtrd + SQLDrct + SQLWeek +
  368. " GROUP BY A.DAY_TYPE_CD, B.ATRD_ID, B.DRCT_CD \r\n"
  369. " ) X, \r\n"
  370. " MV_ATRD Y \r\n"
  371. " WHERE 1=1 \r\n"
  372. " AND Y.ATRD_ID = X.ATRD_ID \r\n"
  373. + SQLAtrd + SQLDrct +
  374. " ORDER BY X.DAY_TYPE_CD, Y.ATRD_NM \r\n";
  375. int nRow = 0;
  376. int nIdxSped, ii;
  377. String colName;
  378. try
  379. {
  380. ITSDb_SQLText(pADO, sQry);
  381. ITSDb_SQLBind(pADO, "p01", FStDay);
  382. ITSDb_SQLBind(pADO, "p02", FEdDay);
  383. ITSDb_SQLOpen(pADO);
  384. for( ; !pADO->Eof; pADO->Next(), nRow++)
  385. {
  386. String STAT_TP = pADO->FieldByName("STAT_TP")->AsString;
  387. TStat0070 *pStat = FStatManager->FLists.Find(STAT_TP);
  388. if (!pStat)
  389. {
  390. pStat = new TStat0070();
  391. pStat->STAT_TP = STAT_TP;
  392. if (pStat->STAT_TP == "DTW1") pStat->STAT_TP_DESC = "월";
  393. else if (pStat->STAT_TP == "DTW2") pStat->STAT_TP_DESC = "화";
  394. else if (pStat->STAT_TP == "DTW3") pStat->STAT_TP_DESC = "수";
  395. else if (pStat->STAT_TP == "DTW4") pStat->STAT_TP_DESC = "목";
  396. else if (pStat->STAT_TP == "DTW5") pStat->STAT_TP_DESC = "금";
  397. else if (pStat->STAT_TP == "DTW6") pStat->STAT_TP_DESC = "토";
  398. else if (pStat->STAT_TP == "DTW7") pStat->STAT_TP_DESC = "일";
  399. FStatManager->FLists.Push(pStat->STAT_TP, pStat);
  400. }
  401. if (!pStat) continue; //ERROR
  402. String ATRD_ID = pADO->FieldByName("ATRD_ID")->AsString;
  403. TTraf0070 *pTraf = pStat->FLists.Find(ATRD_ID);
  404. if (!pTraf)
  405. {
  406. pTraf = new TTraf0070();
  407. pTraf->ATRD_ID = ATRD_ID;
  408. pTraf->ATRD_NM = pADO->FieldByName("ATRD_NM")->AsString;
  409. pTraf->DRCT_CD_NM = pADO->FieldByName("DRCT_CD_NM")->AsString;
  410. pTraf->DRCT_NM = pADO->FieldByName("DRCT_NM")->AsString;
  411. pStat->FLists.Push(pTraf->ATRD_ID, pTraf);
  412. }
  413. if (!pTraf) continue; //ERROR
  414. TChart0070 *pChart = FChartManager->FLists.Find(ATRD_ID);
  415. if (!pChart)
  416. {
  417. pChart = new TChart0070();
  418. pChart->ATRD_ID = ATRD_ID;
  419. pChart->ATRD_NM = pADO->FieldByName("ATRD_NM")->AsString;
  420. pChart->DRCT_CD_NM = pADO->FieldByName("DRCT_CD_NM")->AsString;
  421. pChart->DRCT_NM = pADO->FieldByName("DRCT_NM")->AsString;
  422. FChartManager->FLists.Push(pChart->ATRD_ID, pChart);
  423. }
  424. if (!pChart) continue; //ERROR
  425. for (ii = FHourSt; ii <= FHourEd; ii++)
  426. {
  427. colName.printf(L"h%02d", ii);
  428. pTraf->SPED[ii] = pADO->FieldByName(colName)->AsInteger;
  429. if (pTraf->SPED[ii] > 0)
  430. {
  431. pTraf->SUM_SPED += pTraf->SPED[ii];
  432. pTraf->DATA_CNT++;
  433. }
  434. }
  435. }
  436. pADO->Close();
  437. }
  438. catch(EDatabaseError &E)
  439. {
  440. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  441. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  442. throw Exception(String(E.ClassName()) + E.Message);
  443. }
  444. catch(Exception &e)
  445. {
  446. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  447. DBERRORMSG(Caption, String(e.ClassName()), e.Message, sQry);
  448. throw Exception(String(e.ClassName()) + e.Message);
  449. }
  450. }
  451. //---------------------------------------------------------------------------
  452. void __fastcall TTAS00701::DspHistory1()
  453. {
  454. m_pGDC = TvList->DataController;
  455. try
  456. {
  457. int nRow = 0;
  458. int nIdxSped = 0;
  459. int ii;
  460. float fTotSumSped = 0;
  461. int nTotSumCnt = 0;
  462. //일자별/요일별 순환
  463. FOR_STL(TStat0070*, pStat, FStatManager->FLists)
  464. {
  465. float fSumSped = 0;
  466. int nSumCnt = 0;
  467. //간선도로별 순환
  468. FOR_STL(TTraf0070*, pTraf, pStat->FLists)
  469. {
  470. nRow = m_pGDC->AppendRecord();
  471. m_pGDC->Values[nRow][Col01->Index] = pStat->STAT_TP_DESC;
  472. m_pGDC->Values[nRow][Col02->Index] = pTraf->ATRD_NM;
  473. m_pGDC->Values[nRow][Col03->Index] = pTraf->DRCT_CD_NM;
  474. if (pTraf->DATA_CNT > 0)
  475. {
  476. pTraf->AVG_SPED = (int)(pTraf->SUM_SPED/pTraf->DATA_CNT+0.5);
  477. m_pGDC->Values[nRow][Col04->Index] = pTraf->AVG_SPED;
  478. fSumSped += pTraf->AVG_SPED;
  479. nSumCnt++;
  480. }
  481. else
  482. {
  483. m_pGDC->Values[nRow][Col04->Index] = 0;
  484. }
  485. nIdxSped = ColSped->Index;
  486. for (ii = FHourSt; ii <= FHourEd; ii++)
  487. {
  488. m_pGDC->Values[nRow][nIdxSped+ii] = pTraf->SPED[ii];
  489. if (pTraf->SPED[ii] > 0)
  490. {
  491. pStat->SUM_SPED[ii] += pTraf->SPED[ii];
  492. pStat->DATA_CNT[ii]++;
  493. TChart0070 *pChart = FChartManager->FLists.Find(pTraf->ATRD_ID);
  494. if (pChart)
  495. {
  496. pChart->SUM_SPED[ii] += pTraf->SPED[ii];
  497. pChart->DATA_CNT[ii]++;
  498. }
  499. }
  500. }
  501. }//간선도로별 표출완료
  502. //일자별/요일별 평균계산 및 표출
  503. for (ii = FHourSt; ii <= FHourEd; ii++)
  504. {
  505. if (pStat->DATA_CNT[ii] > 0)
  506. {
  507. pStat->AVG_SPED[ii] = (int)(pStat->SUM_SPED[ii]/pStat->DATA_CNT[ii]+0.5);
  508. FStatManager->SUM_SPED[ii] = pStat->AVG_SPED[ii];
  509. FStatManager->DATA_CNT[ii]++;
  510. }
  511. }
  512. nRow = m_pGDC->AppendRecord();
  513. m_pGDC->Values[nRow][Col01->Index] = pStat->STAT_TP_DESC;
  514. m_pGDC->Values[nRow][Col02->Index] = "평균통행속도";
  515. m_pGDC->Values[nRow][Col03->Index] = "-";
  516. if (nSumCnt > 0)
  517. {
  518. pStat->TOT_AVG_SPED = (int)(fSumSped/nSumCnt+0.5);
  519. m_pGDC->Values[nRow][Col04->Index] = pStat->TOT_AVG_SPED;
  520. fTotSumSped += pStat->TOT_AVG_SPED;
  521. nTotSumCnt++;
  522. }
  523. else
  524. {
  525. m_pGDC->Values[nRow][Col04->Index] = 0;
  526. }
  527. nIdxSped = ColSped->Index;
  528. for (ii = FHourSt; ii <= FHourEd; ii++)
  529. {
  530. m_pGDC->Values[nRow][nIdxSped+ii] = pStat->AVG_SPED[ii];
  531. }
  532. }
  533. //전체평균표출
  534. for (ii = FHourSt; ii <= FHourEd; ii++)
  535. {
  536. if (FStatManager->DATA_CNT[ii] > 0)
  537. {
  538. FStatManager->AVG_SPED[ii] = (int)(FStatManager->SUM_SPED[ii]/FStatManager->DATA_CNT[ii]+0.5);
  539. }
  540. }
  541. nRow = m_pGDC->AppendRecord();
  542. m_pGDC->Values[nRow][Col01->Index] = "전체";
  543. m_pGDC->Values[nRow][Col02->Index] = "평균통행속도";
  544. m_pGDC->Values[nRow][Col03->Index] = "-";
  545. if (nTotSumCnt > 0)
  546. {
  547. FStatManager->TOT_AVG_SPED = (int)(fTotSumSped/nTotSumCnt+0.5);
  548. m_pGDC->Values[nRow][Col04->Index] = FStatManager->TOT_AVG_SPED;
  549. }
  550. else
  551. {
  552. m_pGDC->Values[nRow][Col04->Index] = 0;
  553. }
  554. nIdxSped = ColSped->Index;
  555. for (ii = FHourSt; ii <= FHourEd; ii++)
  556. {
  557. m_pGDC->Values[nRow][nIdxSped+ii] = FStatManager->AVG_SPED[ii];
  558. }
  559. FOR_STL(TChart0070*, pChart, FChartManager->FLists)
  560. {
  561. for (ii = FHourSt; ii <= FHourEd; ii++)
  562. {
  563. if (pChart->DATA_CNT[ii] > 0)
  564. {
  565. pChart->AVG_SPED[ii] = (int)(pChart->SUM_SPED[ii]/pChart->DATA_CNT[ii]+0.5);
  566. }
  567. }
  568. }
  569. }
  570. catch(EDatabaseError &E)
  571. {
  572. throw Exception(String(E.ClassName()) + E.Message);
  573. }
  574. catch(Exception &e)
  575. {
  576. throw Exception(String(e.ClassName()) + e.Message);
  577. }
  578. }
  579. //---------------------------------------------------------------------------
  580. void __fastcall TTAS00701::DspHistory2()
  581. {
  582. DspHistory1();
  583. }
  584. //---------------------------------------------------------------------------
  585. void __fastcall TTAS00701::DrawChart(int ADrawType)
  586. {
  587. m_pFrmChart->Clear();
  588. switch(ADrawType)
  589. {
  590. case 0: m_pFrmChart->SetChartInfo("간선도로별 분석(시간)", "시간", "속도"); break;
  591. case 1: m_pFrmChart->SetChartInfo("간선도로별 분석(일자)", "일자", "속도"); break;
  592. case 2: m_pFrmChart->SetChartInfo("간선도로별 분석(요일)", "요일", "속도"); break;
  593. default: return;
  594. }
  595. int ii, jj, kk;
  596. SeriesType SrsType;
  597. TColor clSrsColor;
  598. TChartSeries *pSeries;
  599. TCursor cOldCursor= Screen->Cursor;
  600. Screen->Cursor = crHourGlass;
  601. SrsType = (SeriesType)m_pFrmChart->CbChartKind->ItemIndex;
  602. m_pFrmChart->BeginDraw("", "", "");
  603. m_pFrmChart->LstLegend->Items->BeginUpdate();
  604. ii = jj = kk = 0;
  605. try
  606. {
  607. switch(ADrawType)
  608. {
  609. case 0: //시간별
  610. FOR_STL(TChart0070*, pChart, FChartManager->FLists)
  611. {
  612. clSrsColor = GetDefaultColor(kk++);
  613. if (clSrsColor == clWhite) clSrsColor = GetDefaultColor(++kk);
  614. if (clSrsColor == clYellow) clSrsColor = GetDefaultColor(++kk);
  615. pSeries = m_pFrmChart->AddSeriesItem(pChart->ATRD_NM+":"+pChart->DRCT_CD_NM, SrsType, clSrsColor, true);
  616. if (!pSeries) continue;
  617. for (ii = FHourSt; ii <= FHourEd; ii++)
  618. {
  619. String sAxisX;
  620. sAxisX.printf(L"%02d시", ii);
  621. if (pChart->AVG_SPED[ii] > 0)
  622. {
  623. pSeries->AddY(pChart->AVG_SPED[ii], sAxisX);
  624. }
  625. }
  626. }
  627. break;
  628. case 1: //일자별
  629. case 2: //요일별
  630. FOR_STL(TChart0070*, pChart, FChartManager->FLists)
  631. {
  632. clSrsColor = GetDefaultColor(kk++);
  633. if (clSrsColor == clWhite) clSrsColor = GetDefaultColor(++kk);
  634. if (clSrsColor == clYellow) clSrsColor = GetDefaultColor(++kk);
  635. pSeries = m_pFrmChart->AddSeriesItem(pChart->ATRD_NM+":"+pChart->DRCT_CD_NM, SrsType, clSrsColor, true);
  636. if (!pSeries) continue;
  637. FOR_STL(TStat0070*, pStat, FStatManager->FLists)
  638. {
  639. TTraf0070 *pTraf = pStat->FLists.Find(pChart->ATRD_ID);
  640. if (!pTraf) continue;
  641. String sAxisX = pStat->STAT_TP_DESC;
  642. if (pTraf->AVG_SPED > 0)
  643. {
  644. pSeries->AddY(pTraf->AVG_SPED, sAxisX);
  645. }
  646. }
  647. }
  648. break;
  649. }
  650. m_pFrmChart->DbChart->LeftAxis->Minimum = 0;
  651. m_pFrmChart->DbChart->LeftAxis->Maximum = m_pFrmChart->GetActiveMaxY() + 10;
  652. if (m_pFrmChart->DbChart->LeftAxis->Minimum >= m_pFrmChart->DbChart->LeftAxis->Maximum)
  653. {
  654. m_pFrmChart->DbChart->LeftAxis->Maximum = m_pFrmChart->DbChart->LeftAxis->Minimum + 1;
  655. }
  656. }
  657. __finally
  658. {
  659. m_pFrmChart->DbChart->Refresh();
  660. m_pFrmChart->LstLegend->Items->EndUpdate();
  661. m_pFrmChart->EndDraw();
  662. Screen->Cursor = cOldCursor;
  663. }
  664. }
  665. //---------------------------------------------------------------------------
  666. void __fastcall TTAS00701::OnMessage(TMessage &Msg)
  667. {
  668. switch (Msg.Msg)
  669. {
  670. case WM_PARAM_DATABASE:
  671. if (WP_DB_SELECT_OK == Msg.WParam)
  672. {
  673. //ShowMessage("Select Ok");
  674. }
  675. break;
  676. }
  677. }
  678. //---------------------------------------------------------------------------
  679. void __fastcall TTAS00701::BtnExlSaveClick(TObject *Sender)
  680. {
  681. TcxGrid *pGrid = CxList;
  682. TcxGridTableView *pView = TvList;
  683. String sTitle= Caption;//"노선별속도분석";
  684. CMM_ExportToExcelFile(sTitle, pGrid, pView, this);
  685. }
  686. //---------------------------------------------------------------------------
  687. void __fastcall TTAS00701::FormClose(TObject *Sender, TCloseAction &Action)
  688. {
  689. POST_MSG(FParent, WM_SUBFORM_CLOSE, 0, 0);
  690. CommClose();
  691. //TAS00701 = NULL;
  692. }
  693. //---------------------------------------------------------------------------
  694. void __fastcall TTAS00701::FormDestroy(TObject *Sender)
  695. {
  696. CommClose();
  697. }
  698. //---------------------------------------------------------------------------
  699. void __fastcall TTAS00701::FormCreate(TObject *Sender)
  700. {
  701. m_pFrmChart = new TPlugInChart(this);
  702. m_pFrmChart->Parent = PnlChart;
  703. m_pFrmChart->SetChartInfo("", "시간", "속도");
  704. m_pFrmChart->Show();
  705. }
  706. //---------------------------------------------------------------------------
  707. void __fastcall TTAS00701::ColSpedCustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas,
  708. TcxGridTableDataCellViewInfo *AViewInfo, bool &ADone)
  709. {
  710. TColor tColor = ACanvas->Brush->Color;
  711. TColor tFont = clBlack;
  712. try
  713. {
  714. if (!VarIsNull(AViewInfo->Value))
  715. {
  716. int nSpd = AViewInfo->Value;
  717. if (nSpd == 0)
  718. {
  719. tFont = tColor;
  720. tColor = tFont;
  721. }
  722. #if 0
  723. else
  724. {
  725. if (nSpd <= 10)
  726. {
  727. tFont = clWhite;
  728. tColor = (TColor)0x333333;
  729. }
  730. else
  731. if (nSpd <= 20)
  732. {
  733. tFont = tFont;
  734. tColor = (TColor)0x575757;
  735. }
  736. else
  737. if (nSpd <= 30)
  738. {
  739. tFont = tFont;
  740. tColor = (TColor)0x7B7B7B;
  741. }
  742. else
  743. if (nSpd <= 40)
  744. {
  745. tFont = tFont;
  746. tColor = (TColor)0x9F9F9F;
  747. }
  748. else
  749. if (nSpd <= 50)
  750. {
  751. tFont = clBlue;
  752. tColor = (TColor)0xC3C3C3;
  753. }
  754. else
  755. if (nSpd <= 60)
  756. {
  757. tFont = clBlue;
  758. tColor = (TColor)0xE7E7E7;
  759. }
  760. else
  761. {
  762. tFont = clBlue;
  763. tColor = (TColor)0xF3F3F3;
  764. }
  765. }
  766. #endif
  767. }
  768. else
  769. {
  770. tColor = clSilver;
  771. tFont = tColor;
  772. }
  773. ACanvas->Font->Color = tFont;
  774. ACanvas->SetBrushColor(tColor);
  775. }
  776. catch(...)
  777. {
  778. }
  779. }
  780. //---------------------------------------------------------------------------
  781. void __fastcall TTAS00701::TvListCustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  782. bool &ADone)
  783. {
  784. if (AViewInfo)
  785. {
  786. String sType = AViewInfo->GridRecord->DisplayTexts[Col01->Index];
  787. if (sType.Pos("전체"))
  788. {
  789. ACanvas->Brush->Color = clLime;
  790. }
  791. else
  792. {
  793. String sDesc = AViewInfo->GridRecord->DisplayTexts[Col02->Index];
  794. if (sDesc.Pos("평균"))
  795. {
  796. ACanvas->Brush->Color = clOlive;
  797. }
  798. }
  799. }
  800. }
  801. //---------------------------------------------------------------------------
  802. void __fastcall TTAS00701::Col01CustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  803. bool &ADone)
  804. {
  805. if (AViewInfo)
  806. {
  807. String sType = AViewInfo->GridRecord->DisplayTexts[Col02->Index];
  808. if (sType.Pos("전체"))
  809. {
  810. ACanvas->Brush->Color = clLime;
  811. }
  812. }
  813. }
  814. //---------------------------------------------------------------------------
  815. void __fastcall TTAS00701::CbOptionPropertiesChange(TObject *Sender)
  816. {
  817. TcxComboBox *pCombo = (TcxComboBox*)Sender;
  818. DrawChart(pCombo->ItemIndex);
  819. m_pFrmChart->SetFocus();
  820. }
  821. //---------------------------------------------------------------------------