CDSVilgFrcsF.cpp 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621
  1. //---------------------------------------------------------------------------
  2. #pragma hdrstop
  3. #include "CDSVilgFrcsF.h"
  4. #include "ITSDbF.h"
  5. #include "AppGlobalF.h"
  6. //---------------------------------------------------------------------------
  7. #pragma package(smart_init)
  8. //---------------------------------------------------------------------------
  9. TItsVilgFrcsManager *ItsVilgFrcsManager = NULL;
  10. //---------------------------------------------------------------------------
  11. /*
  12. * VilgFrcs Manager
  13. */
  14. TItsVilgFrcsManager::TItsVilgFrcsManager()
  15. {
  16. }
  17. //---------------------------------------------------------------------------
  18. TItsVilgFrcsManager::~TItsVilgFrcsManager()
  19. {
  20. }
  21. //---------------------------------------------------------------------------
  22. bool TItsVilgFrcsManager::LoadFromDb(TADOConnection *ADbConn/*=NULL*/)
  23. {
  24. String sQry;
  25. TADOQuery *pADO = NULL;
  26. sQry = "SELECT * \r\n"
  27. " FROM TB_VILG_FRCS_ZONE \r\n"
  28. " ORDER BY VILG_FRCS_ZONE_NM \r\n";
  29. try
  30. {
  31. FLists.Lock();
  32. FLists.RemoveAll();
  33. try
  34. {
  35. pADO = new TADOQuery(NULL);
  36. pADO->Close();
  37. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  38. pADO->SQL->Clear();
  39. pADO->SQL->Text = sQry;
  40. pADO->Prepared = true;
  41. pADO->Open();
  42. for( ; !pADO->Eof; pADO->Next())
  43. {
  44. TItsVilgFrcs *pObj = new TItsVilgFrcs();
  45. pObj->VILG_FRCS_ZONE_CD = pADO->FieldByName("VILG_FRCS_ZONE_CD")->AsString; // N NUMBER(14) N 동네 예보 구역 코드
  46. pObj->VILG_FRCS_ZONE_NM = pADO->FieldByName("VILG_FRCS_ZONE_NM")->AsString; // N VARCHAR2(40) Y 동네 예보 구역 명
  47. pObj->X_CRDN = pADO->FieldByName("X_CRDN")->AsString; //X 좌표
  48. pObj->Y_CRDN = pADO->FieldByName("Y_CRDN")->AsString; //Y 좌표
  49. FLists.Push(pObj->VILG_FRCS_ZONE_CD, pObj);
  50. }
  51. }
  52. catch(EDatabaseError &E)
  53. {
  54. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  55. DBERRORMSG("TItsVilgFrcsManager::LoadFromDb", String(E.ClassName()), E.Message, sQry);
  56. throw Exception(String(E.ClassName()) + E.Message);
  57. }
  58. catch(Exception &exception)
  59. {
  60. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  61. DBERRORMSG("TItsVilgFrcsManager::LoadFromDb", String(exception.ClassName()), exception.Message, sQry);
  62. throw Exception(String(exception.ClassName()) + exception.Message);
  63. }
  64. }
  65. __finally
  66. {
  67. if (pADO)
  68. {
  69. pADO->Close();
  70. delete pADO;
  71. }
  72. FLists.UnLock();
  73. }
  74. return LoadFromDbAtmp(ADbConn);
  75. }
  76. //---------------------------------------------------------------------------
  77. bool TItsVilgFrcsManager::LoadFromDbAtmp(TADOConnection *ADbConn/*=NULL*/)
  78. {
  79. String sQry;
  80. TADOQuery *pADO = NULL;
  81. sQry = "SELECT * \r\n"
  82. " FROM TB_ATMP_PLTN_STTN \r\n"
  83. " ORDER BY ATMP_STTN_NMBR \r\n";
  84. try
  85. {
  86. FAtmpLists.Lock();
  87. FAtmpLists.RemoveAll();
  88. try
  89. {
  90. pADO = new TADOQuery(NULL);
  91. pADO->Close();
  92. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  93. pADO->SQL->Clear();
  94. pADO->SQL->Text = sQry;
  95. pADO->Prepared = true;
  96. pADO->Open();
  97. for( ; !pADO->Eof; pADO->Next())
  98. {
  99. TItsAtmpPltn *pObj = new TItsAtmpPltn();
  100. pObj->ATMP_STTN_NMBR = pADO->FieldByName("ATMP_STTN_NMBR")->AsString; // N NUMBER(10) N 측정소 번호
  101. pObj->ATMP_STTN_NM = pADO->FieldByName("ATMP_STTN_NM")->AsString; // N VARCHAR2(30) N 측정소 명
  102. pObj->ATMP_STTN_ADDR = pADO->FieldByName("ATMP_STTN_ADDR")->AsString; // N VARCHAR2(200) Y 측정소 주소
  103. pObj->ISTL_YY = pADO->FieldByName("ISTL_YY")->AsString; // N VARCHAR2(4) Y 설치 년도
  104. pObj->MNGM_INTN_NM = pADO->FieldByName("MNGM_INTN_NM")->AsString; // N VARCHAR2(100) Y 관리 기관 명
  105. pObj->MSRM_SYST_NM = pADO->FieldByName("MSRM_SYST_NM")->AsString; // N VARCHAR2(10) Y 측정 시스템 명
  106. pObj->MSRM_ITEM = pADO->FieldByName("MSRM_ITEM")->AsString; // N VARCHAR2(100) Y 측정 항목
  107. pObj->X_CRDN = pADO->FieldByName("X_CRDN")->AsString; //X 좌표
  108. pObj->Y_CRDN = pADO->FieldByName("Y_CRDN")->AsString; //Y 좌표
  109. FAtmpLists.Push(pObj->ATMP_STTN_NMBR, pObj);
  110. }
  111. }
  112. catch(EDatabaseError &E)
  113. {
  114. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  115. DBERRORMSG("TItsVilgFrcsManager::LoadFromDbAtmp", String(E.ClassName()), E.Message, sQry);
  116. throw Exception(String(E.ClassName()) + E.Message);
  117. }
  118. catch(Exception &exception)
  119. {
  120. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  121. DBERRORMSG("TItsVilgFrcsManager::LoadFromDbAtmp", String(exception.ClassName()), exception.Message, sQry);
  122. throw Exception(String(exception.ClassName()) + exception.Message);
  123. }
  124. }
  125. __finally
  126. {
  127. if (pADO)
  128. {
  129. pADO->Close();
  130. delete pADO;
  131. }
  132. FAtmpLists.UnLock();
  133. }
  134. return true;
  135. }
  136. //---------------------------------------------------------------------------
  137. bool TItsVilgFrcsManager::LoadVilgFrcsInfo(TADOConnection *ADbConn/*=NULL*/)
  138. {
  139. String sQry;
  140. TADOQuery *pADO = NULL;
  141. sQry = "SELECT A.*, \r\n"
  142. " NVL((SELECT CMMN_CD \r\n"
  143. " FROM TB_CMMN_CD \r\n"
  144. " WHERE CMMN_CLSF_CD = 'DFW' \r\n"
  145. " AND CMMN_CD_KOR_NM(+) = WTCD_KOR_NM), 'XXX') AS WTCD_KOR_CD \r\n"
  146. " FROM TB_VILG_FRCS A \r\n"
  147. " WHERE (A.VILG_FRCS_ZONE_CD, A.ANNC_DT) IN (SELECT VILG_FRCS_ZONE_CD, MAX(ANNC_DT) AS ANNC_DT \r\n"
  148. " FROM TB_VILG_FRCS \r\n"
  149. " WHERE ANNC_DT >= TO_CHAR(SYSDATE-240/1440,'YYYYMMDDHH24MISS') \r\n"
  150. " AND ORD = 0 \r\n"
  151. " GROUP BY VILG_FRCS_ZONE_CD) \r\n"
  152. " AND A.ORD = 0 \r\n";
  153. try
  154. {
  155. float fTemp;
  156. FLists.Lock();
  157. try
  158. {
  159. pADO = new TADOQuery(NULL);
  160. pADO->Close();
  161. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  162. pADO->SQL->Clear();
  163. pADO->SQL->Text = sQry;
  164. pADO->Prepared = true;
  165. pADO->Open();
  166. for( ; !pADO->Eof; pADO->Next())
  167. {
  168. String VILG_FRCS_ZONE_CD = pADO->FieldByName("VILG_FRCS_ZONE_CD")->AsString;
  169. TItsVilgFrcs *pObj = FLists.Find(VILG_FRCS_ZONE_CD);
  170. if (!pObj) continue;
  171. pObj->ANNC_DT = pADO->FieldByName("ANNC_DT")->AsString; // N VARCHAR2(14) N 발표 일시
  172. pObj->ORD = pADO->FieldByName("ORD")->AsString; // N NUMBER(3) N 0 순서
  173. pObj->HH = pADO->FieldByName("HH")->AsString; // N NUMBER(3) Y 0 시간
  174. pObj->DD = pADO->FieldByName("DD")->AsString; // N NUMBER(3) Y 0 일
  175. pObj->PRST_TMPR = pADO->FieldByName("PRST_TMPR")->AsString; // N NUMBER(6,3) Y 현재 온도
  176. pObj->HGHS_TMPR = pADO->FieldByName("HGHS_TMPR")->AsString; // N NUMBER(6,3) Y 최고 온도
  177. pObj->LWST_TMPR = pADO->FieldByName("LWST_TMPR")->AsString; // N NUMBER(6,3) Y 최저 온도
  178. #if 0
  179. pObj->ATMP_STTS = pADO->FieldByName("ATMP_STTS")->AsString; // N NUMBER(2) Y 대기 상태
  180. #else
  181. switch(pADO->FieldByName("ATMP_STTS")->AsInteger)
  182. {
  183. case 1: pObj->ATMP_STTS = "맑음"; break;
  184. case 2: pObj->ATMP_STTS = "구름조금"; break;
  185. case 3: pObj->ATMP_STTS = "구름많음"; break;
  186. case 4: pObj->ATMP_STTS = "흐림"; break;
  187. default:
  188. pObj->ATMP_STTS = pADO->FieldByName("ATMP_STTS")->AsString;
  189. break;
  190. }
  191. #endif
  192. pObj->WTCD_KOR_NM = pADO->FieldByName("WTCD_KOR_NM")->AsString; // N VARCHAR2(20) Y 날씨 한글 명
  193. #if 0
  194. pObj->PRCP_STTS = pADO->FieldByName("PRCP_STTS")->AsString; // N NUMBER(3) Y 0 강수 상태
  195. #else
  196. switch(pADO->FieldByName("PRCP_STTS")->AsInteger)
  197. {
  198. case 0: pObj->PRCP_STTS = "없음"; break;
  199. case 1: pObj->PRCP_STTS = "비"; break;
  200. case 2: pObj->PRCP_STTS = "비/눈"; break;
  201. case 3: pObj->PRCP_STTS = "눈"; break;
  202. default:
  203. pObj->PRCP_STTS = pADO->FieldByName("PRCP_STTS")->AsString;
  204. break;
  205. }
  206. #endif
  207. pObj->WTCD_ENGL_NM = pADO->FieldByName("WTCD_ENGL_NM")->AsString; // N VARCHAR2(20) Y 날씨 영문 명
  208. pObj->PRCP_PR = pADO->FieldByName("PRCP_PR")->AsString; // N NUMBER(5,2) Y 0 강수 확률
  209. pObj->ESTM_PRAM_12HH = pADO->FieldByName("ESTM_PRAM_12HH")->AsString; // N NUMBER(5,2) Y 0 예상 강수량 12시간
  210. pObj->ESTM_SNOW_AMUT_12HH = pADO->FieldByName("ESTM_SNOW_AMUT_12HH")->AsString; // N NUMBER(5,2) Y 0 예상 눈 량 12시간
  211. pObj->WNSP = pADO->FieldByName("WNSP")->AsString; // N NUMBER(5,2) Y 0 풍속
  212. pObj->WNDR = pADO->FieldByName("WNDR")->AsString; // N NUMBER(2) Y 풍향
  213. pObj->WNDR_KOR_NM = pADO->FieldByName("WNDR_KOR_NM")->AsString; // N VARCHAR2(20) Y 풍향 한글 명
  214. pObj->WNDR_ENGL_NM = pADO->FieldByName("WNDR_ENGL_NM")->AsString; // N VARCHAR2(20) Y 풍향 영문 명
  215. pObj->HMDT = pADO->FieldByName("HMDT")->AsString; // N NUMBER(5,2) Y 0 습도
  216. pObj->ESTM_PRCP_AMUT_6HH = pADO->FieldByName("ESTM_PRCP_AMUT_6HH")->AsString; // N NUMBER(5,2) Y 0 예상 강수 량 6시간
  217. pObj->ESTM_SNOW_AMUT_6HH = pADO->FieldByName("ESTM_SNOW_AMUT_6HH")->AsString; // N NUMBER(5,2) Y 0 예상 눈 량 6시간
  218. pObj->WTCD_KOR_CD = pADO->FieldByName("WTCD_KOR_CD")->AsString;
  219. if (pObj->WTCD_KOR_CD == "XXX" || pObj->VILG_FRCS_ZONE_NM.Trim() == "")
  220. {
  221. pObj->VILG_FRCS_ZONE_NM = "정보없음";
  222. }
  223. // 호우알람
  224. fTemp = pADO->FieldByName("ESTM_PRCP_AMUT_6HH")->AsFloat;
  225. pObj->PRCP_ALARM = VILG_NONE; // 강풍알람
  226. if (fTemp >= 110) pObj->PRCP_ALARM = VILG_ALARM;
  227. else if (fTemp >= 70) pObj->PRCP_ALARM = VILG_WARNING;
  228. if (pObj->PRCP_ALARM != VILG_NONE)
  229. {
  230. }
  231. // 대설알람
  232. fTemp = pADO->FieldByName("ESTM_SNOW_AMUT_6HH")->AsFloat;
  233. fTemp *= 4;
  234. //pObj->ESTM_SNOW_AMUT_6HH = FormatFloat("#0.#0", fTemp);
  235. pObj->SNOW_ALARM = VILG_NONE; // 강풍알람
  236. if (fTemp >= 20) pObj->SNOW_ALARM = VILG_ALARM;
  237. else if (fTemp >= 5) pObj->SNOW_ALARM = VILG_WARNING;
  238. if (pObj->SNOW_ALARM != VILG_NONE)
  239. {
  240. }
  241. }
  242. }
  243. catch(EDatabaseError &E)
  244. {
  245. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  246. DBERRORMSG("TItsVilgFrcsManager::LoadVilgFrcsInfo", String(E.ClassName()), E.Message, sQry);
  247. throw Exception(String(E.ClassName()) + E.Message);
  248. }
  249. catch(Exception &exception)
  250. {
  251. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  252. DBERRORMSG("TItsVilgFrcsManager::LoadVilgFrcsInfo", String(exception.ClassName()), exception.Message, sQry);
  253. throw Exception(String(exception.ClassName()) + exception.Message);
  254. }
  255. }
  256. __finally
  257. {
  258. if (pADO)
  259. {
  260. pADO->Close();
  261. delete pADO;
  262. }
  263. FLists.UnLock();
  264. }
  265. LoadVilgShprInfo(ADbConn);
  266. return LoadAtmpPltnInfo(ADbConn);
  267. //return LoadAtmpSprpInfo(ADbConn);
  268. }
  269. //---------------------------------------------------------------------------
  270. bool TItsVilgFrcsManager::LoadVilgShprInfo(TADOConnection *ADbConn/*=NULL*/)
  271. {
  272. String sQry;
  273. TADOQuery *pADO = NULL;
  274. sQry = "SELECT * \r\n"
  275. " FROM TB_VILG_SHPR \r\n"
  276. " WHERE ANNC_DT >= TO_CHAR(SYSDATE-120/1440,'YYYYMMDDHH24MISS') \r\n";
  277. try
  278. {
  279. int nTemp;
  280. float fTemp;
  281. FLists.Lock();
  282. try
  283. {
  284. pADO = new TADOQuery(NULL);
  285. pADO->Close();
  286. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  287. pADO->SQL->Clear();
  288. pADO->SQL->Text = sQry;
  289. pADO->Prepared = true;
  290. pADO->Open();
  291. for( ; !pADO->Eof; pADO->Next())
  292. {
  293. String VILG_FRCS_ZONE_CD = pADO->FieldByName("VILG_FRCS_ZONE_CD")->AsString;
  294. TItsVilgFrcs *pObj = FLists.Find(VILG_FRCS_ZONE_CD);
  295. if (!pObj) continue;
  296. pObj->shpr.ANNC_DT = pADO->FieldByName("ANNC_DT")->AsString; // N VARCHAR2(14) N 발표 일시
  297. pObj->shpr.TMPR = pADO->FieldByName("TMPR")->AsString; // N NUMBER(6,3) Y 온도
  298. pObj->shpr.PRAM_1HH = pADO->FieldByName("PRAM_1HH")->AsString; // N NUMBER(5,2) Y 0 강수량 1시간
  299. pObj->shpr.ATMP_STTS = pADO->FieldByName("ATMP_STTS")->AsString; // N NUMBER(2) Y 대기 상태
  300. pObj->shpr.ESWS_WNSP = pADO->FieldByName("ESWS_WNSP")->AsString; // N NUMBER(5,2) Y 0 동서 풍속
  301. pObj->shpr.NRST_WNSP = pADO->FieldByName("NRST_WNSP")->AsString; // N NUMBER(5,2) Y 0 남북 풍속
  302. pObj->shpr.HMDT = pADO->FieldByName("HMDT")->AsString; // N NUMBER(5,2) Y 0 습도
  303. pObj->shpr.PRCP_STTS = pADO->FieldByName("PRCP_STTS")->AsString; // N NUMBER(3) Y 0 강수 상태
  304. pObj->shpr.THND_STTS = pADO->FieldByName("THND_STTS")->AsString; // N NUMBER(2) Y 낙뢰 상태
  305. pObj->shpr.WNDR = pADO->FieldByName("WNDR")->AsString; // N NUMBER(2) Y 풍향
  306. pObj->shpr.WNSP = pADO->FieldByName("WNSP")->AsString; // N NUMBER(5,2) Y 0 풍속
  307. #if 0
  308. int wndr = pObj->shpr.WNDR.ToIntDef(0);
  309. if (wndr >= 0 && wndr < 45) pObj->shpr.WNDR_NM = "N-NE";
  310. if (wndr >= 45 && wndr < 90) pObj->shpr.WNDR_NM = "NE-E";
  311. if (wndr >= 90 && wndr < 135) pObj->shpr.WNDR_NM = "E-SE";
  312. if (wndr >= 135 && wndr < 180) pObj->shpr.WNDR_NM = "SE-S";
  313. if (wndr >= 180 && wndr < 225) pObj->shpr.WNDR_NM = "S-SW";
  314. if (wndr >= 225 && wndr < 270) pObj->shpr.WNDR_NM = "SW-W";
  315. if (wndr >= 270 && wndr < 315) pObj->shpr.WNDR_NM = "W-NW";
  316. if (wndr >= 315 && wndr <= 360) pObj->shpr.WNDR_NM = "NW-N";
  317. #else
  318. //풍향값에 따른 16방위 변환
  319. int wndr = pObj->shpr.WNDR.ToIntDef(0);
  320. int wndrDir = (int)(((float)wndr + 22.5 * 0.5 ) / 22.5);
  321. switch(wndrDir)
  322. {
  323. case 0: pObj->shpr.WNDR_NM = "N"; break;
  324. case 1: pObj->shpr.WNDR_NM = "NNE"; break;
  325. case 2: pObj->shpr.WNDR_NM = "NE"; break;
  326. case 3: pObj->shpr.WNDR_NM = "ENE"; break;
  327. case 4: pObj->shpr.WNDR_NM = "E"; break;
  328. case 5: pObj->shpr.WNDR_NM = "ESE"; break;
  329. case 6: pObj->shpr.WNDR_NM = "SE"; break;
  330. case 7: pObj->shpr.WNDR_NM = "SSE"; break;
  331. case 8: pObj->shpr.WNDR_NM = "S"; break;
  332. case 9: pObj->shpr.WNDR_NM = "SSW"; break;
  333. case 10: pObj->shpr.WNDR_NM = "SW"; break;
  334. case 11: pObj->shpr.WNDR_NM = "WSW"; break;
  335. case 12: pObj->shpr.WNDR_NM = "W"; break;
  336. case 13: pObj->shpr.WNDR_NM = "WNW"; break;
  337. case 14: pObj->shpr.WNDR_NM = "NW"; break;
  338. case 15: pObj->shpr.WNDR_NM = "NNW"; break;
  339. case 16: pObj->shpr.WNDR_NM = "N"; break;
  340. }
  341. #endif
  342. //하늘상태 - 맑음(1), 구름조금(2), 구름많음(3), 흐림(4)
  343. switch(pObj->shpr.ATMP_STTS.ToIntDef(0))
  344. {
  345. case 1: pObj->shpr.ATMP_STTS_NM = "맑음"; break;
  346. case 2: pObj->shpr.ATMP_STTS_NM = "구름조금"; break;
  347. case 3: pObj->shpr.ATMP_STTS_NM = "구름많음"; break;
  348. case 4: pObj->shpr.ATMP_STTS_NM = "흐림"; break;
  349. default: pObj->shpr.ATMP_STTS_NM = "-"; break;
  350. }
  351. // 동서바람성분(m/s) - 동(+), 서(-)
  352. fTemp = pADO->FieldByName("ESWS_WNSP")->AsFloat;
  353. if (fTemp > 0) pObj->shpr.ESWS_WNSP_NM = "동 " + FormatFloat("#0.#0", fTemp);
  354. else if (fTemp < 0) pObj->shpr.ESWS_WNSP_NM = "서 " + FormatFloat("#0.#0", fTemp*-1);
  355. else pObj->shpr.ESWS_WNSP_NM = "-";
  356. // 남북바람성분(m/s) - 북(+), 남(-)
  357. fTemp = pADO->FieldByName("NRST_WNSP")->AsFloat;
  358. if (fTemp > 0) pObj->shpr.NRST_WNSP_NM = "북 " + FormatFloat("#0.#0", fTemp);
  359. else if (fTemp < 0) pObj->shpr.NRST_WNSP_NM = "남 " + FormatFloat("#0.#0", fTemp*-1);
  360. else pObj->shpr.NRST_WNSP_NM = "-";
  361. //강수형태 - 없음(0), 비(1), 비/눈(2), 눈(3)
  362. switch(pObj->shpr.PRCP_STTS.ToIntDef(0))
  363. {
  364. case 0: pObj->shpr.PRCP_STTS_NM = "없음"; break;
  365. case 1: pObj->shpr.PRCP_STTS_NM = "비"; break;
  366. case 2: pObj->shpr.PRCP_STTS_NM = "비/눈"; break;
  367. case 3: pObj->shpr.PRCP_STTS_NM = "눈"; break;
  368. default: pObj->shpr.PRCP_STTS_NM = "-"; break;
  369. }
  370. //낙뢰 - 없음(0), 있음(1)
  371. switch(pObj->shpr.THND_STTS.ToIntDef(0))
  372. {
  373. case 0: pObj->shpr.THND_STTS_NM = "없음"; break;
  374. case 1: pObj->shpr.THND_STTS_NM = "비"; break;
  375. default: pObj->shpr.THND_STTS_NM = "-"; break;
  376. }
  377. fTemp = pADO->FieldByName("WNSP")->AsFloat;
  378. pObj->shpr.WNSP_ALARM = VILG_NONE; // 강풍알람
  379. if (fTemp >= 21) pObj->shpr.WNSP_ALARM = VILG_ALARM;
  380. else if (fTemp >= 14) pObj->shpr.WNSP_ALARM = VILG_WARNING;
  381. if (pObj->shpr.WNSP_ALARM != VILG_NONE)
  382. {
  383. }
  384. }
  385. }
  386. catch(EDatabaseError &E)
  387. {
  388. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  389. DBERRORMSG("TItsVilgFrcsManager::LoadVilgShprInfo", String(E.ClassName()), E.Message, sQry);
  390. throw Exception(String(E.ClassName()) + E.Message);
  391. }
  392. catch(Exception &exception)
  393. {
  394. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  395. DBERRORMSG("TItsVilgFrcsManager::LoadVilgShprInfo", String(exception.ClassName()), exception.Message, sQry);
  396. throw Exception(String(exception.ClassName()) + exception.Message);
  397. }
  398. }
  399. __finally
  400. {
  401. if (pADO)
  402. {
  403. pADO->Close();
  404. delete pADO;
  405. }
  406. FLists.UnLock();
  407. }
  408. return true;
  409. }
  410. //---------------------------------------------------------------------------
  411. String TItsVilgFrcsManager::GetGradeDesc(String &ACode)
  412. {
  413. ACode = ACode.Trim();
  414. if (ACode == "1") return ATMP_GOOD;
  415. if (ACode == "2") return ATMP_NORMAL;
  416. if (ACode == "3") return ATMP_BAD;
  417. if (ACode == "4") return ATM_VERY_BAD;
  418. ACode = "0";
  419. return ATMP_NONE;
  420. }
  421. //---------------------------------------------------------------------------
  422. bool TItsVilgFrcsManager::LoadAtmpPltnInfo(TADOConnection *ADbConn/*=NULL*/)
  423. {
  424. String sQry;
  425. TADOQuery *pADO = NULL;
  426. sQry = "SELECT * \r\n"
  427. " FROM TB_ATMP_PLTN_RT_PNST \r\n"
  428. " WHERE MSRM_DT >= TO_CHAR(SYSDATE-120/1440,'YYYYMMDDHH24MISS') \r\n";
  429. try
  430. {
  431. int nTemp;
  432. float fTemp;
  433. FAtmpLists.Lock();
  434. try
  435. {
  436. pADO = new TADOQuery(NULL);
  437. pADO->Close();
  438. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  439. pADO->SQL->Clear();
  440. pADO->SQL->Text = sQry;
  441. pADO->Prepared = true;
  442. pADO->Open();
  443. for( ; !pADO->Eof; pADO->Next())
  444. {
  445. String ATMP_STTN_NMBR = pADO->FieldByName("ATMP_STTN_NMBR")->AsString;
  446. TItsAtmpPltn *pObj = FAtmpLists.Find(ATMP_STTN_NMBR);
  447. if (!pObj) continue;
  448. pObj->pnst.MSRM_DT = pADO->FieldByName("MSRM_DT")->AsString; // N VARCHAR2(14) Y 측정 일시
  449. pObj->pnst.MSRM_SYST_NM = pADO->FieldByName("MSRM_SYST_NM")->AsString; // N VARCHAR2(10) Y 측정 시스템 명
  450. pObj->pnst.CO_VAL = pADO->FieldByName("CO_VAL")->AsString; // N VARCHAR2(10) Y CO 값
  451. pObj->pnst.SO2_VAL = pADO->FieldByName("SO2_VAL")->AsString; // N VARCHAR2(10) Y SO2 값
  452. pObj->pnst.NO2_VAL = pADO->FieldByName("NO2_VAL")->AsString; // N VARCHAR2(10) Y NO2 값
  453. pObj->pnst.O3_VAL = pADO->FieldByName("O3_VAL")->AsString; // N VARCHAR2(10) Y O3 값
  454. pObj->pnst.PM10_VAL = pADO->FieldByName("PM10_VAL")->AsString; // N VARCHAR2(10) Y PM10 값
  455. pObj->pnst.PM10_24HH_VAL = pADO->FieldByName("PM10_24HH_VAL")->AsString; // N VARCHAR2(10) Y PM10 24시간 값
  456. pObj->pnst.PM25_VAL = pADO->FieldByName("PM25_VAL")->AsString; // N VARCHAR2(10) Y PM25 값
  457. pObj->pnst.PM25_24HH_VAL = pADO->FieldByName("PM25_24HH_VAL")->AsString; // N VARCHAR2(10) Y PM25 24시간 값
  458. pObj->pnst.INTG_ATMP_VAL = pADO->FieldByName("INTG_ATMP_VAL")->AsString; // N VARCHAR2(10) Y 통합 대기 값
  459. pObj->pnst.INTG_ATMP_GRAD = pADO->FieldByName("INTG_ATMP_GRAD")->AsString; // N VARCHAR2(10) Y 통합 대기 등급
  460. pObj->pnst.SO2_GRAD = pADO->FieldByName("SO2_GRAD")->AsString; // N VARCHAR2(10) Y SO2 등급
  461. pObj->pnst.CO_GRAD = pADO->FieldByName("CO_GRAD")->AsString; // N VARCHAR2(10) Y CO 등급
  462. pObj->pnst.O3_GRAD = pADO->FieldByName("O3_GRAD")->AsString; // N VARCHAR2(10) Y O3 드급
  463. pObj->pnst.NO2_GRAD = pADO->FieldByName("NO2_GRAD")->AsString; // N VARCHAR2(10) Y NO2 등급
  464. pObj->pnst.PM10_24HH_GRAD = pADO->FieldByName("PM10_24HH_GRAD")->AsString; // N VARCHAR2(10) Y PM10 24시간 등급
  465. pObj->pnst.PM25_24HH_GRAD = pADO->FieldByName("PM25_24HH_GRAD")->AsString; // N VARCHAR2(10) Y PM25 24시간 등급
  466. pObj->pnst.PM10_1HH_GRAD = pADO->FieldByName("PM10_1HH_GRAD")->AsString; // N VARCHAR2(10) Y PM10 1시간 등급
  467. pObj->pnst.PM25_1HH_GRAD = pADO->FieldByName("PM25_1HH_GRAD")->AsString; // N VARCHAR2(10) Y PM25 1시간 등급
  468. pObj->pnst.UPDT_DT = pADO->FieldByName("UPDT_DT")->AsString; // N VARCHAR2(14) Y 갱신 일시
  469. pObj->pnst.INTG_ATMP_GRAD_NM = GetGradeDesc(pObj->pnst.INTG_ATMP_GRAD);
  470. pObj->pnst.SO2_GRAD_NM = GetGradeDesc(pObj->pnst.SO2_GRAD);
  471. pObj->pnst.CO_GRAD_NM = GetGradeDesc(pObj->pnst.CO_GRAD);
  472. pObj->pnst.O3_GRAD_NM = GetGradeDesc(pObj->pnst.O3_GRAD);
  473. pObj->pnst.NO2_GRAD_NM = GetGradeDesc(pObj->pnst.NO2_GRAD);
  474. pObj->pnst.PM10_24HH_GRAD_NM = GetGradeDesc(pObj->pnst.PM10_24HH_GRAD);
  475. pObj->pnst.PM25_24HH_GRAD_NM = GetGradeDesc(pObj->pnst.PM25_24HH_GRAD);
  476. pObj->pnst.PM10_1HH_GRAD_NM = GetGradeDesc(pObj->pnst.PM10_1HH_GRAD);
  477. pObj->pnst.PM25_1HH_GRAD_NM = GetGradeDesc(pObj->pnst.PM25_1HH_GRAD);
  478. }
  479. }
  480. catch(EDatabaseError &E)
  481. {
  482. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  483. DBERRORMSG("TItsVilgFrcsManager::LoadAtmpPltnInfo", String(E.ClassName()), E.Message, sQry);
  484. throw Exception(String(E.ClassName()) + E.Message);
  485. }
  486. catch(Exception &exception)
  487. {
  488. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  489. DBERRORMSG("TItsVilgFrcsManager::LoadAtmpPltnInfo", String(exception.ClassName()), exception.Message, sQry);
  490. throw Exception(String(exception.ClassName()) + exception.Message);
  491. }
  492. }
  493. __finally
  494. {
  495. if (pADO)
  496. {
  497. pADO->Close();
  498. delete pADO;
  499. }
  500. FAtmpLists.UnLock();
  501. }
  502. return true;
  503. }
  504. //---------------------------------------------------------------------------
  505. bool TItsVilgFrcsManager::LoadAtmpSprpInfo(TADOConnection *ADbConn/*=NULL*/)
  506. {
  507. String sQry;
  508. TADOQuery *pADO = NULL;
  509. sQry = "SELECT * \r\n"
  510. " FROM TB_ATMP_PLTN_SPRP_PNST A \r\n"
  511. " WHERE A.ANNC_DVSN = '1' \r\n"
  512. " AND A.ANNC_DT > TO_CHAR(SYSDATE-31/1440,'YYYYMMDDHH24') \r\n";
  513. try
  514. {
  515. FSprpLists.Lock();
  516. FSprpLists.RemoveAll();
  517. try
  518. {
  519. pADO = new TADOQuery(NULL);
  520. pADO->Close();
  521. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  522. pADO->SQL->Clear();
  523. pADO->SQL->Text = sQry;
  524. pADO->Prepared = true;
  525. pADO->Open();
  526. for( ; !pADO->Eof; pADO->Next())
  527. {
  528. TItsAtmpSprp *pObj = new TItsAtmpSprp();
  529. pObj->ATMP_PLTN_KIND = pADO->FieldByName("ATMP_PLTN_KIND")->AsString.Trim(); // N VARCHAR2(1) N 대기 오염 종류(1:미세먼지, 2:초미세먼지)
  530. pObj->ANNC_DT = pADO->FieldByName("ANNC_DT")->AsString.Trim(); // N VARCHAR2(14) Y Update 시간
  531. pObj->REGN_CD = pADO->FieldByName("REGN_CD")->AsString.Trim(); // N VARCHAR2(1) Y 2 권역 코드(1:북부권, 2:동부권, 3:중부권, 4:남부권) 남양주=동부권
  532. pObj->ANNC_YMD = pADO->FieldByName("ANNC_YMD")->AsString.Trim(); // N VARCHAR2(8) Y 발표 일자(4)
  533. pObj->ANNC_HH = pADO->FieldByName("ANNC_HH")->AsString.Trim(); // N VARCHAR2(2) Y 발표 시간(2)
  534. pObj->ANNC_GRAD = pADO->FieldByName("ANNC_GRAD")->AsString.Trim(); // N VARCHAR2(1) Y 발표 등급(1:주의보, 2:경보, 5:황사경보)
  535. pObj->ANNC_DVSN = pADO->FieldByName("ANNC_DVSN")->AsString.Trim(); // N VARCHAR2(1) Y 발표 구분(1:발령, 0:해제, 2:발령내역없음)
  536. FSprpLists.Push(pObj->ATMP_PLTN_KIND, pObj);
  537. }
  538. }
  539. catch(EDatabaseError &E)
  540. {
  541. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  542. DBERRORMSG("TItsVilgFrcsManager::LoadAtmpSprpInfo", String(E.ClassName()), E.Message, sQry);
  543. throw Exception(String(E.ClassName()) + E.Message);
  544. }
  545. catch(Exception &exception)
  546. {
  547. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  548. DBERRORMSG("TItsVilgFrcsManager::LoadAtmpSprpInfo", String(exception.ClassName()), exception.Message, sQry);
  549. throw Exception(String(exception.ClassName()) + exception.Message);
  550. }
  551. }
  552. __finally
  553. {
  554. if (pADO)
  555. {
  556. pADO->Close();
  557. delete pADO;
  558. }
  559. FSprpLists.UnLock();
  560. }
  561. return true;
  562. }
  563. //---------------------------------------------------------------------------