FrmLinkGradeSetF.cpp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  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 "CDSNodeF.h"
  9. #include "CDSLinkF.h"
  10. #include "CDSIfscF.h"
  11. #include "CDSRoadF.h"
  12. #include "CDSTrafficGradeF.h"
  13. #include "ITSLangTransF.h"
  14. #pragma hdrstop
  15. #include "FrmLinkGradeSetF.h"
  16. //---------------------------------------------------------------------------
  17. #pragma package(smart_init)
  18. #pragma link "cxButtons"
  19. #pragma link "cxClasses"
  20. #pragma link "cxContainer"
  21. #pragma link "cxControls"
  22. #pragma link "cxCustomData"
  23. #pragma link "cxData"
  24. #pragma link "cxDataStorage"
  25. #pragma link "cxDropDownEdit"
  26. #pragma link "cxEdit"
  27. #pragma link "cxFilter"
  28. #pragma link "cxGraphics"
  29. #pragma link "cxGrid"
  30. #pragma link "cxGridCustomTableView"
  31. #pragma link "cxGridCustomView"
  32. #pragma link "cxGridLevel"
  33. #pragma link "cxGridTableView"
  34. #pragma link "cxGroupBox"
  35. #pragma link "cxLabel"
  36. #pragma link "cxLookAndFeelPainters"
  37. #pragma link "cxLookAndFeels"
  38. #pragma link "cxMaskEdit"
  39. #pragma link "cxStyles"
  40. #pragma link "cxTextEdit"
  41. #pragma link "dxSkinBlack"
  42. #pragma link "dxSkinBlue"
  43. #pragma link "dxSkinsCore"
  44. #pragma link "dxSkinscxPCPainter"
  45. #pragma resource "*.dfm"
  46. TFrmLinkGradeSet *FrmLinkGradeSet = NULL;
  47. //---------------------------------------------------------------------------
  48. __fastcall TFrmLinkGradeSet::TFrmLinkGradeSet(TComponent* Owner)
  49. : TForm(Owner)
  50. {
  51. LangTrans->Translate(this, ITSDb_GetConnection());
  52. ITSSkin_Load(this);
  53. CMM_LoadForm(g_sFormsDir, this);
  54. FTitle = Caption;//"구간 소통등급 변경";
  55. Caption = " " + FTitle;//" 구간 소통등급 변경";
  56. m_sLinkId = "";
  57. m_nLinkLevel = 0;
  58. CbTrfGrade->Properties->OnChange = NULL;
  59. FCodeLTC = ItsCodeManager->FLists.Find("LTC"); //소통등급
  60. try
  61. {
  62. FOR_STL(TItsTrafficGrade *, pTrfGrade, ItsTrafficGradeManager->FLists)
  63. {
  64. CbTrfGrade->Properties->Items->Add("[" + pTrfGrade->SECT_GRAD_CD + "] " + pTrfGrade->SECT_GRAD_NM);
  65. }
  66. }
  67. __finally
  68. {
  69. }
  70. CbTrfGrade->ItemIndex = 0;
  71. CbTrfGrade->Properties->OnChange = CbTrfGradePropertiesChange;
  72. DisplayTrafficGrade();
  73. }
  74. //---------------------------------------------------------------------------
  75. void __fastcall TFrmLinkGradeSet::FormClose(TObject *Sender, TCloseAction &Action)
  76. {
  77. CMM_SaveForm(g_sFormsDir, this);
  78. FrmLinkGradeSet = NULL;
  79. Action = caFree;
  80. }
  81. //---------------------------------------------------------------------------
  82. void __fastcall TFrmLinkGradeSet::FormDestroy(TObject *Sender)
  83. {
  84. FrmLinkGradeSet = NULL;
  85. }
  86. //---------------------------------------------------------------------------
  87. void __fastcall TFrmLinkGradeSet::SetInfo(String sLinkId, int nLinkLevel)
  88. {
  89. m_sLinkId = sLinkId;
  90. m_nLinkLevel = nLinkLevel;
  91. EdId->Text = sLinkId;
  92. EdLevel->Text = String(m_nLinkLevel);
  93. EdLength->Text = FormatFloat("##,##0", 0);
  94. EdStId->Text = "";
  95. EdEdId->Text = "";
  96. EdStName->Text = FrmLang->lblNoName->Caption;//"명칭없음";
  97. EdEdName->Text = FrmLang->lblNoName->Caption;//"명칭없음";
  98. switch(m_nLinkLevel)
  99. {
  100. case 1: //레벨1 링크(표준링크)
  101. {
  102. TItsNode *pNode;
  103. TItsLink *pLink;
  104. pLink = ItsLinkManager->FLists.Find(m_sLinkId);
  105. if (!pLink) return;
  106. EdStId->Text = pLink->F_NODE_ID;
  107. EdEdId->Text = pLink->T_NODE_ID;
  108. EdLength->Text = FormatFloat("##,##0", StrToFloat(pLink->LINK_LENG));
  109. pNode = ItsNodeManager->FLists.Find(pLink->F_NODE_ID);
  110. if (pNode) EdStName->Text = pNode->NODE_NAME;
  111. pNode = ItsNodeManager->FLists.Find(pLink->T_NODE_ID);
  112. if (pNode) EdEdName->Text = pNode->NODE_NAME;
  113. TItsTrafficGrade *pGrade = ItsTrafficGradeManager->FLists.Find(pLink->SECT_GRAD_CD);
  114. if (pGrade) CbTrfGrade->Text = "[" + pLink->SECT_GRAD_CD + "] " + pGrade->SECT_GRAD_NM;
  115. else CbTrfGrade->Text = "";
  116. }
  117. break;
  118. case 2: //레벨2 링크(서비스링크)
  119. {
  120. TItsNode *pNode;
  121. TItsIfsc *pLink;
  122. pLink = ItsIfscManager->FLists.Find(m_sLinkId);
  123. if (!pLink) return;
  124. EdStId->Text = pLink->F_NODE_ID;
  125. EdEdId->Text = pLink->T_NODE_ID;
  126. EdLength->Text = FormatFloat("##,##0", StrToFloat(pLink->SECT_LNGT));
  127. pNode = ItsNodeManager->FLists.Find(pLink->F_NODE_ID);
  128. if (pNode) EdStName->Text = pNode->NODE_NAME;
  129. pNode = ItsNodeManager->FLists.Find(pLink->T_NODE_ID);
  130. if (pNode) EdEdName->Text = pNode->NODE_NAME;
  131. TItsTrafficGrade *pGrade = ItsTrafficGradeManager->FLists.Find(pLink->SECT_GRAD_CD);
  132. if (pGrade) CbTrfGrade->Text = "[" + pLink->SECT_GRAD_CD + "] " + pGrade->SECT_GRAD_NM;
  133. else CbTrfGrade->Text = "";
  134. }
  135. break;
  136. case 3: //도로
  137. {
  138. TItsNode *pNode;
  139. TItsRoad *pLink;
  140. pLink = ItsRoadManager->FLists.Find(m_sLinkId);
  141. if (!pLink) return;
  142. EdStId->Text = pLink->F_NODE_ID;
  143. EdEdId->Text = pLink->T_NODE_ID;
  144. EdLength->Text = FormatFloat("##,##0", StrToFloat(pLink->SECT_LNGT));
  145. pNode = ItsNodeManager->FLists.Find(pLink->F_NODE_ID);
  146. if (pNode) EdStName->Text = pNode->NODE_NAME;
  147. pNode = ItsNodeManager->FLists.Find(pLink->T_NODE_ID);
  148. if (pNode) EdEdName->Text = pNode->NODE_NAME;
  149. TItsTrafficGrade *pGrade = ItsTrafficGradeManager->FLists.Find(pLink->SECT_GRAD_CD);
  150. if (pGrade) CbTrfGrade->Text = "[" + pLink->SECT_GRAD_CD + "] " + pGrade->SECT_GRAD_NM;
  151. else CbTrfGrade->Text = "";
  152. }
  153. break;
  154. }
  155. }
  156. //---------------------------------------------------------------------------
  157. void __fastcall TFrmLinkGradeSet::CbTrfGradePropertiesChange(TObject *Sender)
  158. {
  159. DisplayTrafficGrade();
  160. }
  161. //---------------------------------------------------------------------------
  162. void __fastcall TFrmLinkGradeSet::DisplayTrafficGrade()
  163. {
  164. CMM_ClearGridTableView(TvList);
  165. try
  166. {
  167. TvList->BeginUpdate();
  168. TcxDataController *pGDC = TvList->DataController;
  169. String sGradeCode = ITSUtil_GetCode(CbTrfGrade->Text);
  170. TItsTrafficGrade *pGrade = ItsTrafficGradeManager->FLists.Find(sGradeCode);
  171. if (!pGrade) return;
  172. int nRow;
  173. try
  174. {
  175. FOR_STL(TItsTrafficSubGrade *, pTrfSubGrade, pGrade->FSubLists)
  176. {
  177. nRow = pGDC->AppendRecord();
  178. String sLTC = pTrfSubGrade->CMTR_GRAD_CD;
  179. TItsSubCode *pSubCode = FCodeLTC->FSubLists.Find(pTrfSubGrade->CMTR_GRAD_CD);
  180. if (pSubCode) sLTC = pSubCode->CMMN_CD_KOR_NM;
  181. pGDC->Values[nRow][Column01->Index] = pTrfSubGrade->CMTR_GRAD_CD; //코드
  182. pGDC->Values[nRow][Column02->Index] = sLTC; //명칭
  183. pGDC->Values[nRow][Column03->Index] = pTrfSubGrade->LWST_TRVL_SPED; //속도(Low)
  184. pGDC->Values[nRow][Column04->Index] = pTrfSubGrade->HGHS_TRVL_SPED; //속도(High)
  185. }
  186. }
  187. __finally
  188. {
  189. }
  190. }
  191. __finally
  192. {
  193. TvList->EndUpdate();
  194. }
  195. }
  196. //---------------------------------------------------------------------------
  197. void __fastcall TFrmLinkGradeSet::BtnApplyClick(TObject *Sender)
  198. {
  199. if (Application->MessageBox(lblCnfm->Caption.c_str(),//L"소통등급의 변경은 소통정보에 큰 영향을 미칩니다.\r\n계속하시겠습니까?\r\n\r\n[주의 - 반드시 정보를 확인후 진행하세요!!!]",
  200. FTitle.c_str(),
  201. MB_YESNO|MB_ICONWARNING|MB_ICONQUESTION) != IDYES)
  202. {
  203. return;
  204. }
  205. String sQry;
  206. TADOQuery *pADO = NULL;
  207. String sGradeCode = ITSUtil_GetCode(CbTrfGrade->Text);
  208. try
  209. {
  210. pADO = new TADOQuery(NULL);
  211. pADO->Close();
  212. pADO->Connection = ITSDb_GetConnection();
  213. try
  214. {
  215. switch(m_nLinkLevel)
  216. {
  217. case 1: //레벨1 링크(표준링크)
  218. sQry = "UPDATE TB_LINK SET SECT_GRAD_CD = :p01 WHERE LINK_ID = :p02";
  219. break;
  220. case 2: //레벨2 링크(서비스링크)
  221. sQry = "UPDATE TB_IFSC SET SECT_GRAD_CD = :p01 WHERE IFSC_ID = :p02";
  222. break;
  223. case 3: //도로
  224. sQry = "UPDATE TB_ROAD SET SECT_GRAD_CD = :p01 WHERE ROAD_ID = :p02";
  225. break;
  226. default: return;
  227. }
  228. ITSDb_GetConnection()->BeginTrans();
  229. ITSDb_SQLText(pADO, sQry);
  230. ITSDb_SQLBind(pADO, "p01", sGradeCode);
  231. ITSDb_SQLBind(pADO, "p02", m_sLinkId);
  232. ITSDb_SQLExec(pADO);
  233. ITSDb_GetConnection()->CommitTrans();
  234. switch(m_nLinkLevel)
  235. {
  236. case 1: //레벨1 링크(표준링크)
  237. {
  238. TItsLink *pLink = ItsLinkManager->FLists.Find(m_sLinkId);
  239. if (!pLink) return;
  240. pLink->SECT_GRAD_CD = sGradeCode;
  241. }
  242. break;
  243. case 2: //레벨2 링크(서비스링크)
  244. {
  245. TItsIfsc *pIfsc = ItsIfscManager->FLists.Find(m_sLinkId);
  246. if (!pIfsc) return;
  247. pIfsc->SECT_GRAD_CD = sGradeCode;
  248. }
  249. break;
  250. case 3: //도로
  251. {
  252. TItsRoad *pRoad = ItsRoadManager->FLists.Find(m_sLinkId);
  253. if (!pRoad) return;
  254. pRoad->SECT_GRAD_CD = sGradeCode;
  255. }
  256. break;
  257. }
  258. Application->MessageBox(lblOk->Caption.c_str(),//L"소통정보 등급구분을 적용 하였습니다.",
  259. FTitle.c_str(),
  260. MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  261. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_05, 0);
  262. }
  263. catch(EDatabaseError &E)
  264. {
  265. ITSDb_GetConnection()->RollbackTrans();
  266. throw Exception(String(E.ClassName()) + E.Message);
  267. }
  268. catch(Exception &exception)
  269. {
  270. ITSDb_GetConnection()->RollbackTrans();
  271. throw Exception(String(exception.ClassName()) + exception.Message);
  272. }
  273. catch(...)
  274. {
  275. ITSDb_GetConnection()->RollbackTrans();
  276. throw Exception(FrmLang->lblDbErr->Caption);//"[구간 소통등급 변경] 알수없는 DB 오류가 발생하였습니다.");
  277. }
  278. }
  279. __finally
  280. {
  281. if (pADO)
  282. {
  283. pADO->Close();
  284. delete pADO;
  285. }
  286. }
  287. }
  288. //---------------------------------------------------------------------------