TAS00501F.cpp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479
  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 <DateUtils.hpp>
  9. #include "ITSLangTransF.h"
  10. #pragma hdrstop
  11. #include "TAS00501F.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 "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. TTAS00501 *TAS00501 = NULL;
  42. //---------------------------------------------------------------------------
  43. __fastcall TTAS00501::TTAS00501(TComponent* Owner, HWND hHandle,
  44. String AAtrdId, String AAtrdNm, String AAtrdId1, String AAtrdNm1, String AQryDay)
  45. : TForm(Owner)
  46. {
  47. LangTrans->Translate(this, ITSDb_GetConnection());
  48. ITSSkin_Load(this);
  49. CMM_LoadForm(g_sFormsDir, this);
  50. FParent = hHandle;
  51. FAtrdId = AAtrdId; //IFSC_ID
  52. FAtrdNm = AAtrdNm; //IFSC_NM
  53. FAtrdId1 = AAtrdId1; //IFSC_ID
  54. FAtrdNm1 = AAtrdNm1; //IFSC_NM
  55. FQryDay = AQryDay; //특수일
  56. FTrfManager = new TDetourTrfManager();
  57. SetQueryDay(FQryDay);
  58. }
  59. //---------------------------------------------------------------------------
  60. __fastcall TTAS00501::~TTAS00501(void)
  61. {
  62. }
  63. //--------------------------------------------------------------------------
  64. void __fastcall TTAS00501::FormInit()
  65. {
  66. ADOQry->Connection = ITSDb_GetConnection();
  67. m_pGDC = TvList->DataController;
  68. TvList->OptionsView->NoDataToDisplayInfoText = FrmLang->lblNoInfo->Caption;//"<우회도로분석 정보>";
  69. LblSearch->Caption = FrmLang->lblQryCond->Caption + FAtrdId + "/" + FAtrdId1 + " [" + FQryDay + "]";
  70. }
  71. //---------------------------------------------------------------------------
  72. void __fastcall TTAS00501::FormShow(TObject *Sender)
  73. {
  74. FormInit();
  75. Refresh();
  76. TmrShow->Enabled = true;
  77. }
  78. //---------------------------------------------------------------------------
  79. void __fastcall TTAS00501::CommClose()
  80. {
  81. try
  82. {
  83. delete FTrfManager;
  84. FTrfManager = NULL;
  85. }
  86. catch(Exception &e)
  87. {
  88. }
  89. CMM_SaveForm(g_sFormsDir, this);
  90. //TAS00501 = NULL;
  91. }
  92. //---------------------------------------------------------------------------
  93. void __fastcall TTAS00501::TmrShowTimer(TObject *Sender)
  94. {
  95. TmrShow->Enabled = false;
  96. Application->ProcessMessages();
  97. SelHistory1();
  98. SelHistory2();
  99. DspHistory();
  100. }
  101. //---------------------------------------------------------------------------
  102. void __fastcall TTAS00501::ChkExpandClick(TObject *Sender)
  103. {
  104. CMM_ExpandCollapseChk(TvList, ChkExpand->Checked);
  105. }
  106. //---------------------------------------------------------------------------
  107. String __fastcall TTAS00501::GetDayWeek(TDateTime ADay)
  108. {
  109. System::Word week = DayOfWeek(ADay);
  110. //const days: array[1..7] of string = ('일','월','화','수','목','금','토');
  111. String sWeek[8] = { "", "일", "월", "화", "수", "목", "금", "토" };
  112. return " [" + sWeek[week] + "]";
  113. }
  114. //---------------------------------------------------------------------------
  115. void __fastcall TTAS00501::SetQueryDay(String ADay)
  116. {
  117. TDateTime dt, dtTemp;
  118. System::Word Year = (System::Word)ADay.SubString( 1, 4).ToIntDef(2018);
  119. System::Word Month = (System::Word)ADay.SubString( 5, 2).ToIntDef(1);
  120. System::Word Day = (System::Word)ADay.SubString( 7, 2).ToIntDef(1);
  121. dt = EncodeDate(Year, Month, Day);
  122. int nInc = -3;
  123. for (int ii = 0; ii < MAX_QRY_TERM; ii++)
  124. {
  125. FQryDayList[ii] = IncDay(dt, nInc++);
  126. TDetourTrf *pTrf = new TDetourTrf();
  127. pTrf->dtQry = FQryDayList[ii];
  128. pTrf->sQryDay = FQryDayList[ii].FormatString("YYYYMMDD");
  129. pTrf->IFSC_ID = FAtrdId;
  130. FTrfManager->FLists.Push(pTrf->sQryDay, pTrf);
  131. TvList->Bands->Items[ii+1]->Caption = FQryDayList[ii].FormatString("YYYY-MM-DD") + GetDayWeek(FQryDayList[ii]);
  132. }
  133. }
  134. //---------------------------------------------------------------------------
  135. void __fastcall TTAS00501::SelHistory1()
  136. {
  137. #if 0
  138. #endif
  139. }
  140. //---------------------------------------------------------------------------
  141. void __fastcall TTAS00501::SelHistory2()
  142. {
  143. TSqlCursor sqlCrs;
  144. String sQry;
  145. TADOQuery *pADO = ADOQry;
  146. sQry =
  147. "SELECT A.IFSC_ID, A.STAT_DT, \r\n"
  148. " SUBSTR(A.STAT_DT, 1,8) AS STAT_DD, SUBSTR(A.STAT_DT, 9,2) AS STAT_HH, \r\n"
  149. " A.SPED, A.TRVL_HH, \r\n"
  150. " NVL(B.CMTR_GRAD_CD, 'LTC0') AS GRAD \r\n"
  151. " FROM TB_IFSC_HH_STAT A, \r\n"
  152. " TB_SECT_GRAD_STUP B, \r\n"
  153. " TB_IFSC C \r\n"
  154. " WHERE A.STAT_DT BETWEEN :p01 AND :p02 \r\n"
  155. " AND A.IFSC_ID IN (:p03, :p04) \r\n"
  156. " AND A.IFSC_ID = C.IFSC_ID \r\n"
  157. " AND B.SECT_GRAD_CD = C.SECT_GRAD_CD \r\n"
  158. " AND (A.SPED >= B.LWST_TRVL_SPED AND A.SPED <= B.HGHS_TRVL_SPED) \r\n";
  159. try
  160. {
  161. ITSDb_SQLText(pADO, sQry);
  162. ITSDb_SQLBind(pADO, "p01", FQryDayList[ 0].FormatString("YYYYMMDD") + "000000");
  163. ITSDb_SQLBind(pADO, "p02", FQryDayList[MAX_QRY_TERM-1].FormatString("YYYYMMDD") + "235959");
  164. ITSDb_SQLBind(pADO, "p03", FAtrdId); //IFSC_ID
  165. ITSDb_SQLBind(pADO, "p04", FAtrdId1); //IFSC_ID
  166. ITSDb_SQLOpen(pADO);
  167. int nIdx, nIfsc;
  168. TDetourTrf *pTrf;
  169. for( ; !pADO->Eof; pADO->Next())
  170. {
  171. pTrf = FTrfManager->FLists.Find(pADO->FieldByName("STAT_DD")->AsString);
  172. if (pTrf == NULL) continue;
  173. nIdx = pADO->FieldByName("STAT_HH")->AsInteger;
  174. if (pADO->FieldByName("IFSC_ID")->AsString == FAtrdId)
  175. nIfsc = 0;
  176. else
  177. nIfsc = 1;
  178. pTrf->INFO[nIfsc][nIdx].SPED = pADO->FieldByName("SPED")->AsString.ToIntDef(0);
  179. pTrf->INFO[nIfsc][nIdx].GRAD = pADO->FieldByName("GRAD")->AsString;
  180. }
  181. pADO->Close();
  182. }
  183. catch(EDatabaseError &E)
  184. {
  185. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  186. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  187. throw Exception(String(E.ClassName()) + E.Message);
  188. }
  189. catch(Exception &e)
  190. {
  191. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  192. DBERRORMSG(Caption, String(e.ClassName()), e.Message, sQry);
  193. throw Exception(String(e.ClassName()) + e.Message);
  194. }
  195. }
  196. //---------------------------------------------------------------------------
  197. void __fastcall TTAS00501::DspHistory()
  198. {
  199. m_pGDC = TvList->DataController;
  200. try
  201. {
  202. CMM_ClearGridTableView(TvList);
  203. int nRow1 = 0;
  204. int nDataCnt = 0;
  205. int ii;
  206. try
  207. {
  208. TvList->BeginUpdate(lsimImmediate);
  209. nDataCnt = FTrfManager->FLists.Size();
  210. String sCaption;
  211. int nIdxSped, nIdxGrad;
  212. int nGap;
  213. for (ii = 0; ii < DAY_HOUR; ii++)
  214. {
  215. nRow1 = m_pGDC->AppendRecord();
  216. sCaption.printf(L"%02d", ii);
  217. m_pGDC->Values[nRow1][Col03->Index] = sCaption;
  218. nIdxSped = ColSped->Index;
  219. nIdxGrad = ColGrad->Index;
  220. FOR_STL(TDetourTrf*, pObj, FTrfManager->FLists)
  221. {
  222. m_pGDC->Values[nRow1][nIdxSped++] = pObj->INFO[0][ii].SPED;
  223. m_pGDC->Values[nRow1][nIdxSped++] = pObj->INFO[1][ii].SPED;
  224. nGap = pObj->INFO[0][ii].SPED - pObj->INFO[1][ii].SPED;
  225. if (nGap < 0)
  226. {
  227. sCaption.printf(L"▼ %3d", nGap*-1);
  228. }
  229. else if (nGap > 0)
  230. {
  231. sCaption.printf(L"▲ %3d", nGap);
  232. }
  233. else
  234. {
  235. sCaption = "0";
  236. }
  237. m_pGDC->Values[nRow1][nIdxSped++] = sCaption;
  238. m_pGDC->Values[nRow1][nIdxGrad++] = pObj->INFO[0][ii].GRAD;
  239. m_pGDC->Values[nRow1][nIdxGrad++] = pObj->INFO[1][ii].GRAD;
  240. m_pGDC->Values[nRow1][nIdxGrad++] = pObj->INFO[0][ii].GRAD;
  241. }
  242. }
  243. }
  244. __finally
  245. {
  246. TvList->EndUpdate();
  247. //CxList->SetFocus();
  248. //DrawChart(FAtrdNm + " [" + FQryDay + "]");
  249. LblRecords->Caption = FormatFloat("##,##0", m_pGDC->RecordCount) + FrmLang->lblEA->Caption;//" 건";
  250. String sEnd = FrmLang->lblQrySel->Caption + " [" + LblRecords->Caption + "]";//"데이터 " + LblRecords->Caption + " 이 조회 되었습니다.";
  251. Application->MessageBox(sEnd.c_str(),
  252. FrmLang->lblQryEnd->Caption.c_str(),//L"데이터 조회 완료",
  253. MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  254. }
  255. }
  256. catch(EDatabaseError &E)
  257. {
  258. throw Exception(String(E.ClassName()) + E.Message);
  259. }
  260. catch(Exception &e)
  261. {
  262. throw Exception(String(e.ClassName()) + e.Message);
  263. }
  264. }
  265. //---------------------------------------------------------------------------
  266. void __fastcall TTAS00501::DrawChart(String ATitle)
  267. {
  268. TcxGridBandedTableView *pView = NULL;
  269. String sAxisX, sAxisY;
  270. int nAxisY1, nAxisY2, nStColIdx, nEdColIdx, nTotColIdx;
  271. nEdColIdx = 0;
  272. nTotColIdx = -1;
  273. pView = TvList;
  274. nAxisY1 = Col03->Index; //특수일
  275. nAxisY2 = Col04->Index; //구분(화면보이지 않음)
  276. nEdColIdx = TvListColumn29->Index; // 23시
  277. nStColIdx = ColSped->Index; // 00시
  278. /*
  279. * Chart draw
  280. */
  281. try
  282. {
  283. m_pFrmChart->Clear();
  284. if (pView->DataController->RecordCount == 0)
  285. {
  286. return;
  287. }
  288. m_pFrmChart->BeginDraw("", "", "");
  289. m_pFrmChart->DrawChart5_1((TcxGridTableView *)pView, nAxisY1, nAxisY2, nStColIdx, nEdColIdx, nTotColIdx);
  290. m_pFrmChart->EndDraw();
  291. }
  292. catch(...)
  293. {
  294. }
  295. }
  296. //---------------------------------------------------------------------------
  297. void __fastcall TTAS00501::OnMessage(TMessage &Msg)
  298. {
  299. switch (Msg.Msg)
  300. {
  301. case WM_PARAM_DATABASE:
  302. if (WP_DB_SELECT_OK == Msg.WParam)
  303. {
  304. //ShowMessage("Select Ok");
  305. }
  306. break;
  307. }
  308. }
  309. //---------------------------------------------------------------------------
  310. void __fastcall TTAS00501::BtnExlSaveClick(TObject *Sender)
  311. {
  312. TcxGrid *pGrid = CxList;
  313. TcxGridTableView *pView = TvList;
  314. String sTitle= Caption;//"우회도로분석";
  315. CMM_ExportToExcelFile(sTitle, pGrid, pView, this);
  316. }
  317. //---------------------------------------------------------------------------
  318. void __fastcall TTAS00501::FormClose(TObject *Sender, TCloseAction &Action)
  319. {
  320. POST_MSG(FParent, WM_SUBFORM_CLOSE, 0, 0);
  321. CommClose();
  322. //TAS00501 = NULL;
  323. }
  324. //---------------------------------------------------------------------------
  325. void __fastcall TTAS00501::FormDestroy(TObject *Sender)
  326. {
  327. CommClose();
  328. }
  329. //---------------------------------------------------------------------------
  330. void __fastcall TTAS00501::FormCreate(TObject *Sender)
  331. {
  332. m_pFrmChart = new TPlugInChart(this);
  333. m_pFrmChart->Parent = PnlChart;
  334. m_pFrmChart->SetChartInfo("", "시간", "속도");
  335. m_pFrmChart->Show();
  336. }
  337. //---------------------------------------------------------------------------
  338. void __fastcall TTAS00501::ColSpedCustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas,
  339. TcxGridTableDataCellViewInfo *AViewInfo, bool &ADone)
  340. {
  341. TColor tColor = ACanvas->Brush->Color;
  342. TColor tFont = clBlack;
  343. try
  344. {
  345. if (!VarIsNull(AViewInfo->Value))
  346. {
  347. String sSpd = AViewInfo->Value;
  348. if (sSpd == NULL || sSpd.IsEmpty() || sSpd == "0" || sSpd == "-")
  349. {
  350. tColor = clSilver;
  351. }
  352. else
  353. {
  354. String sGrad = AViewInfo->GridRecord->DisplayTexts[AViewInfo->Item->Index+24];
  355. if (sGrad == "LTC1") tColor = clLime;
  356. else if (sGrad == "LTC2") tColor = clYellow;
  357. else if (sGrad == "LTC3") tColor = clRed;
  358. else tColor = clSilver;
  359. }
  360. }
  361. else
  362. {
  363. tColor = clSilver;
  364. }
  365. if (tColor == clSilver) tFont = tColor;
  366. ACanvas->Font->Color = tFont;
  367. ACanvas->SetBrushColor(tColor);
  368. }
  369. catch(...)
  370. {
  371. }
  372. }
  373. //---------------------------------------------------------------------------
  374. void __fastcall TTAS00501::TvListDiffCustomDrawCell(TcxCustomGridTableView *Sender,
  375. TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  376. bool &ADone)
  377. {
  378. TColor tColor = ACanvas->Brush->Color;
  379. TColor tFont = clBlack;
  380. try
  381. {
  382. if (!VarIsNull(AViewInfo->Value))
  383. {
  384. String sTmp = AViewInfo->Value;
  385. int sVal = sTmp.ToIntDef(99999);
  386. if (sVal != 99999)
  387. {
  388. if (sVal > 2)
  389. {
  390. tColor = clRed;
  391. }
  392. else
  393. if (sVal < -2)
  394. {
  395. tColor = clFuchsia;
  396. }
  397. else
  398. {
  399. tColor = clLime;
  400. }
  401. }
  402. }
  403. ACanvas->Font->Color = tFont;
  404. ACanvas->SetBrushColor(tColor);
  405. }
  406. catch(...)
  407. {
  408. }
  409. }
  410. //---------------------------------------------------------------------------