ITS0050MF.cpp 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "ITSDbF.h"
  6. #include "AppGlobalF.h"
  7. #include "CDSCodeF.h"
  8. #include "CDSNodeF.h"
  9. #include "CDSLinkF.h"
  10. #include "CDSServiceLinkF.h"
  11. #include "CDSRoadF.h"
  12. #include "ITSLangTransF.h"
  13. #pragma hdrstop
  14. #include "ITS0050MF.h"
  15. #include "ITSSEL2MF.h"
  16. #include "ITSSELAMF.h"
  17. //---------------------------------------------------------------------------
  18. #pragma package(smart_init)
  19. #pragma link "cxButtonEdit"
  20. #pragma link "cxButtons"
  21. #pragma link "cxCalc"
  22. #pragma link "cxClasses"
  23. #pragma link "cxContainer"
  24. #pragma link "cxControls"
  25. #pragma link "cxCustomData"
  26. #pragma link "cxData"
  27. #pragma link "cxDataStorage"
  28. #pragma link "cxDropDownEdit"
  29. #pragma link "cxEdit"
  30. #pragma link "cxFilter"
  31. #pragma link "cxGraphics"
  32. #pragma link "cxGrid"
  33. #pragma link "cxGridCustomTableView"
  34. #pragma link "cxGridCustomView"
  35. #pragma link "cxGridLevel"
  36. #pragma link "cxGridTableView"
  37. #pragma link "cxGroupBox"
  38. #pragma link "cxLabel"
  39. #pragma link "cxLookAndFeelPainters"
  40. #pragma link "cxLookAndFeels"
  41. #pragma link "cxMaskEdit"
  42. #pragma link "cxSpinEdit"
  43. #pragma link "cxSplitter"
  44. #pragma link "cxStyles"
  45. #pragma link "cxTextEdit"
  46. #pragma link "dxSkinBlack"
  47. #pragma link "dxSkinBlue"
  48. #pragma link "dxSkinsCore"
  49. #pragma link "dxSkinscxPCPainter"
  50. #pragma resource "*.dfm"
  51. TITS0050M *ITS0050M = NULL;
  52. //---------------------------------------------------------------------------
  53. __fastcall TITS0050M::TITS0050M(TComponent* Owner)
  54. : TForm(Owner)
  55. {
  56. LangTrans->Translate(this, ITSDb_GetConnection());
  57. ITSSkin_Load(this);
  58. CMM_LoadForm(g_sFormsDir, this);
  59. FTitle = Caption;//"반복정체구간관리(기상)";
  60. }
  61. //---------------------------------------------------------------------------
  62. /*
  63. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  64. * Form과 DataModule class를 delete시킨다.
  65. * arguments
  66. *
  67. * return
  68. * void
  69. */
  70. void __fastcall TITS0050M::CommClose()
  71. {
  72. try
  73. {
  74. CMM_SaveForm(g_sFormsDir, this);
  75. delete FCodeDTW;
  76. }
  77. catch(...)
  78. {
  79. }
  80. }
  81. //---------------------------------------------------------------------------
  82. /*
  83. * form 초기화
  84. *
  85. * arguments
  86. *
  87. * return
  88. * void
  89. */
  90. void __fastcall TITS0050M::FormInit()
  91. {
  92. //SendMessage(DateTimePicker1->Handle, DTM_SETFORMAT, 0, Longint("HH:mm:ss"));
  93. //DateTimePicker1->Time = FormatDateTime("HH:mm:ss", Time());
  94. m_pGDC1 = TvList1->DataController;
  95. m_pGDC2 = TvList2->DataController;
  96. TvList1->OptionsView->NoDataToDisplayInfoText = FrmLang->lblNoInfo->Caption;//"<예상 반복정체구간(기상) 정보가 없습니다>";
  97. TvList2->OptionsView->NoDataToDisplayInfoText = FrmLang->lblNoInfo->Caption;//"<확정 반복정체구간(기상) 정보가 없습니다>";
  98. FCodeRCS = ItsCodeManager->FLists.Find("RCS");
  99. #if 0
  100. FCodeDTW = ItsCodeManager->FLists.Find("DTW");
  101. #else
  102. FCodeDTW = new TItsCode();
  103. FCodeDTW->CMMN_CLSF_CD = "ITS0050M"; //'공통 분류 코드';
  104. FCodeDTW->MSG_TYPE_CD = ""; //''메시지 유형 코드';
  105. FCodeDTW->CMMN_CLSF_KOR_NM = "반복정체기상코드"; //''공통 분류 한글 명';
  106. FCodeDTW->CMMN_CLSF_ENGL_NM = ""; //''공통 분류 영문 명';
  107. FCodeDTW->USE_SYST_CD = "공통"; //''사용 시스템 코드';
  108. FCodeDTW->RMRK = ""; //''비고';
  109. FCodeDTW->USE_YN = "Y"; //''사용 여부';
  110. FCodeDTW->FRST_REGR_NMBR = ""; //''최초 등록자 번호';
  111. FCodeDTW->FRST_RGST_DT = ""; //''최초 등록 일시';
  112. FCodeDTW->LAST_CRPR_NMBR = ""; //''최종 수정자 번호';
  113. FCodeDTW->LAST_CRCT_DT = ""; //''최종 수정 일시';
  114. FCodeDTW->Completed = true;
  115. for (int ii = 0; ii < 4; ii++)
  116. {
  117. TItsSubCode *pSubCode = new TItsSubCode();
  118. pSubCode->CMMN_CD = String(ii);
  119. pSubCode->CMMN_CLSF_CD = "ITS0050M";
  120. switch(ii)
  121. {
  122. case 0: pSubCode->CMMN_CD_KOR_NM = "없음"; break;
  123. case 1: pSubCode->CMMN_CD_KOR_NM = "비"; break;
  124. case 2: pSubCode->CMMN_CD_KOR_NM = "비/눈"; break;
  125. case 3: pSubCode->CMMN_CD_KOR_NM = "눈"; break;
  126. }
  127. pSubCode->USE_YN = "Y";
  128. FCodeDTW->FSubLists.Push(pSubCode->CMMN_CD, pSubCode);
  129. pSubCode->Completed = true;
  130. }
  131. #endif
  132. FCodeLTC = ItsCodeManager->FLists.Find("LTC");
  133. FCodeIFD = ItsCodeManager->FLists.Find("IFD");
  134. if (FCodeDTW)
  135. {
  136. CbDayType->Properties->Items->Clear();
  137. FOR_STL(TItsSubCode *, pSubCode, FCodeDTW->FSubLists)
  138. {
  139. CbDayType->Properties->Items->Add("[" + pSubCode->CMMN_CD + "] " + pSubCode->CMMN_CD_KOR_NM);
  140. }
  141. CbDayType->ItemIndex = 0;
  142. }
  143. #if 0
  144. CbDayType->Properties->Items->Clear();
  145. CbDayType->Properties->Items->Add("[0] 없음");
  146. CbDayType->Properties->Items->Add("[1] 비");
  147. CbDayType->Properties->Items->Add("[2] 비/눈");
  148. CbDayType->Properties->Items->Add("[3] 눈");
  149. CbDayType->ItemIndex = 0;
  150. #endif
  151. }
  152. //---------------------------------------------------------------------------
  153. /*
  154. * Form을 보여줄때 호출되는 event 메서드이다.
  155. * arguments
  156. * Sender : event handler 객체
  157. * return
  158. * void
  159. */
  160. void __fastcall TITS0050M::FormShow(TObject *Sender)
  161. {
  162. Refresh();
  163. FormInit();
  164. TmrShow->Enabled = true;
  165. }
  166. //---------------------------------------------------------------------------
  167. /*
  168. * Form이 Show되고 난 후 최초 1회 수행되는 타이머 이벤트
  169. * arguments
  170. * Sender : event handler 객체
  171. * return
  172. * void
  173. */
  174. void __fastcall TITS0050M::TmrShowTimer(TObject *Sender)
  175. {
  176. TmrShow->Enabled = false;
  177. BtnSearchClick((TObject*)BtnSearch);
  178. }
  179. //---------------------------------------------------------------------------
  180. /*
  181. * Search 버튼 클릭 이벤트 핸들러
  182. * arguments
  183. * Sender : event handler 객체
  184. * return
  185. * void
  186. */
  187. void __fastcall TITS0050M::BtnSearchClick(TObject *Sender)
  188. {
  189. Application->ProcessMessages();
  190. TSqlCursor sqlCrs((TControl*)BtnSearch);
  191. RefreshData();
  192. }
  193. //---------------------------------------------------------------------------
  194. /*
  195. * Refresh Data Event Function
  196. * arguments
  197. *
  198. * return
  199. * void
  200. */
  201. void __fastcall TITS0050M::RefreshData()
  202. {
  203. ItsRepeatCongestManager->LoadFromDbWthr();
  204. SelConfirmList();
  205. SelUnConfirmList();
  206. }
  207. //---------------------------------------------------------------------------
  208. void __fastcall TITS0050M::SelConfirmList()
  209. {
  210. TItsServiceLink *pSvcLink;
  211. TItsSubCode *pSubCode;
  212. CMM_ClearGridTableView(TvList2);
  213. int nRow2 = 0;
  214. try
  215. {
  216. TvList2->BeginUpdate();
  217. try
  218. {
  219. ItsRepeatCongestManager->FListsCnfmWthr.Lock();
  220. FOR_STL(TItsRepeatCongestWthr*, pRpLink, ItsRepeatCongestManager->FListsCnfmWthr)
  221. {
  222. //링크기본정보
  223. pSvcLink = ItsServiceLinkManager->FLists.Find(pRpLink->IFSC_ID);
  224. if (!pSvcLink) continue; //기본정보가 없는 것은 보여줄 필요가 없다.
  225. //String sStatTm = pRpLink->STAT_YM;
  226. //if (sStatTm != "") sStatTm.Insert("-", 5);
  227. String sDTW = "[" + pRpLink->WTHR_TYPE_CD + "] "; //요일 유형 코드
  228. if (FCodeDTW)
  229. {
  230. pSubCode = FCodeDTW->FSubLists.Find(pRpLink->WTHR_TYPE_CD);
  231. if (pSubCode) sDTW = sDTW + pSubCode->CMMN_CD_KOR_NM;
  232. }
  233. String sStTm = pRpLink->CNFS_STRT_HM;
  234. sStTm.Insert(":", 3);
  235. String sEdTm = pRpLink->CNFS_END_HM;
  236. sEdTm.Insert(":", 3);
  237. String sRCS = "[" + pRpLink->REPT_CNGS_SECT_ORGN_CD + "] "; //반복 정체 구간 원본 코드
  238. if (FCodeRCS)
  239. {
  240. pSubCode = FCodeRCS->FSubLists.Find(pRpLink->REPT_CNGS_SECT_ORGN_CD);
  241. if (pSubCode) sRCS = sRCS + pSubCode->CMMN_CD_KOR_NM;
  242. }
  243. if (pRpLink->REPT_CNGS_SECT_ORGN_CD == "") sRCS = "";
  244. String sIFD = "[" + pSvcLink->DRCT_CD + "] ";
  245. if (FCodeIFD)
  246. {
  247. pSubCode = FCodeIFD->FSubLists.Find(pSvcLink->DRCT_CD); // 방향코드
  248. if (pSubCode) sIFD = sIFD + pSubCode->CMMN_CD_KOR_NM;
  249. }
  250. nRow2 = m_pGDC2->AppendRecord();
  251. m_pGDC2->Values[nRow2][BColumn01->Index] = pSvcLink->IFSC_ID; //ID
  252. m_pGDC2->Values[nRow2][BColumn03->Index] = sDTW; //요일
  253. m_pGDC2->Values[nRow2][BColumn04->Index] = sStTm; //혼잡시작시분
  254. m_pGDC2->Values[nRow2][BColumn05->Index] = sEdTm; //혼잡종료시분
  255. m_pGDC2->Values[nRow2][BColumn06->Index] = pRpLink->AVRG_SPED; //평균속도
  256. m_pGDC2->Values[nRow2][BColumn07->Index] = pRpLink->AVRG_TRVL_HH;//평균통행시간
  257. m_pGDC2->Values[nRow2][BColumn08->Index] = pRpLink->DCSN_YN; //확정여부
  258. m_pGDC2->Values[nRow2][BColumn09->Index] = ITSUtil_FormatStr(pRpLink->CRTN_YMD, STR_DATE); //생성일자
  259. m_pGDC2->Values[nRow2][BColumn10->Index] = sRCS; //생성자
  260. m_pGDC2->Values[nRow2][BColumn11->Index] = pSvcLink->IFSC_NM; //명칭
  261. m_pGDC2->Values[nRow2][BColumn12->Index] = sIFD; //방향
  262. m_pGDC2->Values[nRow2][BColumn13->Index] = pSvcLink->STRT_NM; //시점명
  263. m_pGDC2->Values[nRow2][BColumn14->Index] = pSvcLink->END_NM; //종점명
  264. m_pGDC2->Values[nRow2][BColumn99->Index] = (int)pRpLink;
  265. }
  266. }
  267. __finally
  268. {
  269. ItsRepeatCongestManager->FListsCnfmWthr.UnLock();
  270. }
  271. }
  272. __finally
  273. {
  274. TvList2->EndUpdate();
  275. TvList2->DataController->GotoFirst();
  276. TvList2->DataController->FocusedRecordIndex = 0;
  277. }
  278. }
  279. //---------------------------------------------------------------------------
  280. void __fastcall TITS0050M::SelUnConfirmList()
  281. {
  282. TItsServiceLink *pSvcLink;
  283. TItsSubCode *pSubCode;
  284. CMM_ClearGridTableView(TvList1);
  285. int nRow1 = 0;
  286. try
  287. {
  288. TvList1->BeginUpdate();
  289. try
  290. {
  291. ItsRepeatCongestManager->FListsWthr.Lock();
  292. FOR_STL(TItsRepeatCongestWthr*, pRpLink, ItsRepeatCongestManager->FListsWthr)
  293. {
  294. //링크기본정보
  295. pSvcLink = ItsServiceLinkManager->FLists.Find(pRpLink->IFSC_ID);
  296. if (!pSvcLink) continue; //기본정보가 없는 것은 보여줄 필요가 없다.
  297. String sDTW = "[" + pRpLink->WTHR_TYPE_CD + "] "; //요일 유형 코드
  298. if (FCodeDTW)
  299. {
  300. pSubCode = FCodeDTW->FSubLists.Find(pRpLink->WTHR_TYPE_CD);
  301. if (pSubCode) sDTW = sDTW + pSubCode->CMMN_CD_KOR_NM;
  302. }
  303. String sStTm = pRpLink->CNFS_STRT_HM;
  304. sStTm.Insert(":", 3);
  305. String sEdTm = pRpLink->CNFS_END_HM;
  306. sEdTm.Insert(":", 3);
  307. String sRCS = "[" + pRpLink->REPT_CNGS_SECT_ORGN_CD + "] "; //반복 정체 구간 원본 코드
  308. if (FCodeRCS)
  309. {
  310. pSubCode = FCodeRCS->FSubLists.Find(pRpLink->REPT_CNGS_SECT_ORGN_CD);
  311. if (pSubCode) sRCS = sRCS + pSubCode->CMMN_CD_KOR_NM;
  312. }
  313. if (pRpLink->REPT_CNGS_SECT_ORGN_CD == "") sRCS = "";
  314. String sIFD = "[" + pSvcLink->DRCT_CD + "] ";
  315. if (FCodeIFD)
  316. {
  317. pSubCode = FCodeIFD->FSubLists.Find(pSvcLink->DRCT_CD); // 방향코드
  318. if (pSubCode) sIFD = sIFD + pSubCode->CMMN_CD_KOR_NM;
  319. }
  320. nRow1 = m_pGDC1->AppendRecord();
  321. m_pGDC1->Values[nRow1][AColumn01->Index] = pSvcLink->IFSC_ID; //ID
  322. m_pGDC1->Values[nRow1][AColumn03->Index] = sDTW; //요일
  323. m_pGDC1->Values[nRow1][AColumn04->Index] = sStTm; //혼잡시작시분
  324. m_pGDC1->Values[nRow1][AColumn05->Index] = sEdTm; //혼잡종료시분
  325. m_pGDC1->Values[nRow1][AColumn06->Index] = pRpLink->AVRG_SPED; //평균속도
  326. m_pGDC1->Values[nRow1][AColumn07->Index] = pRpLink->AVRG_TRVL_HH;//평균통행시간
  327. m_pGDC1->Values[nRow1][AColumn08->Index] = pRpLink->DCSN_YN; //확정여부
  328. m_pGDC1->Values[nRow1][AColumn09->Index] = ITSUtil_FormatStr(pRpLink->CRTN_YMD, STR_DATE); //생성일자
  329. m_pGDC1->Values[nRow1][AColumn10->Index] = sRCS; //생성자
  330. m_pGDC1->Values[nRow1][AColumn11->Index] = pSvcLink->IFSC_NM; //명칭
  331. m_pGDC1->Values[nRow1][AColumn12->Index] = sIFD; //방향
  332. m_pGDC1->Values[nRow1][AColumn13->Index] = pSvcLink->STRT_NM; //시점명
  333. m_pGDC1->Values[nRow1][AColumn14->Index] = pSvcLink->END_NM; //종점명
  334. m_pGDC1->Values[nRow1][AColumn99->Index] = (int)pRpLink;
  335. }
  336. }
  337. __finally
  338. {
  339. ItsRepeatCongestManager->FListsWthr.UnLock();
  340. }
  341. }
  342. __finally
  343. {
  344. TvList1->EndUpdate();
  345. TvList1->DataController->GotoFirst();
  346. TvList1->DataController->FocusedRecordIndex = 0;
  347. }
  348. }
  349. //---------------------------------------------------------------------------
  350. /*
  351. * Close 버튼 클릭 이벤트 핸들러
  352. * arguments
  353. * Sender : event handler 객체
  354. * return
  355. * void
  356. */
  357. void __fastcall TITS0050M::BtnCloseClick(TObject *Sender)
  358. {
  359. Close();
  360. }
  361. //---------------------------------------------------------------------------
  362. void __fastcall TITS0050M::FormClose(TObject *Sender, TCloseAction &Action)
  363. {
  364. CommClose();
  365. ITS0050M = NULL;
  366. Action = caFree;
  367. }
  368. //---------------------------------------------------------------------------
  369. void __fastcall TITS0050M::BtnOperatorInputClick(TObject *Sender)
  370. {
  371. GrpOperatroInput->Visible = !GrpOperatroInput->Visible;
  372. }
  373. //---------------------------------------------------------------------------
  374. void __fastcall TITS0050M::EdLinkIdPropertiesButtonClick(TObject *Sender, int AButtonIndex)
  375. {
  376. PopupAddLink->Popup(EdLinkId->ClientOrigin.x, EdLinkId->ClientOrigin.y + EdLinkId->Height);
  377. }
  378. //---------------------------------------------------------------------------
  379. void __fastcall TITS0050M::MnuListListClick(TObject *Sender)
  380. {
  381. try {
  382. TITSSEL2M *pSelForm = new TITSSEL2M(this);
  383. pSelForm->m_bSelected = false;
  384. pSelForm->ShowModal();
  385. if (pSelForm->m_bSelected)
  386. {
  387. EdLinkId->Text = pSelForm->m_sSelLinkId;
  388. }
  389. delete pSelForm;
  390. } catch(...) { }
  391. }
  392. //---------------------------------------------------------------------------
  393. void __fastcall TITS0050M::MnuGisAddClick(TObject *Sender)
  394. {
  395. try {
  396. TITSSELAM *pSelForm = new TITSSELAM(this);
  397. pSelForm->MultiSelect = false;
  398. pSelForm->LinkLevel = 2;
  399. pSelForm->ShowModal();
  400. Application->ProcessMessages();
  401. if (pSelForm->Selected)
  402. {
  403. String sLinkId = pSelForm->TvList->DataController->Values[0][pSelForm->Column01->Index];
  404. TItsServiceLink *pLink = ItsServiceLinkManager->FLists.Find(sLinkId);
  405. if (!pLink)
  406. {
  407. Application->MessageBox(L"정보가 없는 구간을 선택하였습니다. 다른 구간을 선택하세요.",
  408. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  409. return;
  410. }
  411. EdLinkId->Text = sLinkId;
  412. }
  413. delete pSelForm;
  414. } catch(...) { }
  415. }
  416. //---------------------------------------------------------------------------
  417. void __fastcall TITS0050M::BtnCnfmCancelClick(TObject *Sender)
  418. {
  419. UnconfirmData(true);
  420. }
  421. //---------------------------------------------------------------------------
  422. void __fastcall TITS0050M::BtnAppCancelClick(TObject *Sender)
  423. {
  424. UnconfirmData(false);
  425. }
  426. //---------------------------------------------------------------------------
  427. void __fastcall TITS0050M::UnconfirmData(bool AConfirm)
  428. {
  429. TcxGridTableView *TvList = TvList1;
  430. TcxDataController *pGDC = m_pGDC1;
  431. int nIdx = AColumn99->Index;
  432. String sTitle = "예상 반복정체구간(기상) 취소";
  433. if (AConfirm)
  434. {
  435. TvList = TvList2;
  436. pGDC = m_pGDC2;
  437. nIdx = BColumn99->Index;
  438. sTitle = "확정 반복정체구간(기상) 취소";
  439. }
  440. int nSelRows = TvList->Controller->SelectedRowCount;
  441. if (nSelRows <= 0)
  442. {
  443. Application->MessageBox(L"작업 할 정체구간(기상)을 선택하세요.",
  444. sTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  445. return;
  446. }
  447. if (Application->MessageBox(L"선택한 정체구간(기상)을 취소 하시겠습니까?",
  448. sTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  449. TADOQuery *pADO = NULL;
  450. String sQry;
  451. try
  452. {
  453. TItsRepeatCongestWthr *pRpLink;
  454. int nSelIdx, nMemPtr;
  455. TvList->BeginUpdate();
  456. //IFSC_ID, CRTN_YMD, WTHR_TYPE_CD, CNFS_STRT_HM
  457. sQry = "DELETE TB_REPT_CNGS_SECT_WTHR \r\n"
  458. " WHERE IFSC_ID = :p01 \r\n"
  459. " AND CRTN_YMD = :p02 \r\n"
  460. " AND WTHR_TYPE_CD = :p03 \r\n"
  461. " AND CNFS_STRT_HM = :p04 \r\n";
  462. try
  463. {
  464. pADO = new TADOQuery(NULL);
  465. pADO->Close();
  466. pADO->Connection = ITSDb_GetConnection();
  467. ITSDb_SQLText(pADO, sQry);
  468. ITSDb_GetConnection()->BeginTrans();
  469. for (int ii = 0; ii < nSelRows; ii++)
  470. {
  471. nSelIdx = TvList->Controller->SelectedRows[ii]->RecordIndex;
  472. nMemPtr = pGDC->Values[nSelIdx][nIdx];
  473. pRpLink = (TItsRepeatCongestWthr *)nMemPtr;
  474. ITSDb_SQLBind(pADO, "p01", pRpLink->IFSC_ID);
  475. ITSDb_SQLBind(pADO, "p02", pRpLink->CRTN_YMD);
  476. ITSDb_SQLBind(pADO, "p03", pRpLink->WTHR_TYPE_CD);
  477. ITSDb_SQLBind(pADO, "p04", pRpLink->CNFS_STRT_HM);
  478. ITSDb_SQLExec(pADO);
  479. }
  480. ITSDb_GetConnection()->CommitTrans();
  481. Application->MessageBox(L"반복정체구간(기상) 취소 작업을 완료하였습니다.", sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  482. }
  483. catch(EDatabaseError &E)
  484. {
  485. ITSDb_GetConnection()->RollbackTrans();
  486. ShowMessage(String(E.ClassName()) + E.Message);
  487. }
  488. catch(Exception &exception)
  489. {
  490. ITSDb_GetConnection()->RollbackTrans();
  491. ShowMessage(String(exception.ClassName()) + exception.Message);
  492. }
  493. catch(...)
  494. {
  495. ITSDb_GetConnection()->RollbackTrans();
  496. ShowMessage(FrmLang->lblDbDelErr->Caption);//"데이터 삭제 중에 알수없는 DB 오류가 발생하였습니다.");
  497. }
  498. }
  499. __finally
  500. {
  501. if (pADO)
  502. {
  503. pADO->Close();
  504. delete pADO;
  505. }
  506. TvList->EndUpdate();
  507. RefreshData();
  508. }
  509. }
  510. //---------------------------------------------------------------------------
  511. void __fastcall TITS0050M::BtnApplyClick(TObject *Sender)
  512. {
  513. int nSelRows = TvList1->Controller->SelectedRowCount;
  514. if (nSelRows <= 0)
  515. {
  516. Application->MessageBox(L"반복정체구간(기상)으로 확정할 구간을 선택하세요.",
  517. L"반복정체구간(기상) 확정", MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  518. return;
  519. }
  520. if (Application->MessageBox(L"선택한 구간을 반복정체구간으로 확정 하시겠습니까?",
  521. L"반복정체구간 확정", MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  522. TADOQuery *pADO = NULL;
  523. String sQry;
  524. try
  525. {
  526. TItsRepeatCongestWthr *pRpLink;
  527. int nSelIdx, nMemPtr;
  528. TvList1->BeginUpdate();
  529. //IFSC_ID, CRTN_YMD, WTHR_TYPE_CD, CNFS_STRT_HM
  530. sQry = "UPDATE TB_REPT_CNGS_SECT_WTHR \r\n"
  531. " SET DCSN_YN = 'Y' \r\n"
  532. " WHERE IFSC_ID = :p01 \r\n"
  533. " AND CRTN_YMD = :p02 \r\n"
  534. " AND WTHR_TYPE_CD = :p03 \r\n"
  535. " AND CNFS_STRT_HM = :p04 \r\n";
  536. try
  537. {
  538. pADO = new TADOQuery(NULL);
  539. pADO->Close();
  540. pADO->Connection = ITSDb_GetConnection();
  541. ITSDb_SQLText(pADO, sQry);
  542. ITSDb_GetConnection()->BeginTrans();
  543. for (int ii = 0; ii < nSelRows; ii++)
  544. {
  545. nSelIdx = TvList1->Controller->SelectedRows[ii]->RecordIndex;
  546. nMemPtr = m_pGDC1->Values[nSelIdx][AColumn99->Index];
  547. pRpLink = (TItsRepeatCongestWthr *)nMemPtr;
  548. ITSDb_SQLBind(pADO, "p01", pRpLink->IFSC_ID);
  549. ITSDb_SQLBind(pADO, "p02", pRpLink->CRTN_YMD);
  550. ITSDb_SQLBind(pADO, "p03", pRpLink->WTHR_TYPE_CD);
  551. ITSDb_SQLBind(pADO, "p04", pRpLink->CNFS_STRT_HM);
  552. ITSDb_SQLExec(pADO);
  553. }
  554. ITSDb_GetConnection()->CommitTrans();
  555. Application->MessageBox(FrmLang->lblDbSave->Caption.c_str(),//L"예상 반복정체구간(기상)을 확정 반복정체구간(기상)으로 저장 하였습니다.",
  556. L"반복정체구간(기상) 확정", MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  557. }
  558. catch(EDatabaseError &E)
  559. {
  560. ITSDb_GetConnection()->RollbackTrans();
  561. ShowMessage(String(E.ClassName()) + E.Message);
  562. }
  563. catch(Exception &exception)
  564. {
  565. ITSDb_GetConnection()->RollbackTrans();
  566. ShowMessage(String(exception.ClassName()) + exception.Message);
  567. }
  568. catch(...)
  569. {
  570. ITSDb_GetConnection()->RollbackTrans();
  571. ShowMessage(FrmLang->lblDbDelErr->Caption);//"데이터 삭제 중에 알수없는 DB 오류가 발생하였습니다.");
  572. }
  573. }
  574. __finally
  575. {
  576. if (pADO)
  577. {
  578. pADO->Close();
  579. delete pADO;
  580. }
  581. TvList1->EndUpdate();
  582. RefreshData();
  583. }
  584. }
  585. //---------------------------------------------------------------------------
  586. void __fastcall TITS0050M::BtnSaveClick(TObject *Sender)
  587. {
  588. String sSvcId = EdLinkId->Text.Trim();
  589. TItsServiceLink *pSvcLink;
  590. pSvcLink = ItsServiceLinkManager->FLists.Find(sSvcId);
  591. if (!pSvcLink)
  592. {
  593. Application->MessageBox(L"등록되어 있지 않은 서비스 구간이거나 서비스 구간을 선택하지 않으셨습니다.\r\n서비스 구간을 확인 후 작업하세요.",
  594. L"반복정체구간(기상) 운영자등록", MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  595. ActiveControl = EdLinkId;
  596. return;
  597. }
  598. String sStTime = DtStTime->Time.FormatString("hhnn");
  599. String sEdTime = DtEdTime->Time.FormatString("hhnn");
  600. if (sStTime > sEdTime)
  601. {
  602. Application->MessageBox(L"혼잡 시작시분 과 혼잡 종료시분이 정확히 입력되지 않았습니다.\r\n혼잡 시작/종료 시각을 확인 후 작업하세요.",
  603. L"반복정체구간(기상) 운영자등록", MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  604. ActiveControl = DtStTime;
  605. return;
  606. }
  607. String sDayType = ITSUtil_GetCode(CbDayType->Text);
  608. TADOQuery *pADO = NULL;
  609. String sQry;
  610. try
  611. {
  612. TItsRepeatCongestWthr *pRpLink;
  613. int nSelIdx;
  614. TvList1->BeginUpdate();
  615. sQry = "INSERT INTO TB_REPT_CNGS_SECT_WTHR ( \r\n"
  616. " IFSC_ID , \r\n"
  617. " CRTN_YMD , \r\n"
  618. " WTHR_TYPE_CD , \r\n"
  619. " CNFS_STRT_HM , \r\n"
  620. " CNFS_END_HM , \r\n"
  621. " AVRG_SPED , \r\n"
  622. " AVRG_TRVL_HH , \r\n"
  623. " DCSN_YN , \r\n"
  624. " REPT_CNGS_SECT_ORGN_CD ) \r\n"
  625. " VALUES ( \r\n"
  626. " :p01, \r\n"
  627. " TO_CHAR(SYSDATE, 'YYYYMMDD'), \r\n"
  628. " :p02, \r\n"
  629. " :p03, \r\n"
  630. " :p04, \r\n"
  631. " :p05, \r\n"
  632. " :p06, \r\n"
  633. " 'Y', \r\n"
  634. " 'RCS2' ) \r\n";
  635. try
  636. {
  637. pADO = new TADOQuery(NULL);
  638. pADO->Close();
  639. pADO->Connection = ITSDb_GetConnection();
  640. ITSDb_SQLText(pADO, sQry);
  641. ITSDb_GetConnection()->BeginTrans();
  642. ITSDb_SQLBind(pADO, "p01", sSvcId);
  643. ITSDb_SQLBind(pADO, "p02", sDayType);
  644. ITSDb_SQLBind(pADO, "p03", sStTime);
  645. ITSDb_SQLBind(pADO, "p04", sEdTime);
  646. ITSDb_SQLBind(pADO, "p05", SpSpeed->Value);
  647. ITSDb_SQLBind(pADO, "p06", SpAvgTm->Value);
  648. ITSDb_SQLExec(pADO);
  649. ITSDb_GetConnection()->CommitTrans();
  650. Application->MessageBox(FrmLang->lblDbSave->Caption.c_str(),//L"운영자 등록 반복정체구간(기상) 정보를 저장 하였습니다.",
  651. L"반복정체구간(기상) 운영자등록", MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  652. EdLinkId->Text = "";
  653. BtnOperatorInputClick(NULL);
  654. }
  655. catch(EDatabaseError &E)
  656. {
  657. ITSDb_GetConnection()->RollbackTrans();
  658. ShowMessage(String(E.ClassName()) + E.Message);
  659. }
  660. catch(Exception &exception)
  661. {
  662. ITSDb_GetConnection()->RollbackTrans();
  663. ShowMessage(String(exception.ClassName()) + exception.Message);
  664. }
  665. catch(...)
  666. {
  667. ITSDb_GetConnection()->RollbackTrans();
  668. ShowMessage(FrmLang->lblDbDelErr->Caption);//"데이터 삭제 중에 알수없는 DB 오류가 발생하였습니다.");
  669. }
  670. }
  671. __finally
  672. {
  673. if (pADO)
  674. {
  675. pADO->Close();
  676. delete pADO;
  677. }
  678. TvList1->EndUpdate();
  679. RefreshData();
  680. }
  681. }
  682. //---------------------------------------------------------------------------
  683. void __fastcall TITS0050M::TvList1DataControllerFilterChanged(TObject *Sender)
  684. {
  685. CMM_SetFilterLike(TvList1);
  686. }
  687. //---------------------------------------------------------------------------