TAS00701F.cpp 32 KB

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