IST0020MF.cpp 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "AppGlobalF.h"
  6. #include "ITSLangTransF.h"
  7. #pragma hdrstop
  8. #include "IST0020MF.h"
  9. //---------------------------------------------------------------------------
  10. #pragma package(smart_init)
  11. #pragma link "FRAME_ChartF"
  12. #pragma link "cxButtons"
  13. #pragma link "cxCalc"
  14. #pragma link "cxClasses"
  15. #pragma link "cxContainer"
  16. #pragma link "cxControls"
  17. #pragma link "cxCustomData"
  18. #pragma link "cxData"
  19. #pragma link "cxDataStorage"
  20. #pragma link "cxDBData"
  21. #pragma link "cxEdit"
  22. #pragma link "cxFilter"
  23. #pragma link "cxGraphics"
  24. #pragma link "cxGrid"
  25. #pragma link "cxGridBandedTableView"
  26. #pragma link "cxGridChartView"
  27. #pragma link "cxGridCustomTableView"
  28. #pragma link "cxGridCustomView"
  29. #pragma link "cxGridDBChartView"
  30. #pragma link "cxGridLevel"
  31. #pragma link "cxGridTableView"
  32. #pragma link "cxLabel"
  33. #pragma link "cxLookAndFeelPainters"
  34. #pragma link "cxLookAndFeels"
  35. #pragma link "cxPC"
  36. #pragma link "cxPCdxBarPopupMenu"
  37. #pragma link "cxSplitter"
  38. #pragma link "cxStyles"
  39. #pragma link "dxSkinBlack"
  40. #pragma link "dxSkinBlue"
  41. #pragma link "dxSkinsCore"
  42. #pragma link "dxSkinscxPCPainter"
  43. #pragma resource "*.dfm"
  44. TIST0020M *IST0020M = NULL;
  45. //---------------------------------------------------------------------------
  46. __fastcall TIST0020M::TIST0020M(TComponent* Owner)
  47. : TForm(Owner)
  48. {
  49. LangTrans->Translate(this, ITSDb_GetConnection());
  50. ITSSkin_Load(this);
  51. CMM_LoadForm(g_sFormsDir, this);
  52. FTitle = Caption;//"CCTV접속 통계";
  53. }
  54. //---------------------------------------------------------------------------
  55. /*
  56. * form이 메모리에서 생성될때 호출되는 생성자 이벤트 핸들러
  57. * arguments
  58. * Sender : event handler 객체
  59. * return
  60. * void
  61. */
  62. void __fastcall TIST0020M::FormCreate(TObject *Sender)
  63. {
  64. PgList->HideTabs = true;
  65. }
  66. //---------------------------------------------------------------------------
  67. /*
  68. * form을 보여줄때 호출되는 event 메서드이다.
  69. * arguments
  70. * Sender : event handler 객체
  71. * return
  72. * void
  73. */
  74. void __fastcall TIST0020M::FormShow(TObject *Sender)
  75. {
  76. PgList->ActivePageIndex = 0;
  77. PgQuery->ActivePageIndex= 0;
  78. FormInit();
  79. }
  80. //---------------------------------------------------------------------------
  81. /*
  82. * form 초기화
  83. * arguments
  84. *
  85. * return
  86. * void
  87. */
  88. void __fastcall TIST0020M::FormInit()
  89. {
  90. DtDay->Date = IncHour(Now(), -24);
  91. DtMon->Date = StartOfTheMonth(IncHour(Now(), -24));
  92. DtYear->Date = IncHour(Now(), -24);
  93. DtStYear->Date = IncHour(Now(), -24);
  94. DtEdYear->Date = IncHour(Now(), -24);
  95. ADOD->Connection = ITSDb_GetConnection();
  96. ADOM->Connection = ITSDb_GetConnection();
  97. ADOY->Connection = ITSDb_GetConnection();
  98. ADOT->Connection = ITSDb_GetConnection();
  99. FRAMEChart1->SetChartLegend(FrmLang->lblChartHour->Caption, FrmLang->lblChartCnt->Caption);//"시간대", "건수");
  100. FRAMEChart1->ChartValueDisplay(FRAMEChart1->ChkDisplayVal->Checked);
  101. FRAMEChart1->TvChart->ToolBox->CustomizeButton = true;
  102. FRAMEChart1->TvChart->Legend->Position = cppDefault;
  103. FRAMEChart2->SetChartLegend(FrmLang->lblChartDay->Caption, FrmLang->lblChartCnt->Caption);//"일자", "건수");
  104. FRAMEChart2->ChartValueDisplay(FRAMEChart2->ChkDisplayVal->Checked);
  105. FRAMEChart2->TvChart->ToolBox->CustomizeButton = true;
  106. FRAMEChart2->TvChart->Legend->Position = cppDefault;
  107. FRAMEChart3->SetChartLegend(FrmLang->lblChartMonth->Caption, FrmLang->lblChartCnt->Caption);//"월", "건수");
  108. FRAMEChart3->ChartValueDisplay(FRAMEChart3->ChkDisplayVal->Checked);
  109. FRAMEChart3->TvChart->ToolBox->CustomizeButton = true;
  110. FRAMEChart3->TvChart->Legend->Position = cppDefault;
  111. FRAMEChart4->SetChartLegend(FrmLang->lblChartYear->Caption, FrmLang->lblChartCnt->Caption);//"년도", "건수");
  112. FRAMEChart4->ChartValueDisplay(FRAMEChart4->ChkDisplayVal->Checked);
  113. FRAMEChart4->TvChart->ToolBox->CustomizeButton = true;
  114. FRAMEChart4->TvChart->Legend->Position = cppDefault;
  115. CMM_SetSummaryAlign((TcxGridTableView *)TvDay);
  116. CMM_SetSummaryAlign((TcxGridTableView *)TvMon);
  117. CMM_SetSummaryAlign((TcxGridTableView *)TvYear);
  118. CMM_SetSummaryAlign((TcxGridTableView *)TvTermYear);
  119. }
  120. //---------------------------------------------------------------------------
  121. /*
  122. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  123. * Form과 DataModule class를 delete시킨다.
  124. * arguments
  125. *
  126. * return
  127. * void
  128. */
  129. void __fastcall TIST0020M::CommClose()
  130. {
  131. try
  132. {
  133. TvDay->BeginUpdate();
  134. ADOD->Close();
  135. TvDay->EndUpdate();
  136. TvMon->BeginUpdate();
  137. ADOM->Close();
  138. TvMon->EndUpdate();
  139. TvYear->BeginUpdate();
  140. ADOY->Close();
  141. TvYear->EndUpdate();
  142. TvTermYear->BeginUpdate();
  143. ADOT->Close();
  144. TvTermYear->EndUpdate();
  145. CMM_SaveForm(g_sFormsDir, this);
  146. }
  147. catch(...)
  148. {
  149. }
  150. }
  151. //---------------------------------------------------------------------------
  152. /*
  153. * 통계구분 탭 변경시 발생하는 이벤트 핸들러
  154. * arguments
  155. *
  156. * return
  157. * void
  158. */
  159. void __fastcall TIST0020M::PgQueryChange(TObject *Sender)
  160. {
  161. //Tab Change
  162. PgList->ActivePageIndex = PgQuery->ActivePageIndex;
  163. switch(PgQuery->ActivePageIndex)
  164. {
  165. case 0: DtDay->SetFocus(); break;
  166. case 1: DtMon->SetFocus(); break;
  167. case 2: DtYear->SetFocus(); break;
  168. case 3: DtStYear->SetFocus(); break;
  169. default: break;
  170. }
  171. }
  172. //---------------------------------------------------------------------------
  173. /*
  174. * Print Button Click Event Handler
  175. * arguments
  176. * Sender : event handler 객체
  177. * return
  178. * void
  179. */
  180. void __fastcall TIST0020M::BtnPrintClick(TObject *Sender)
  181. {
  182. #if 0
  183. TcxGrid *pGrid = NULL;
  184. TcxGridDBBandedTableView *pView = NULL;
  185. TLabel *LblQry= NULL;
  186. String sTitle;
  187. switch(PgQuery->ActivePageIndex)
  188. {
  189. case 0: pGrid = CxDay; pView = TvDay;
  190. LblQry = LblQryTm;
  191. break;
  192. case 1: pGrid = CxMon; pView = TvMon;
  193. LblQry = LblQryDay;
  194. break;
  195. case 2: pGrid = CxYear; pView = TvYear;
  196. LblQry = LblQryYear;
  197. break;
  198. case 3: pGrid = CxTermYear; pView = TvTermYear;
  199. LblQry = LblQryTermYear;
  200. break;
  201. default: return;
  202. }
  203. sTitle = LblRptTitle->Caption + "\r\n" + LblQry->Caption;
  204. if (pView->DataController->RecordCount == 0)
  205. {
  206. ShowMessage(FrmLang->lblPrintNoData->Caption);//"인쇄 할 데이터가 없습니다.");
  207. return;
  208. }
  209. ComponentPrinterLink->OptionsView->Footers = true;
  210. ComponentPrinterLink->OptionsView->GroupFooters = true;
  211. ComponentPrinterLink->OptionsSize->AutoWidth = true;
  212. PrintList(pGrid, sTitle, m_sFooterRight);
  213. pView->DataController->FocusedRecordIndex = 0;
  214. #endif
  215. }
  216. //---------------------------------------------------------------------------
  217. /*
  218. * Excel Button Click Event Handler
  219. * arguments
  220. * Sender : event handler 객체
  221. * return
  222. * void
  223. */
  224. void __fastcall TIST0020M::BtnExlSaveClick(TObject *Sender)
  225. {
  226. TcxGrid *pGrid = NULL;
  227. TcxGridBandedTableView *pView = NULL;
  228. TLabel *LblQry= NULL;
  229. String sTitle;
  230. switch(PgQuery->ActivePageIndex)
  231. {
  232. case 0: pGrid = CxDay; pView = TvDay;
  233. LblQry = LblQryTm;
  234. break;
  235. case 1: pGrid = CxMon; pView = TvMon;
  236. LblQry = LblQryDay;
  237. break;
  238. case 2: pGrid = CxYear; pView = TvYear;
  239. LblQry = LblQryYear;
  240. break;
  241. case 3: pGrid = CxTermYear; pView = TvTermYear;
  242. LblQry = LblQryTermYear;
  243. break;
  244. default: return;
  245. }
  246. sTitle = LblRptTitle->Caption + LblQry->Caption;
  247. if (pView->DataController->RecordCount == 0)
  248. {
  249. ShowMessage(FrmLang->lblSaveNoData->Caption);//"저장 할 데이터가 없습니다.");
  250. return;
  251. }
  252. CMM_ExportToExcelFile(sTitle, pGrid, (TcxGridTableView *)pView, this);
  253. }
  254. //---------------------------------------------------------------------------
  255. /*
  256. * Refresh Button Click Event Handler
  257. * arguments
  258. * Sender : event handler 객체
  259. * return
  260. * void
  261. */
  262. void __fastcall TIST0020M::BtnSearchClick(TObject *Sender)
  263. {
  264. Application->ProcessMessages();
  265. TSqlCursor sqlCrs((TControl*)BtnSearch);
  266. Application->ProcessMessages();
  267. RefreshData();
  268. }
  269. //---------------------------------------------------------------------------
  270. /*
  271. * Refresh Data Event Function
  272. * arguments
  273. *
  274. * return
  275. * void
  276. */
  277. void __fastcall TIST0020M::RefreshData()
  278. {
  279. TcxGridBandedTableView *pView = NULL;
  280. TLabel *LblQry= NULL;
  281. WORD nYear, nMonth, nDay, nHour, nMin, nSec, nMSec;
  282. int nDispCols;
  283. String sBandText = "";
  284. TDateTimePicker *DtQryTm;
  285. int nStYear, nEdYear;
  286. switch(PgQuery->ActivePageIndex)
  287. {
  288. case 0:
  289. pView = (TcxGridBandedTableView *)TvDay; DtQryTm = DtDay;
  290. LblQry = LblQryTm;
  291. sBandText = "(" + DtDay->Date.FormatString("yyyy년 mm월 dd일") + ")";
  292. nDispCols = 24;
  293. if (StartOfTheDay(Now()) <= DtDay->DateTime)
  294. {
  295. DecodeTime(Now(), nHour, nMin, nSec, nMSec);
  296. if (nMin > 5) nDispCols = nHour;
  297. else nDispCols = nHour-1;
  298. // nDispCols = nHour+1;
  299. }
  300. break;
  301. case 1:
  302. pView = TvMon; DtQryTm = DtMon;
  303. sBandText = "(" + DtMon->Date.FormatString("yyyy년 mm월") + ")";
  304. LblQry = LblQryDay;
  305. nDispCols = ITSUtil_GetMonthLastDay(AnsiString(DtMon->Date.FormatString("yyyymm")).c_str());
  306. if (StartOfTheDay(Now()) <= EndOfTheMonth(DtMon->DateTime))
  307. {
  308. DecodeDate(Now(), nYear, nMonth, nDay);
  309. if (nDay < nDispCols) nDispCols = nDay-1;
  310. }
  311. break;
  312. case 2:
  313. pView = TvYear; DtQryTm = DtYear;
  314. sBandText = "(" + DtYear->Date.FormatString("yyyy년") + ")";
  315. LblQry = LblQryYear;
  316. nDispCols = 12;
  317. if (Now().FormatString("yyyy") == DtYear->DateTime.FormatString("yyyy"))
  318. {
  319. DecodeDate(Now(), nYear, nMonth, nDay);
  320. nDispCols = nMonth;
  321. }
  322. break;
  323. case 3:
  324. pView = TvTermYear; DtQryTm = DtStYear;
  325. nStYear = DtStYear->DateTime.FormatString("yyyy").ToInt();
  326. nEdYear = DtEdYear->DateTime.FormatString("yyyy").ToInt();
  327. if (nStYear > nEdYear)
  328. {
  329. MessageDlg(L"통계검색 시각 정보를 확인하세요...",
  330. mtInformation, TMsgDlgButtons() << mbOK, NULL);
  331. DtStYear->SetFocus();
  332. nDispCols = 0; /* 리턴하지 않는 경우 모든 컬럼을 숨긴다. */
  333. return;
  334. }
  335. if ((nEdYear - nStYear) > 23)
  336. {
  337. nEdYear = nStYear + 23;
  338. String sDateTime;
  339. sDateTime = String(nEdYear) + "-01-01 00:00:00";
  340. DtEdYear->DateTime = StrToDateTime(sDateTime);
  341. }
  342. nDispCols = nEdYear - nStYear;
  343. nDispCols++;
  344. sBandText = "(" + DtStYear->Date.FormatString("yyyy년 ~ ") + DtEdYear->Date.FormatString("yyyy년") + ")";
  345. LblQry = LblQryTermYear;
  346. #if 0
  347. if (Now().FormatString("yyyy") == DtYear->DateTime.FormatString("yyyy"))
  348. {
  349. DecodeDate(Now(), nYear, nMonth, nDay);
  350. nDispCols = nMonth;
  351. }
  352. #endif
  353. break;
  354. default: return;
  355. }
  356. if (!pView) return;
  357. if (PgQuery->ActivePageIndex == 3)
  358. {
  359. }
  360. else
  361. {
  362. if (DtQryTm->DateTime.FormatString("yyyymmdd").ToInt() > Now().FormatString("yyyymmdd").ToInt())
  363. {
  364. MessageDlg(L"통계검색 시각 정보를 확인하세요...",
  365. mtInformation, TMsgDlgButtons() << mbOK, NULL);
  366. DtQryTm->SetFocus();
  367. nDispCols = 0; /* 리턴하지 않는 경우 모든 컬럼을 숨긴다. */
  368. return;
  369. }
  370. }
  371. LblQry->Caption = sBandText;
  372. CMM_ShowListColumn((TcxGridDBBandedTableView *)pView, nDispCols);
  373. TWaitCursor crs;
  374. try
  375. {
  376. pView->BeginUpdate();
  377. switch(PgQuery->ActivePageIndex)
  378. {
  379. case 0: SelDayStatistics(nDispCols); break;
  380. case 1: SelMonthStatistics(nDispCols); break;
  381. case 2: SelYearStatistics(nDispCols); break;
  382. case 3: SelTermYearStatistics(nDispCols); break;
  383. default: return;
  384. }
  385. }
  386. __finally
  387. {
  388. pView->EndUpdate();
  389. //pView->ApplyBestFit(NULL, false, false);
  390. }
  391. DrawChart(sBandText);
  392. }
  393. //---------------------------------------------------------------------------
  394. /*
  395. * 조회한 데이터를 기준으로 차트를 그린다.
  396. * arguments
  397. *
  398. * return
  399. * void
  400. */
  401. void __fastcall TIST0020M::DrawChart(String sTitle)
  402. {
  403. #if 0
  404. TcxGridDBBandedTableView *pView = NULL;
  405. String sAxisX, sAxisY;
  406. int nAxisY, nStColIdx, nTotColIdx;
  407. nTotColIdx = 1;
  408. switch(PgQuery->ActivePageIndex)
  409. {
  410. case 0: pView = TvDay;
  411. nAxisY = vDayColumnNm->Index;
  412. nStColIdx = vDayColumnTot->Index;
  413. break;
  414. case 1: pView = TvMon;
  415. nAxisY = vMonColumnNm->Index;
  416. nStColIdx = vMonColumnTot->Index;
  417. break;
  418. case 2: pView = TvYear;
  419. nAxisY = vYearColumnNm->Index;
  420. nStColIdx = vYearColumnTot->Index;
  421. break;
  422. case 3: pView = TvTermYear;
  423. nAxisY = cxGridDBBandedColumn2->Index;
  424. nStColIdx = cxGridDBBandedColumn3->Index;
  425. break;
  426. default: return;
  427. }
  428. /*
  429. * Chart draw
  430. */
  431. try
  432. {
  433. m_pFrmChart[PgQuery->ActivePageIndex]->Clear();
  434. if (pView->DataController->RecordCount == 0)
  435. {
  436. //ShowMessage("표출 할 데이터가 없습니다.");
  437. return;
  438. }
  439. m_pFrmChart[PgQuery->ActivePageIndex]->BeginDraw("", "", "");
  440. m_pFrmChart[PgQuery->ActivePageIndex]->DrawChart1((TcxGridDBTableView *)pView, nAxisY, nStColIdx, nTotColIdx);
  441. m_pFrmChart[PgQuery->ActivePageIndex]->EndDraw();
  442. }
  443. catch(...)
  444. {
  445. }
  446. #endif
  447. }
  448. //---------------------------------------------------------------------------
  449. /*
  450. * 시간대별 일 통계 데이터 조회/출력
  451. * arguments
  452. *
  453. * return
  454. * void
  455. */
  456. void __fastcall TIST0020M::SelDayStatistics(int ADispCols)
  457. {
  458. TSqlCursor sqlCrs;
  459. TADOQuery *pADO = ADOD;
  460. String sQry;
  461. String sParamDay;
  462. sParamDay = DtDay->Date.FormatString("yyyymmdd");
  463. sQry = "SELECT Y.CCTVID AS POINT_NUM, Y.CCTV_ID, Y.NAME_KO, \r\n"
  464. " NVL(X.CCTVID,0) CCTVID, NVL(X.TOT,0) TOT, \r\n"
  465. " NVL(X.C00,0) C00, NVL(X.C01,0) C01, NVL(X.C02,0) C02, \r\n"
  466. " NVL(X.C03,0) C03, NVL(X.C04,0) C04, NVL(X.C05,0) C05, \r\n"
  467. " NVL(X.C06,0) C06, NVL(X.C07,0) C07, NVL(X.C08,0) C08, \r\n"
  468. " NVL(X.C09,0) C09, NVL(X.C10,0) C10, NVL(X.C11,0) C11, \r\n"
  469. " NVL(X.C12,0) C12, NVL(X.C13,0) C13, NVL(X.C14,0) C14, \r\n"
  470. " NVL(X.C15,0) C15, NVL(X.C16,0) C16, NVL(X.C17,0) C17, \r\n"
  471. " NVL(X.C18,0) C18, NVL(X.C19,0) C19, NVL(X.C20,0) C20, \r\n"
  472. " NVL(X.C21,0) C21, NVL(X.C22,0) C22, NVL(X.C23,0) C23 \r\n"
  473. " FROM (SELECT CASE WHEN GROUPING(TO_CHAR(A.CCTVID)) = 1 THEN '0' \r\n"
  474. " ELSE TO_CHAR(A.CCTVID) END AS CCTVID, \r\n"
  475. " SUM(A.CONNCNT) AS TOT, \r\n"
  476. " SUM(DECODE(A.STATHOUR, '00', A.CONNCNT, 0)) AS C00, \r\n"
  477. " SUM(DECODE(A.STATHOUR, '01', A.CONNCNT, 0)) AS C01, \r\n"
  478. " SUM(DECODE(A.STATHOUR, '02', A.CONNCNT, 0)) AS C02, \r\n"
  479. " SUM(DECODE(A.STATHOUR, '03', A.CONNCNT, 0)) AS C03, \r\n"
  480. " SUM(DECODE(A.STATHOUR, '04', A.CONNCNT, 0)) AS C04, \r\n"
  481. " SUM(DECODE(A.STATHOUR, '05', A.CONNCNT, 0)) AS C05, \r\n"
  482. " SUM(DECODE(A.STATHOUR, '06', A.CONNCNT, 0)) AS C06, \r\n"
  483. " SUM(DECODE(A.STATHOUR, '07', A.CONNCNT, 0)) AS C07, \r\n"
  484. " SUM(DECODE(A.STATHOUR, '08', A.CONNCNT, 0)) AS C08, \r\n"
  485. " SUM(DECODE(A.STATHOUR, '09', A.CONNCNT, 0)) AS C09, \r\n"
  486. " SUM(DECODE(A.STATHOUR, '10', A.CONNCNT, 0)) AS C10, \r\n"
  487. " SUM(DECODE(A.STATHOUR, '11', A.CONNCNT, 0)) AS C11, \r\n"
  488. " SUM(DECODE(A.STATHOUR, '12', A.CONNCNT, 0)) AS C12, \r\n"
  489. " SUM(DECODE(A.STATHOUR, '13', A.CONNCNT, 0)) AS C13, \r\n"
  490. " SUM(DECODE(A.STATHOUR, '14', A.CONNCNT, 0)) AS C14, \r\n"
  491. " SUM(DECODE(A.STATHOUR, '15', A.CONNCNT, 0)) AS C15, \r\n"
  492. " SUM(DECODE(A.STATHOUR, '16', A.CONNCNT, 0)) AS C16, \r\n"
  493. " SUM(DECODE(A.STATHOUR, '17', A.CONNCNT, 0)) AS C17, \r\n"
  494. " SUM(DECODE(A.STATHOUR, '18', A.CONNCNT, 0)) AS C18, \r\n"
  495. " SUM(DECODE(A.STATHOUR, '19', A.CONNCNT, 0)) AS C19, \r\n"
  496. " SUM(DECODE(A.STATHOUR, '20', A.CONNCNT, 0)) AS C20, \r\n"
  497. " SUM(DECODE(A.STATHOUR, '21', A.CONNCNT, 0)) AS C21, \r\n"
  498. " SUM(DECODE(A.STATHOUR, '22', A.CONNCNT, 0)) AS C22, \r\n"
  499. " SUM(DECODE(A.STATHOUR, '23', A.CONNCNT, 0)) AS C23 \r\n"
  500. " FROM TB_ST_HOUR_CONN_CCTV A \r\n"
  501. " WHERE A.STATDATE = :p01 \r\n"
  502. " GROUP BY ROLLUP(TO_CHAR(A.CCTVID))) X, \r\n"
  503. " (SELECT TO_CHAR(B.CCTV_MNGM_NMBR) AS CCTVID, \r\n"
  504. " B.CCTV_CTLR_ID AS CCTV_ID, \r\n"
  505. " B.ISTL_LCTN_NM AS NAME_KO \r\n"
  506. " FROM TB_CCTV_CTLR B \r\n"
  507. " WHERE SUBSTR(B.CCTV_CTLR_ID, 1, 3) = :p02) Y \r\n"
  508. " WHERE Y.CCTVID = X.CCTVID(+) \r\n"
  509. " ORDER BY Y.NAME_KO \r\n";
  510. try
  511. {
  512. ITSDb_SQLText(pADO, sQry);
  513. ITSDb_SQLBind(pADO, "p01", sParamDay);
  514. ITSDb_SQLBind(pADO, "p02", CenterId);
  515. ITSDb_SQLOpen(pADO);
  516. DspDayStatistics(ADispCols);
  517. }
  518. catch(EDatabaseError &E)
  519. {
  520. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  521. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  522. throw Exception(String(E.ClassName()) + E.Message);
  523. }
  524. catch(Exception &exception)
  525. {
  526. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  527. DBERRORMSG(Caption, String(exception.ClassName()), exception.Message, sQry);
  528. throw Exception(String(exception.ClassName()) + exception.Message);
  529. }
  530. }
  531. //---------------------------------------------------------------------------
  532. void __fastcall TIST0020M::DspDayStatistics(int ADispCols)
  533. {
  534. TSqlCursor sqlCrs;
  535. TADOQuery *pADO = ADOD;
  536. TcxGridTableView *TvList = (TcxGridTableView*)TvDay;
  537. TcxDataController *pGDC = TvList->DataController;
  538. TcxGridChartView *TvChart = FRAMEChart1->TvChart;
  539. FRAMEChart1->FTitle = LblQryTm->Caption;
  540. try
  541. {
  542. TcxGridChartSeries *pChart = NULL;
  543. TvChart->ClearSeries();
  544. FRAMEChart1->ChartValueDisplay(FRAMEChart1->ChkDisplayVal->Checked);
  545. CMM_ClearGridTableView(TvList);
  546. int nRow = 0;
  547. int nDataCnt = 0;
  548. try
  549. {
  550. TvList->BeginUpdate();
  551. TvChart->BeginUpdate();
  552. nDataCnt = pADO->RecordCount;
  553. TvChart->DataController->RecordCount = ADispCols+1;
  554. pGDC->RecordCount = nDataCnt;
  555. int ii;
  556. String sCol, sChart;
  557. TvChart->Categories->Values[0] = FrmLang->lblChartSoge->Caption;//"소계";
  558. for (ii = 0; ii < ADispCols; ii++)
  559. {
  560. sChart.printf(L"%02d", ii);
  561. TvChart->Categories->Values[ii+1] = sChart;
  562. }
  563. for( ; !pADO->Eof; pADO->Next(), nRow++)
  564. {
  565. String sId = pADO->FieldByName("CCTV_ID")->AsString;
  566. String sNm = pADO->FieldByName("NAME_KO")->AsString;
  567. pGDC->Values[nRow][ColDayNo->Index] = sId;
  568. pGDC->Values[nRow][ColDayNm->Index] = sNm;
  569. pChart = TvChart->CreateSeries();
  570. pChart->DataBinding->ValueType = "Integer";
  571. pChart->DisplayText = sNm;
  572. pGDC->Values[nRow][ColDayTt->Index] = pADO->FieldByName("TOT")->AsInteger;
  573. pChart->Values[0] = pGDC->Values[nRow][ColDayTt->Index];
  574. for (int ii = 0; ii < ADispCols; ii++)
  575. {
  576. sCol.printf(L"C%02d", ii);
  577. pGDC->Values[nRow][ColDay00->Index+ii] = pADO->FieldByName(sCol)->AsInteger;
  578. pChart->Values[ii+1] = pGDC->Values[nRow][ColDay00->Index+ii];
  579. }
  580. }
  581. }
  582. __finally
  583. {
  584. if (pADO)
  585. {
  586. pADO->Close();
  587. }
  588. TvChart->EndUpdate();
  589. TvList->EndUpdate();
  590. }
  591. }
  592. catch(EDatabaseError &E)
  593. {
  594. throw Exception(String(E.ClassName()) + E.Message);
  595. }
  596. catch(...)
  597. {
  598. throw Exception(FrmLang->lblDbErr->Caption);//"알수없는 오류가 발생하였습니다.");
  599. }
  600. }
  601. //---------------------------------------------------------------------------
  602. /*
  603. * 일별 월 통계 데이터 조회/출력
  604. * arguments
  605. *
  606. * return
  607. * void
  608. */
  609. void __fastcall TIST0020M::SelMonthStatistics(int ADispCols)
  610. {
  611. TSqlCursor sqlCrs;
  612. TADOQuery *pADO = ADOM;
  613. String sQry;
  614. String sQryDt;
  615. sQryDt = DtMon->Date.FormatString("yyyymm");
  616. sQry = "SELECT Y.CCTVID AS POINT_NUM, Y.CCTV_ID, Y.NAME_KO, \r\n"
  617. " NVL(X.CCTVID,0) CCTVID, NVL(X.TOT,0) TOT, \r\n"
  618. " NVL(X.C31,0) C31, NVL(X.C01,0) C01, NVL(X.C02,0) C02, \r\n"
  619. " NVL(X.C03,0) C03, NVL(X.C04,0) C04, NVL(X.C05,0) C05, \r\n"
  620. " NVL(X.C06,0) C06, NVL(X.C07,0) C07, NVL(X.C08,0) C08, \r\n"
  621. " NVL(X.C09,0) C09, NVL(X.C10,0) C10, NVL(X.C11,0) C11, \r\n"
  622. " NVL(X.C12,0) C12, NVL(X.C13,0) C13, NVL(X.C14,0) C14, \r\n"
  623. " NVL(X.C15,0) C15, NVL(X.C16,0) C16, NVL(X.C17,0) C17, \r\n"
  624. " NVL(X.C18,0) C18, NVL(X.C19,0) C19, NVL(X.C20,0) C20, \r\n"
  625. " NVL(X.C21,0) C21, NVL(X.C22,0) C22, NVL(X.C23,0) C23, \r\n"
  626. " NVL(X.C24,0) C24, NVL(X.C25,0) C25, NVL(X.C26,0) C26, \r\n"
  627. " NVL(X.C27,0) C27, NVL(X.C28,0) C28, NVL(X.C29,0) C29, \r\n"
  628. " NVL(X.C30,0) C30 \r\n"
  629. " FROM (SELECT CASE WHEN GROUPING(TO_CHAR(A.CCTVID)) = 1 THEN '0' \r\n"
  630. " ELSE TO_CHAR(A.CCTVID) END AS CCTVID, \r\n"
  631. " SUM(A.CONNCNT) AS TOT, \r\n"
  632. " SUM(DECODE(A.STATDAY, '01', A.CONNCNT, 0)) AS C01, \r\n"
  633. " SUM(DECODE(A.STATDAY, '02', A.CONNCNT, 0)) AS C02, \r\n"
  634. " SUM(DECODE(A.STATDAY, '03', A.CONNCNT, 0)) AS C03, \r\n"
  635. " SUM(DECODE(A.STATDAY, '04', A.CONNCNT, 0)) AS C04, \r\n"
  636. " SUM(DECODE(A.STATDAY, '05', A.CONNCNT, 0)) AS C05, \r\n"
  637. " SUM(DECODE(A.STATDAY, '06', A.CONNCNT, 0)) AS C06, \r\n"
  638. " SUM(DECODE(A.STATDAY, '07', A.CONNCNT, 0)) AS C07, \r\n"
  639. " SUM(DECODE(A.STATDAY, '08', A.CONNCNT, 0)) AS C08, \r\n"
  640. " SUM(DECODE(A.STATDAY, '09', A.CONNCNT, 0)) AS C09, \r\n"
  641. " SUM(DECODE(A.STATDAY, '10', A.CONNCNT, 0)) AS C10, \r\n"
  642. " SUM(DECODE(A.STATDAY, '11', A.CONNCNT, 0)) AS C11, \r\n"
  643. " SUM(DECODE(A.STATDAY, '12', A.CONNCNT, 0)) AS C12, \r\n"
  644. " SUM(DECODE(A.STATDAY, '13', A.CONNCNT, 0)) AS C13, \r\n"
  645. " SUM(DECODE(A.STATDAY, '14', A.CONNCNT, 0)) AS C14, \r\n"
  646. " SUM(DECODE(A.STATDAY, '15', A.CONNCNT, 0)) AS C15, \r\n"
  647. " SUM(DECODE(A.STATDAY, '16', A.CONNCNT, 0)) AS C16, \r\n"
  648. " SUM(DECODE(A.STATDAY, '17', A.CONNCNT, 0)) AS C17, \r\n"
  649. " SUM(DECODE(A.STATDAY, '18', A.CONNCNT, 0)) AS C18, \r\n"
  650. " SUM(DECODE(A.STATDAY, '19', A.CONNCNT, 0)) AS C19, \r\n"
  651. " SUM(DECODE(A.STATDAY, '20', A.CONNCNT, 0)) AS C20, \r\n"
  652. " SUM(DECODE(A.STATDAY, '21', A.CONNCNT, 0)) AS C21, \r\n"
  653. " SUM(DECODE(A.STATDAY, '22', A.CONNCNT, 0)) AS C22, \r\n"
  654. " SUM(DECODE(A.STATDAY, '23', A.CONNCNT, 0)) AS C23, \r\n"
  655. " SUM(DECODE(A.STATDAY, '24', A.CONNCNT, 0)) AS C24, \r\n"
  656. " SUM(DECODE(A.STATDAY, '25', A.CONNCNT, 0)) AS C25, \r\n"
  657. " SUM(DECODE(A.STATDAY, '26', A.CONNCNT, 0)) AS C26, \r\n"
  658. " SUM(DECODE(A.STATDAY, '27', A.CONNCNT, 0)) AS C27, \r\n"
  659. " SUM(DECODE(A.STATDAY, '28', A.CONNCNT, 0)) AS C28, \r\n"
  660. " SUM(DECODE(A.STATDAY, '29', A.CONNCNT, 0)) AS C29, \r\n"
  661. " SUM(DECODE(A.STATDAY, '30', A.CONNCNT, 0)) AS C30, \r\n"
  662. " SUM(DECODE(A.STATDAY, '31', A.CONNCNT, 0)) AS C31 \r\n"
  663. " FROM TB_ST_DAY_CONN_CCTV A \r\n"
  664. " WHERE A.STATMONTH = :p01 \r\n"
  665. " GROUP BY ROLLUP(TO_CHAR(A.CCTVID))) X, \r\n"
  666. " (SELECT TO_CHAR(B.CCTV_MNGM_NMBR) AS CCTVID, \r\n"
  667. " B.CCTV_CTLR_ID AS CCTV_ID, \r\n"
  668. " B.ISTL_LCTN_NM AS NAME_KO \r\n"
  669. " FROM TB_CCTV_CTLR B \r\n"
  670. " WHERE SUBSTR(B.CCTV_CTLR_ID, 1, 3) = :p02) Y \r\n"
  671. " WHERE Y.CCTVID = X.CCTVID(+) \r\n"
  672. " ORDER BY Y.NAME_KO \r\n";
  673. try
  674. {
  675. ITSDb_SQLText(pADO, sQry);
  676. ITSDb_SQLBind(pADO, "p01", sQryDt);
  677. ITSDb_SQLBind(pADO, "p02", CenterId);
  678. ITSDb_SQLOpen(pADO);
  679. DspMonthStatistics(ADispCols);
  680. }
  681. catch(EDatabaseError &E)
  682. {
  683. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  684. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  685. throw Exception(String(E.ClassName()) + E.Message);
  686. }
  687. catch(Exception &exception)
  688. {
  689. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  690. DBERRORMSG(Caption, String(exception.ClassName()), exception.Message, sQry);
  691. throw Exception(String(exception.ClassName()) + exception.Message);
  692. }
  693. }
  694. //---------------------------------------------------------------------------
  695. void __fastcall TIST0020M::DspMonthStatistics(int ADispCols)
  696. {
  697. TSqlCursor sqlCrs;
  698. TADOQuery *pADO = ADOM;
  699. TcxGridTableView *TvList = (TcxGridTableView*)TvMon;
  700. TcxDataController *pGDC = TvList->DataController;
  701. TcxGridChartView *TvChart = FRAMEChart2->TvChart;
  702. FRAMEChart2->FTitle = LblQryDay->Caption;
  703. try
  704. {
  705. TcxGridChartSeries *pChart = NULL;
  706. TvChart->ClearSeries();
  707. FRAMEChart2->ChartValueDisplay(FRAMEChart2->ChkDisplayVal->Checked);
  708. CMM_ClearGridTableView(TvList);
  709. int nRow = 0;
  710. int nDataCnt = 0;
  711. try
  712. {
  713. TvList->BeginUpdate();
  714. TvChart->BeginUpdate();
  715. nDataCnt = pADO->RecordCount;
  716. TvChart->DataController->RecordCount = ADispCols+1;
  717. pGDC->RecordCount = nDataCnt;
  718. int ii;
  719. String sCol, sChart;
  720. TvChart->Categories->Values[0] = FrmLang->lblChartSoge->Caption;//"소계";
  721. for (ii = 0; ii < ADispCols; ii++)
  722. {
  723. sChart.printf(L"%02d", ii+1);
  724. TvChart->Categories->Values[ii+1] = sChart;
  725. }
  726. for( ; !pADO->Eof; pADO->Next(), nRow++)
  727. {
  728. String sId = pADO->FieldByName("CCTV_ID")->AsString;
  729. String sNm = pADO->FieldByName("NAME_KO")->AsString;
  730. pGDC->Values[nRow][ColMonNo->Index] = sId;
  731. pGDC->Values[nRow][ColMonNm->Index] = sNm;
  732. pChart = TvChart->CreateSeries();
  733. pChart->DataBinding->ValueType = "Integer";
  734. pChart->DisplayText = sNm;
  735. pGDC->Values[nRow][ColMonTt->Index] = pADO->FieldByName("TOT")->AsInteger;
  736. pChart->Values[0] = pGDC->Values[nRow][ColMonTt->Index];
  737. for (int ii = 0; ii < ADispCols; ii++)
  738. {
  739. sCol.printf(L"C%02d", ii+1);
  740. pGDC->Values[nRow][ColMon01->Index+ii] = pADO->FieldByName(sCol)->AsInteger;
  741. pChart->Values[ii+1] = pGDC->Values[nRow][ColMon01->Index+ii];
  742. }
  743. }
  744. }
  745. __finally
  746. {
  747. if (pADO)
  748. {
  749. pADO->Close();
  750. }
  751. TvChart->EndUpdate();
  752. TvList->EndUpdate();
  753. }
  754. }
  755. catch(EDatabaseError &E)
  756. {
  757. throw Exception(String(E.ClassName()) + E.Message);
  758. }
  759. catch(...)
  760. {
  761. throw Exception(FrmLang->lblDbErr->Caption);//"알수없는 오류가 발생하였습니다.");
  762. }
  763. }
  764. //---------------------------------------------------------------------------
  765. /*
  766. * 월별 년 통계 데이터 조회/출력
  767. * arguments
  768. *
  769. * return
  770. * void
  771. */
  772. void __fastcall TIST0020M::SelYearStatistics(int ADispCols)
  773. {
  774. TSqlCursor sqlCrs;
  775. TADOQuery *pADO = ADOY;
  776. String sQry;
  777. String sQryDt;
  778. sQryDt = DtYear->Date.FormatString("yyyy");
  779. sQry = "SELECT Y.CCTVID AS POINT_NUM, Y.CCTV_ID, Y.NAME_KO, \r\n"
  780. " NVL(X.CCTVID,0) CCTVID, NVL(X.TOT,0) TOT, \r\n"
  781. " NVL(X.C12,0) C12, NVL(X.C01,0) C01, NVL(X.C02,0) C02, \r\n"
  782. " NVL(X.C03,0) C03, NVL(X.C04,0) C04, NVL(X.C05,0) C05, \r\n"
  783. " NVL(X.C06,0) C06, NVL(X.C07,0) C07, NVL(X.C08,0) C08, \r\n"
  784. " NVL(X.C09,0) C09, NVL(X.C10,0) C10, NVL(X.C11,0) C11 \r\n"
  785. " FROM (SELECT CASE WHEN GROUPING(TO_CHAR(A.CCTVID)) = 1 THEN '0' \r\n"
  786. " ELSE TO_CHAR(A.CCTVID) END AS CCTVID, \r\n"
  787. " SUM(A.CONNCNT) AS TOT, \r\n"
  788. " SUM(DECODE(A.STATMON, '01', A.CONNCNT, 0)) AS C01, \r\n"
  789. " SUM(DECODE(A.STATMON, '02', A.CONNCNT, 0)) AS C02, \r\n"
  790. " SUM(DECODE(A.STATMON, '03', A.CONNCNT, 0)) AS C03, \r\n"
  791. " SUM(DECODE(A.STATMON, '04', A.CONNCNT, 0)) AS C04, \r\n"
  792. " SUM(DECODE(A.STATMON, '05', A.CONNCNT, 0)) AS C05, \r\n"
  793. " SUM(DECODE(A.STATMON, '06', A.CONNCNT, 0)) AS C06, \r\n"
  794. " SUM(DECODE(A.STATMON, '07', A.CONNCNT, 0)) AS C07, \r\n"
  795. " SUM(DECODE(A.STATMON, '08', A.CONNCNT, 0)) AS C08, \r\n"
  796. " SUM(DECODE(A.STATMON, '09', A.CONNCNT, 0)) AS C09, \r\n"
  797. " SUM(DECODE(A.STATMON, '10', A.CONNCNT, 0)) AS C10, \r\n"
  798. " SUM(DECODE(A.STATMON, '11', A.CONNCNT, 0)) AS C11, \r\n"
  799. " SUM(DECODE(A.STATMON, '12', A.CONNCNT, 0)) AS C12 \r\n"
  800. " FROM TB_ST_MON_CONN_CCTV A \r\n"
  801. " WHERE A.STATYEAR = :p01 \r\n"
  802. " GROUP BY ROLLUP(TO_CHAR(A.CCTVID))) X, \r\n"
  803. " (SELECT TO_CHAR(B.CCTV_MNGM_NMBR) AS CCTVID, \r\n"
  804. " B.CCTV_CTLR_ID AS CCTV_ID, \r\n"
  805. " B.ISTL_LCTN_NM AS NAME_KO \r\n"
  806. " FROM TB_CCTV_CTLR B \r\n"
  807. " WHERE SUBSTR(B.CCTV_CTLR_ID, 1, 3) = :p02) Y \r\n"
  808. " WHERE Y.CCTVID = X.CCTVID(+) \r\n"
  809. " ORDER BY Y.NAME_KO \r\n";
  810. try
  811. {
  812. ITSDb_SQLText(pADO, sQry);
  813. ITSDb_SQLBind(pADO, "p01", sQryDt);
  814. ITSDb_SQLBind(pADO, "p02", CenterId);
  815. ITSDb_SQLOpen(pADO);
  816. DspYearStatistics(ADispCols);
  817. }
  818. catch(EDatabaseError &E)
  819. {
  820. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  821. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  822. throw Exception(String(E.ClassName()) + E.Message);
  823. }
  824. catch(Exception &exception)
  825. {
  826. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  827. DBERRORMSG(Caption, String(exception.ClassName()), exception.Message, sQry);
  828. throw Exception(String(exception.ClassName()) + exception.Message);
  829. }
  830. }
  831. //---------------------------------------------------------------------------
  832. void __fastcall TIST0020M::DspYearStatistics(int ADispCols)
  833. {
  834. TSqlCursor sqlCrs;
  835. TADOQuery *pADO = ADOY;
  836. TcxGridTableView *TvList = (TcxGridTableView*)TvYear;
  837. TcxDataController *pGDC = TvList->DataController;
  838. TcxGridChartView *TvChart = FRAMEChart3->TvChart;
  839. FRAMEChart3->FTitle = LblQryYear->Caption;
  840. try
  841. {
  842. TcxGridChartSeries *pChart = NULL;
  843. TvChart->ClearSeries();
  844. FRAMEChart3->ChartValueDisplay(FRAMEChart3->ChkDisplayVal->Checked);
  845. CMM_ClearGridTableView(TvList);
  846. int nRow = 0;
  847. int nDataCnt = 0;
  848. try
  849. {
  850. TvList->BeginUpdate();
  851. TvChart->BeginUpdate();
  852. nDataCnt = pADO->RecordCount;
  853. TvChart->DataController->RecordCount = ADispCols+1;
  854. pGDC->RecordCount = nDataCnt;
  855. int ii;
  856. String sCol, sChart;
  857. TvChart->Categories->Values[0] = FrmLang->lblChartSoge->Caption;//"소계";
  858. for (ii = 0; ii < ADispCols; ii++)
  859. {
  860. sChart.printf(L"%02d", ii+1);
  861. TvChart->Categories->Values[ii+1] = sChart;
  862. }
  863. for( ; !pADO->Eof; pADO->Next(), nRow++)
  864. {
  865. String sId = pADO->FieldByName("CCTV_ID")->AsString;
  866. String sNm = pADO->FieldByName("NAME_KO")->AsString;
  867. pGDC->Values[nRow][ColYearNo->Index] = sId;
  868. pGDC->Values[nRow][ColYearNm->Index] = sNm;
  869. pChart = TvChart->CreateSeries();
  870. pChart->DataBinding->ValueType = "Integer";
  871. pChart->DisplayText = sNm;
  872. pGDC->Values[nRow][ColYearTt->Index] = pADO->FieldByName("TOT")->AsInteger;
  873. pChart->Values[0] = pGDC->Values[nRow][ColYearTt->Index];
  874. for (int ii = 0; ii < ADispCols; ii++)
  875. {
  876. sCol.printf(L"C%02d", ii+1);
  877. pGDC->Values[nRow][ColYear01->Index+ii] = pADO->FieldByName(sCol)->AsInteger;
  878. pChart->Values[ii+1] = pGDC->Values[nRow][ColYear01->Index+ii];
  879. }
  880. }
  881. }
  882. __finally
  883. {
  884. if (pADO)
  885. {
  886. pADO->Close();
  887. }
  888. TvChart->EndUpdate();
  889. TvList->EndUpdate();
  890. }
  891. }
  892. catch(EDatabaseError &E)
  893. {
  894. throw Exception(String(E.ClassName()) + E.Message);
  895. }
  896. catch(...)
  897. {
  898. throw Exception(FrmLang->lblDbErr->Caption);//"알수없는 오류가 발생하였습니다.");
  899. }
  900. }
  901. //---------------------------------------------------------------------------
  902. /*
  903. * 월별 년 통계 데이터 조회/출력
  904. * arguments
  905. *
  906. * return
  907. * void
  908. */
  909. void __fastcall TIST0020M::SelTermYearStatistics(int ADispCols)
  910. {
  911. TSqlCursor sqlCrs;
  912. TADOQuery *pADO = ADOT;
  913. String sQry;
  914. String sCap, sTemp, sTemp2;
  915. String sStYear, sEdYear;
  916. sTemp = "";
  917. sTemp2= "";
  918. int ii;
  919. int nStYear = DtStYear->DateTime.FormatString("yyyy").ToInt();
  920. int nEdYear = DtEdYear->DateTime.FormatString("yyyy").ToInt();
  921. int nYears = nEdYear - nStYear;
  922. nYears++;
  923. sStYear = DtStYear->Date.FormatString("yyyy");
  924. sEdYear = DtEdYear->Date.FormatString("yyyy");
  925. TcxGridBand *pBand;
  926. try
  927. {
  928. TvTermYear->BeginUpdate();
  929. pBand = TvTermYear->Bands->Items[1];
  930. pBand->Visible = false;
  931. int nCols = pBand->ColumnCount;
  932. try
  933. {
  934. for (ii = 0; ii < nCols; ii++)
  935. {
  936. pBand->Columns[ii]->Visible = false;
  937. }
  938. for (ii = 0; ii < nYears && ii < 24; ii++)
  939. {
  940. TcxGridBandedColumn *pCol = TvTermYear->Columns[ColTYear00->Index+ii];
  941. sCap.printf(L"%04d", ii+nStYear);
  942. pCol->Caption = sCap;
  943. pCol->Width = 70;
  944. pCol->Visible = true;
  945. if (ii != 0)
  946. {
  947. sTemp += ", \r\n";
  948. sTemp2 += ", \r\n";
  949. }
  950. sCap.printf(L" NVL(X.C%02d,0) C%02d", ii, ii);
  951. sTemp += sCap;
  952. sCap.printf(L" SUM(DECODE(A.STATYEAR, '%04d', A.CONNCNT, 0)) AS C%02d", ii + nStYear, ii);
  953. sTemp2 += sCap;
  954. }
  955. sTemp += "\r\n";
  956. sTemp2 += "\r\n";
  957. }
  958. catch(...)
  959. {
  960. }
  961. }
  962. __finally
  963. {
  964. pBand->Width = nYears*70;
  965. pBand->Visible = true;
  966. TvTermYear->EndUpdate();
  967. }
  968. sQry = "SELECT Y.CCTVID AS POINT_NUM, Y.CCTV_ID, Y.NAME_KO, \r\n"
  969. " NVL(X.CCTVID,0) CCTVID, NVL(X.TOT,0) TOT, \r\n"
  970. + sTemp +
  971. // " NVL(X.C00,0) C00, \r\n"
  972. // " NVL(X.C01,0) C01, \r\n"
  973. // " NVL(X.C02,0) C02 \r\n"
  974. " FROM (SELECT CASE WHEN GROUPING(TO_CHAR(A.CCTVID)) = 1 THEN '0' \r\n"
  975. " ELSE TO_CHAR(A.CCTVID) END AS CCTVID, \r\n"
  976. " SUM(A.CONNCNT) AS TOT, \r\n"
  977. + sTemp2 +
  978. // " SUM(DECODE(A.STATYEAR, '2010', A.CONNCNT, 0)) AS C00, \r\n"
  979. // " SUM(DECODE(A.STATYEAR, '2011', A.CONNCNT, 0)) AS C01, \r\n"
  980. // " SUM(DECODE(A.STATYEAR, '2012', A.CONNCNT, 0)) AS C02 \r\n"
  981. " FROM TB_ST_MON_CONN_CCTV A \r\n"
  982. " WHERE A.STATYEAR BETWEEN :p01 AND :p02 \r\n"
  983. " GROUP BY ROLLUP(TO_CHAR(A.CCTVID))) X, \r\n"
  984. " (SELECT TO_CHAR(B.CCTV_MNGM_NMBR) AS CCTVID, \r\n"
  985. " B.CCTV_CTLR_ID AS CCTV_ID, \r\n"
  986. " B.ISTL_LCTN_NM AS NAME_KO \r\n"
  987. " FROM TB_CCTV_CTLR B \r\n"
  988. " WHERE SUBSTR(B.CCTV_CTLR_ID, 1, 3) = :p03) Y \r\n"
  989. " WHERE Y.CCTVID = X.CCTVID(+) \r\n"
  990. " ORDER BY Y.NAME_KO \r\n";
  991. try
  992. {
  993. ITSDb_SQLText(pADO, sQry);
  994. ITSDb_SQLBind(pADO, "p01", sStYear);
  995. ITSDb_SQLBind(pADO, "p02", sEdYear);
  996. ITSDb_SQLBind(pADO, "p03", CenterId);
  997. ITSDb_SQLOpen(pADO);
  998. DspTermYearStatistics(ADispCols, nStYear);
  999. }
  1000. catch(EDatabaseError &E)
  1001. {
  1002. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  1003. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  1004. throw Exception(String(E.ClassName()) + E.Message);
  1005. }
  1006. catch(Exception &exception)
  1007. {
  1008. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  1009. DBERRORMSG(Caption, String(exception.ClassName()), exception.Message, sQry);
  1010. throw Exception(String(exception.ClassName()) + exception.Message);
  1011. }
  1012. }
  1013. //---------------------------------------------------------------------------
  1014. void __fastcall TIST0020M::DspTermYearStatistics(int ADispCols, int AStYear)
  1015. {
  1016. TSqlCursor sqlCrs;
  1017. TADOQuery *pADO = ADOT;
  1018. TcxGridTableView *TvList = (TcxGridTableView*)TvTermYear;
  1019. TcxDataController *pGDC = TvList->DataController;
  1020. TcxGridChartView *TvChart = FRAMEChart4->TvChart;
  1021. FRAMEChart4->FTitle = LblQryTermYear->Caption;
  1022. try
  1023. {
  1024. TcxGridChartSeries *pChart = NULL;
  1025. TvChart->ClearSeries();
  1026. FRAMEChart4->ChartValueDisplay(FRAMEChart4->ChkDisplayVal->Checked);
  1027. CMM_ClearGridTableView(TvList);
  1028. int nRow = 0;
  1029. int nDataCnt = 0;
  1030. try
  1031. {
  1032. TvList->BeginUpdate();
  1033. TvChart->BeginUpdate();
  1034. nDataCnt = pADO->RecordCount;
  1035. TvChart->DataController->RecordCount = ADispCols+1;
  1036. pGDC->RecordCount = nDataCnt;
  1037. int ii;
  1038. String sCol, sChart;
  1039. TvChart->Categories->Values[0] = FrmLang->lblChartSoge->Caption;//"소계";
  1040. for (ii = 0; ii < ADispCols; ii++)
  1041. {
  1042. sChart.printf(L"%02d", AStYear + ii);
  1043. TvChart->Categories->Values[ii+1] = sChart;
  1044. }
  1045. for( ; !pADO->Eof; pADO->Next(), nRow++)
  1046. {
  1047. String sId = pADO->FieldByName("CCTV_ID")->AsString;
  1048. String sNm = pADO->FieldByName("NAME_KO")->AsString;
  1049. pGDC->Values[nRow][ColTYearNo->Index] = sId;
  1050. pGDC->Values[nRow][ColTYearNm->Index] = sNm;
  1051. pChart = TvChart->CreateSeries();
  1052. pChart->DataBinding->ValueType = "Integer";
  1053. pChart->DisplayText = sNm;
  1054. pGDC->Values[nRow][ColTYearTt->Index] = pADO->FieldByName("TOT")->AsInteger;
  1055. pChart->Values[0] = pGDC->Values[nRow][ColTYearTt->Index];
  1056. for (int ii = 0; ii < ADispCols; ii++)
  1057. {
  1058. sCol.printf(L"C%02d", ii);
  1059. pGDC->Values[nRow][ColTYear00->Index+ii] = pADO->FieldByName(sCol)->AsInteger;
  1060. pChart->Values[ii+1] = pGDC->Values[nRow][ColTYear00->Index+ii];
  1061. }
  1062. }
  1063. }
  1064. __finally
  1065. {
  1066. if (pADO)
  1067. {
  1068. pADO->Close();
  1069. }
  1070. TvChart->EndUpdate();
  1071. TvList->EndUpdate();
  1072. }
  1073. }
  1074. catch(EDatabaseError &E)
  1075. {
  1076. throw Exception(String(E.ClassName()) + E.Message);
  1077. }
  1078. catch(...)
  1079. {
  1080. throw Exception(FrmLang->lblDbErr->Caption);//"알수없는 오류가 발생하였습니다.");
  1081. }
  1082. }
  1083. //---------------------------------------------------------------------------
  1084. /*
  1085. * Summary Footer style set
  1086. * arguments
  1087. *
  1088. * return
  1089. * void
  1090. */
  1091. void __fastcall TIST0020M::TvListDataControllerSummaryFooterSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1092. TcxSummaryEventOutArguments &OutArguments)
  1093. {
  1094. CMM_SetSummaryItemKind(Arguments, OutArguments, 2, false, false);
  1095. }
  1096. //---------------------------------------------------------------------------
  1097. /*
  1098. * Summary Footer style set
  1099. * arguments
  1100. *
  1101. * return
  1102. * void
  1103. */
  1104. void __fastcall TIST0020M::TvListDataControllerSummaryDefaultGroupSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1105. TcxSummaryEventOutArguments &OutArguments)
  1106. {
  1107. CMM_SetSummaryItemKind(Arguments, OutArguments, 1, false, false);
  1108. }
  1109. //---------------------------------------------------------------------------
  1110. /*
  1111. * Close 버튼 클릭 이벤트 핸들러
  1112. * arguments
  1113. * Sender : event handler 객체
  1114. * return
  1115. * void
  1116. */
  1117. void __fastcall TIST0020M::BtnCloseClick(TObject *Sender)
  1118. {
  1119. Close();
  1120. }
  1121. //---------------------------------------------------------------------------
  1122. void __fastcall TIST0020M::FormClose(TObject *Sender, TCloseAction &Action)
  1123. {
  1124. CommClose();
  1125. IST0020M = NULL;
  1126. Action = caFree;
  1127. }
  1128. //---------------------------------------------------------------------------