CDSPrcsParamF.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. //---------------------------------------------------------------------------
  2. #pragma hdrstop
  3. #include "CDSPrcsParamF.h"
  4. #include "ITSDbF.h"
  5. #include "AppGlobalF.h"
  6. //---------------------------------------------------------------------------
  7. #pragma package(smart_init)
  8. /*
  9. * Info Class
  10. */
  11. TPrcsParam::TPrcsParam()
  12. {
  13. }
  14. //---------------------------------------------------------------------------
  15. void TPrcsParam::Clear()
  16. {
  17. }
  18. //---------------------------------------------------------------------------
  19. TPrcsParam::~TPrcsParam()
  20. {
  21. }
  22. //---------------------------------------------------------------------------
  23. String TPrcsParam::ToString()
  24. {
  25. String SubIds = "";
  26. String sTemp = "";
  27. FOR_STL(TPrcsParamClct*, pSub, CLCTS)
  28. {
  29. sTemp.printf(L" PRRT: %2d, WGHT: %5.2f, CLCT: %s\r\n", pSub->FUSN_PRRT, pSub->FUSN_WGHT, pSub->CLCT_SYST_CD.c_str());
  30. SubIds += sTemp;
  31. }
  32. String sFltr1, sFltr2, sFltr3;
  33. String sAdjs1, sAdjs2, sAdjs3;
  34. String sSmth1, sSmth2, sSmth3;
  35. String sFusn1;
  36. sFltr1.printf(L" FILTERING: %s\r\n", FLTR_MTHD_CD.c_str());
  37. sFltr2.printf(L" VOL(MIN/MAX): %6d/%6d\r\n", FLTR_MIN_TFVL, FLTR_MAX_TFVL);
  38. sFltr3.printf(L" SPD(LOW/HIG): %6d/%6d\r\n", FLTR_LWST_SPED, FLTR_HGHS_SPED);
  39. sAdjs1.printf(L" ADJUSTMENT: %s\r\n", ADJS_MTHD_CD.c_str());
  40. sAdjs2.printf(L" WGHT_AVRG_PRE(1/2/3CYCL): %5.2f/%5.2f/%5.2f\r\n", ADJS_WGHT_AVRG_PRE_1CYCL, ADJS_WGHT_AVRG_PRE_2CYCL, ADJS_WGHT_AVRG_PRE_3CYCL);
  41. sAdjs3.printf(L" 15M_PTRN_YN, MISS_DECS_CYCL: %s, %d\r\n", ADJS_15M_PTRN_APLY_YN.c_str(), ADJS_SHTR_MISS_DECS_CYCL);
  42. sSmth1.printf(L" SMOOTHING: %s\r\n", SMTH_MTHD_CD.c_str());
  43. sSmth2.printf(L" SPED_FCTR(LWST/HGHS): %3.2f/%3.2f\r\n", SMTH_LWST_SPED_FCTR, SMTH_HGHS_SPED_FCTR);
  44. sSmth3.printf(L" WGHT_AVRG(PRST/1CYCL/2CYCL): %5.2f/%5.2f/%5.2f\r\n", SMTH_WGHT_AVRG_PRST, SMTH_WGHT_AVRG_PRE_1CYCL, SMTH_WGHT_AVRG_PRE_2CYCL);
  45. sFusn1.printf(L" FUSION: %s\r\n", FUSN_MTHD_CD.c_str());
  46. return "ID: " + PARA_ID + "\r\n" +
  47. sFltr1 + sFltr2 + sFltr3 +
  48. sAdjs1 + sAdjs2 + sAdjs3 +
  49. sSmth1 + sSmth2 + sSmth3 +
  50. sFusn1 + SubIds;
  51. }
  52. //---------------------------------------------------------------------------
  53. //---------------------------------------------------------------------------
  54. TPrcsParamManager *PrcsParamManager = NULL;
  55. //---------------------------------------------------------------------------
  56. /*
  57. * Manager
  58. */
  59. TPrcsParamManager::TPrcsParamManager()
  60. {
  61. }
  62. //---------------------------------------------------------------------------
  63. TPrcsParamManager::~TPrcsParamManager()
  64. {
  65. Clear();
  66. }
  67. //---------------------------------------------------------------------------
  68. void TPrcsParamManager::Clear()
  69. {
  70. FLists.RemoveAll();
  71. }
  72. //---------------------------------------------------------------------------
  73. bool TPrcsParamManager::LoadFromDb(TADOConnection *ADbConn/*=NULL*/)
  74. {
  75. LoadParam(ADbConn);
  76. return LoadParamDetl(ADbConn);
  77. }
  78. //---------------------------------------------------------------------------
  79. bool TPrcsParamManager::LoadParam(TADOConnection *ADbConn/*=NULL*/)
  80. {
  81. String sQry;
  82. TADOQuery *pADO = NULL;
  83. sQry = "SELECT A.PARA_ID, A.PARA_NM, \r\n"
  84. " A.FLTR_MTHD_CD, A.FUSN_MTHD_CD, A.ADJS_MTHD_CD, A.SMTH_MTHD_CD, \r\n"
  85. " B.FLTR_MIN_TFVL, B.FLTR_MAX_TFVL, \r\n"
  86. " B.FLTR_LWST_SPED, B.FLTR_HGHS_SPED, \r\n"
  87. " B.ADJS_WGHT_AVRG_PRE_1CYCL, B.ADJS_WGHT_AVRG_PRE_2CYCL, B.ADJS_WGHT_AVRG_PRE_3CYCL, \r\n"
  88. " B.ADJS_15M_PTRN_APLY_YN, B.ADJS_SHTR_MISS_DECS_CYCL, \r\n"
  89. " B.SMTH_LWST_SPED_FCTR, B.SMTH_HGHS_SPED_FCTR, \r\n"
  90. " B.SMTH_WGHT_AVRG_PRST, B.SMTH_WGHT_AVRG_PRE_1CYCL, B.SMTH_WGHT_AVRG_PRE_2CYCL \r\n"
  91. " FROM TB_LINK_PARA_STUP A \r\n"
  92. " INNER JOIN TB_LINK_PARA_DETL B \r\n"
  93. " ON A.PARA_ID = B.PARA_ID \r\n";
  94. try
  95. {
  96. FLists.Lock();
  97. FLists.RemoveAll();
  98. try
  99. {
  100. pADO = new TADOQuery(NULL);
  101. pADO->Close();
  102. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  103. pADO->SQL->Clear();
  104. pADO->SQL->Text = sQry;
  105. pADO->Prepared = true;
  106. pADO->Open();
  107. for( ; !pADO->Eof; pADO->Next())
  108. {
  109. AnsiString PARA_ID = pADO->FieldByName("PARA_ID")->AsString;
  110. TPrcsParam* pObj = new TPrcsParam();
  111. pObj->PARA_ID = pADO->FieldByName("PARA_ID")->AsString;
  112. pObj->PARA_NM = pADO->FieldByName("PARA_NM")->AsString;
  113. pObj->FLTR_MTHD_CD = pADO->FieldByName("FLTR_MTHD_CD")->AsString; // N VARCHAR2(7) Y 필터링 방법 코드
  114. pObj->FUSN_MTHD_CD = pADO->FieldByName("FUSN_MTHD_CD")->AsString; // N VARCHAR2(7) Y 퓨전 방법 코드
  115. pObj->ADJS_MTHD_CD = pADO->FieldByName("ADJS_MTHD_CD")->AsString; // N VARCHAR2(7) Y 보정 방법 코드
  116. pObj->SMTH_MTHD_CD = pADO->FieldByName("SMTH_MTHD_CD")->AsString; // N VARCHAR2(7) Y 평활화 방법 코드
  117. pObj->FLTR_MIN_TFVL = pADO->FieldByName("FLTR_MIN_TFVL")->AsInteger; // N NUMBER(6) Y 0 필터링 최소 교통량
  118. pObj->FLTR_MAX_TFVL = pADO->FieldByName("FLTR_MAX_TFVL")->AsInteger; // N NUMBER(6) Y 0 필터링 최대 교통량
  119. pObj->FLTR_LWST_SPED = pADO->FieldByName("FLTR_LWST_SPED")->AsInteger; // N NUMBER(3) Y 0 필터링 최저 속도
  120. pObj->FLTR_HGHS_SPED = pADO->FieldByName("FLTR_HGHS_SPED")->AsInteger; // N NUMBER(3) Y 0 필터링 최고 속도
  121. pObj->ADJS_WGHT_AVRG_PRE_1CYCL = pADO->FieldByName("ADJS_WGHT_AVRG_PRE_1CYCL")->AsFloat; // N NUMBER(5,2) Y 0 보정 가중치 평균 이전 1주기
  122. pObj->ADJS_WGHT_AVRG_PRE_2CYCL = pADO->FieldByName("ADJS_WGHT_AVRG_PRE_2CYCL")->AsFloat; // N NUMBER(5,2) Y 0 보정 가중치 평균 이전 2주기
  123. pObj->ADJS_WGHT_AVRG_PRE_3CYCL = pADO->FieldByName("ADJS_WGHT_AVRG_PRE_3CYCL")->AsFloat; // N NUMBER(5,2) Y 0 보정 가중치 평균 이전 3주기
  124. pObj->ADJS_15M_PTRN_APLY_YN = pADO->FieldByName("ADJS_15M_PTRN_APLY_YN")->AsString; // N CHAR(1) Y 'N' 보정 15분 패턴 적용 여부
  125. pObj->ADJS_SHTR_MISS_DECS_CYCL = pADO->FieldByName("ADJS_SHTR_MISS_DECS_CYCL")->AsInteger; // N NUMBER(2) Y 보정 단기 결측 판단 주기
  126. pObj->SMTH_LWST_SPED_FCTR = pADO->FieldByName("SMTH_LWST_SPED_FCTR")->AsFloat; // N NUMBER(3,2) Y 0 평활화 최저 속도 계수
  127. pObj->SMTH_HGHS_SPED_FCTR = pADO->FieldByName("SMTH_HGHS_SPED_FCTR")->AsFloat; // N NUMBER(3,2) Y 0 평활화 최고 속도 계수
  128. pObj->SMTH_WGHT_AVRG_PRST = pADO->FieldByName("SMTH_WGHT_AVRG_PRST")->AsFloat; // N NUMBER(5,2) Y 0 평활화 가중치 평균 현재
  129. pObj->SMTH_WGHT_AVRG_PRE_1CYCL = pADO->FieldByName("SMTH_WGHT_AVRG_PRE_1CYCL")->AsFloat; // N NUMBER(5,2) Y 0 평활화 가중치 평균 이전 1주기
  130. pObj->SMTH_WGHT_AVRG_PRE_2CYCL = pADO->FieldByName("SMTH_WGHT_AVRG_PRE_2CYCL")->AsFloat; // N NUMBER(5,2) Y 0 평활화 가중치 평균 이전 2주기
  131. pObj->DEL_YN = "N";
  132. FLists.Push(pObj->PARA_ID, pObj);
  133. }
  134. }
  135. catch(EDatabaseError &E)
  136. {
  137. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  138. DBERRORMSG("TPrcsParamManager::LoadParam", String(E.ClassName()), E.Message, sQry);
  139. throw Exception(String(E.ClassName()) + E.Message);
  140. }
  141. catch(Exception &e)
  142. {
  143. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  144. DBERRORMSG("TPrcsParamManager::LoadParam", String(e.ClassName()), e.Message, sQry);
  145. throw Exception(String(e.ClassName()) + e.Message);
  146. }
  147. }
  148. __finally
  149. {
  150. if (pADO)
  151. {
  152. pADO->Close();
  153. delete pADO;
  154. }
  155. FLists.UnLock();
  156. }
  157. return true;
  158. }
  159. //---------------------------------------------------------------------------
  160. bool TPrcsParamManager::LoadParamDetl(TADOConnection *ADbConn/*=NULL*/)
  161. {
  162. String sQry;
  163. TADOQuery *pADO = NULL;
  164. sQry = "SELECT A.PARA_ID, \r\n"
  165. " B.CLCT_SYST_CD, B.FUSN_PRRT, B.FUSN_WGHT \r\n"
  166. " FROM TB_LINK_PARA_STUP A \r\n"
  167. " INNER JOIN TB_LINK_PARA_CLCT_SYST B \r\n"
  168. " ON A.PARA_ID = B.PARA_ID \r\n"
  169. " ORDER BY A.PARA_ID, B.FUSN_PRRT \r\n";
  170. //기존 파라미터의 수집원별 우선순위, 가중치 정보를 삭제한다.
  171. FOR_STL(TPrcsParam*, pObj, FLists)
  172. {
  173. pObj->CLCTS.RemoveAll();
  174. }
  175. try
  176. {
  177. FLists.Lock();
  178. try
  179. {
  180. pADO = new TADOQuery(NULL);
  181. pADO->Close();
  182. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  183. pADO->SQL->Clear();
  184. pADO->SQL->Text = sQry;
  185. pADO->Prepared = true;
  186. pADO->Open();
  187. for( ; !pADO->Eof; pADO->Next())
  188. {
  189. AnsiString PARA_ID = pADO->FieldByName("PARA_ID")->AsString;
  190. TPrcsParam* pObj = FLists.Find(PARA_ID);
  191. if (pObj)
  192. {
  193. // 메모리에 파라미터가 존재해야 한다
  194. TPrcsParamClct* pSub = new TPrcsParamClct();
  195. if (pSub)
  196. {
  197. pSub->CLCT_SYST_CD = pADO->FieldByName("CLCT_SYST_CD")->AsString;
  198. pSub->FUSN_PRRT = pADO->FieldByName("FUSN_PRRT")->AsInteger;
  199. pSub->FUSN_WGHT = pADO->FieldByName("FUSN_WGHT")->AsFloat;
  200. pObj->CLCTS.Push(pSub->FUSN_PRRT, pSub);
  201. }
  202. }
  203. }
  204. }
  205. catch(EDatabaseError &E)
  206. {
  207. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  208. DBERRORMSG("TPrcsParamManager::LoadParamDetl", String(E.ClassName()), E.Message, sQry);
  209. throw Exception(String(E.ClassName()) + E.Message);
  210. }
  211. catch(Exception &e)
  212. {
  213. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  214. DBERRORMSG("TPrcsParamManager::LoadParamDetl", String(e.ClassName()), e.Message, sQry);
  215. throw Exception(String(e.ClassName()) + e.Message);
  216. }
  217. }
  218. __finally
  219. {
  220. if (pADO)
  221. {
  222. pADO->Close();
  223. delete pADO;
  224. }
  225. FLists.UnLock();
  226. }
  227. return true;
  228. }
  229. //---------------------------------------------------------------------------
  230. bool TPrcsParamManager::IsUsing(String AParamId, TADOConnection *ADbConn/*=NULL*/)
  231. {
  232. String sQry;
  233. TADOQuery *pADO = NULL;
  234. sQry = "SELECT COUNT(1) AS USE_CNT \r\n"
  235. " FROM TB_LINK \r\n"
  236. " WHERE PARA_ID = :p01 \r\n";
  237. try
  238. {
  239. try
  240. {
  241. pADO = new TADOQuery(NULL);
  242. pADO->Close();
  243. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  244. pADO->SQL->Clear();
  245. pADO->SQL->Text = sQry;
  246. pADO->Parameters->ParamByName("p01")->Value = AParamId;
  247. pADO->Prepared = true;
  248. pADO->Open();
  249. int nUseCnt = pADO->FieldByName("USE_CNT")->AsInteger;
  250. if (nUseCnt == 0) return false;
  251. return true;
  252. }
  253. catch(EDatabaseError &E)
  254. {
  255. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  256. DBERRORMSG("TPrcsParamManager::IsUsing", String(E.ClassName()), E.Message, sQry);
  257. throw Exception(String(E.ClassName()) + E.Message);
  258. }
  259. catch(Exception &e)
  260. {
  261. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  262. DBERRORMSG("TPrcsParamManager::IsUsing", String(e.ClassName()), e.Message, sQry);
  263. throw Exception(String(e.ClassName()) + e.Message);
  264. }
  265. }
  266. __finally
  267. {
  268. if (pADO)
  269. {
  270. pADO->Close();
  271. delete pADO;
  272. }
  273. }
  274. return true;
  275. }
  276. //---------------------------------------------------------------------------
  277. bool TPrcsParamManager::GetNewPrcsParamId(String &ANewPraramId, TADOConnection *ADbConn/*=NULL*/)
  278. {
  279. String sQry;
  280. TADOQuery *pADO = NULL;
  281. sQry = "SELECT NVL(MAX(PARA_ID), 0) + 1 AS NEWID \r\n"
  282. " FROM TB_LINK_PARA_STUP \r\n";
  283. ANewPraramId = "";
  284. try
  285. {
  286. try
  287. {
  288. pADO = new TADOQuery(NULL);
  289. pADO->Close();
  290. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  291. pADO->SQL->Clear();
  292. pADO->SQL->Text = sQry;
  293. pADO->Prepared = true;
  294. pADO->Open();
  295. ANewPraramId = pADO->FieldByName("NEWID")->AsString;
  296. return true;
  297. }
  298. catch(EDatabaseError &E)
  299. {
  300. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  301. DBERRORMSG("TPrcsParamManager::GetNewPrcsParamId", String(E.ClassName()), E.Message, sQry);
  302. throw Exception(String(E.ClassName()) + E.Message);
  303. }
  304. catch(Exception &exception)
  305. {
  306. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  307. DBERRORMSG("TPrcsParamManager::GetNewPrcsParamId", String(exception.ClassName()), exception.Message, sQry);
  308. throw Exception(String(exception.ClassName()) + exception.Message);
  309. }
  310. }
  311. __finally
  312. {
  313. if (pADO)
  314. {
  315. pADO->Close();
  316. delete pADO;
  317. }
  318. }
  319. return false;
  320. }
  321. //---------------------------------------------------------------------------
  322. bool TPrcsParamManager::DeleteData(TPrcsParam* AObj, TADOConnection *ADbConn/*=NULL*/)
  323. {
  324. String sQry;
  325. TADOQuery *pADO = NULL;
  326. sQry = "DELETE TB_LINK_PARA_CLCT_SYST \r\n"
  327. " WHERE PARA_ID = :p01 \r\n";
  328. try
  329. {
  330. try
  331. {
  332. pADO = new TADOQuery(NULL);
  333. pADO->Close();
  334. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  335. pADO->SQL->Clear();
  336. pADO->SQL->Text = sQry;
  337. pADO->Parameters->ParamByName("p01")->Value = AObj->PARA_ID;
  338. pADO->ExecSQL();
  339. sQry = "DELETE TB_LINK_PARA_DETL \r\n"
  340. " WHERE PARA_ID = :p01 \r\n";
  341. pADO->SQL->Clear();
  342. pADO->SQL->Text = sQry;
  343. pADO->Parameters->ParamByName("p01")->Value = AObj->PARA_ID;
  344. pADO->ExecSQL();
  345. sQry = "DELETE TB_LINK_PARA_STUP \r\n"
  346. " WHERE PARA_ID = :p01 \r\n";
  347. pADO->SQL->Clear();
  348. pADO->SQL->Text = sQry;
  349. pADO->Parameters->ParamByName("p01")->Value = AObj->PARA_ID;
  350. pADO->ExecSQL();
  351. AObj->DEL_YN = "Y";
  352. return true;
  353. }
  354. catch(EDatabaseError &E)
  355. {
  356. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  357. DBERRORMSG("TPrcsParamManager::DeleteData", String(E.ClassName()), E.Message, sQry);
  358. throw Exception(String(E.ClassName()) + E.Message);
  359. }
  360. catch(Exception &exception)
  361. {
  362. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  363. DBERRORMSG("TPrcsParamManager::DeleteData", String(exception.ClassName()), exception.Message, sQry);
  364. throw Exception(String(exception.ClassName()) + exception.Message);
  365. }
  366. }
  367. __finally
  368. {
  369. if (pADO)
  370. {
  371. pADO->Close();
  372. delete pADO;
  373. }
  374. }
  375. return true;
  376. }
  377. //---------------------------------------------------------------------------