CDSVilgFrcsF.cpp 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621
  1. //---------------------------------------------------------------------------
  2. #pragma hdrstop
  3. #include "CDSVilgFrcsF.h"
  4. #include "ITS_OPLibF.h"
  5. //---------------------------------------------------------------------------
  6. #pragma package(smart_init)
  7. //---------------------------------------------------------------------------
  8. TItsVilgFrcsManager *ItsVilgFrcsManager = NULL;
  9. //---------------------------------------------------------------------------
  10. /*
  11. * VilgFrcs Manager
  12. */
  13. TItsVilgFrcsManager::TItsVilgFrcsManager()
  14. {
  15. }
  16. //---------------------------------------------------------------------------
  17. TItsVilgFrcsManager::~TItsVilgFrcsManager()
  18. {
  19. }
  20. //---------------------------------------------------------------------------
  21. bool TItsVilgFrcsManager::LoadFromDb(TADOConnection *ADbConn/*=NULL*/)
  22. {
  23. String sQry;
  24. TADOQuery *pADO = NULL;
  25. sQry = "SELECT * \r\n"
  26. " FROM TB_VILG_FRCS_ZONE \r\n"
  27. " ORDER BY VILG_FRCS_ZONE_NM \r\n";
  28. try
  29. {
  30. FLists.Lock();
  31. FLists.RemoveAll();
  32. try
  33. {
  34. pADO = new TADOQuery(NULL);
  35. pADO->Close();
  36. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  37. pADO->SQL->Clear();
  38. pADO->SQL->Text = sQry;
  39. pADO->Prepared = true;
  40. pADO->Open();
  41. for( ; !pADO->Eof; pADO->Next())
  42. {
  43. TItsVilgFrcs *pObj = new TItsVilgFrcs();
  44. pObj->VILG_FRCS_ZONE_CD = pADO->FieldByName("VILG_FRCS_ZONE_CD")->AsString; // N NUMBER(14) N 동네 예보 구역 코드
  45. pObj->VILG_FRCS_ZONE_NM = pADO->FieldByName("VILG_FRCS_ZONE_NM")->AsString; // N VARCHAR2(40) Y 동네 예보 구역 명
  46. pObj->X_CRDN = pADO->FieldByName("X_CRDN")->AsString; //X 좌표
  47. pObj->Y_CRDN = pADO->FieldByName("Y_CRDN")->AsString; //Y 좌표
  48. FLists.Push(pObj->VILG_FRCS_ZONE_CD, pObj);
  49. }
  50. }
  51. catch(EDatabaseError &E)
  52. {
  53. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  54. DBERRORMSG("TItsVilgFrcsManager::LoadFromDb", String(E.ClassName()), E.Message, sQry);
  55. throw Exception(String(E.ClassName()) + E.Message);
  56. }
  57. catch(Exception &exception)
  58. {
  59. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  60. DBERRORMSG("TItsVilgFrcsManager::LoadFromDb", String(exception.ClassName()), exception.Message, sQry);
  61. throw Exception(String(exception.ClassName()) + exception.Message);
  62. }
  63. }
  64. __finally
  65. {
  66. if (pADO)
  67. {
  68. pADO->Close();
  69. delete pADO;
  70. }
  71. FLists.UnLock();
  72. }
  73. return true;
  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 true;
  267. //return LoadAtmpPltnInfo(ADbConn);
  268. //return LoadAtmpSprpInfo(ADbConn);
  269. }
  270. //---------------------------------------------------------------------------
  271. bool TItsVilgFrcsManager::LoadVilgShprInfo(TADOConnection *ADbConn/*=NULL*/)
  272. {
  273. String sQry;
  274. TADOQuery *pADO = NULL;
  275. sQry = "SELECT * \r\n"
  276. " FROM TB_VILG_SHPR \r\n"
  277. " WHERE ANNC_DT >= TO_CHAR(SYSDATE-120/1440,'YYYYMMDDHH24MISS') \r\n";
  278. try
  279. {
  280. int nTemp;
  281. float fTemp;
  282. FLists.Lock();
  283. try
  284. {
  285. pADO = new TADOQuery(NULL);
  286. pADO->Close();
  287. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  288. pADO->SQL->Clear();
  289. pADO->SQL->Text = sQry;
  290. pADO->Prepared = true;
  291. pADO->Open();
  292. for( ; !pADO->Eof; pADO->Next())
  293. {
  294. String VILG_FRCS_ZONE_CD = pADO->FieldByName("VILG_FRCS_ZONE_CD")->AsString;
  295. TItsVilgFrcs *pObj = FLists.Find(VILG_FRCS_ZONE_CD);
  296. if (!pObj) continue;
  297. pObj->shpr.ANNC_DT = pADO->FieldByName("ANNC_DT")->AsString; // N VARCHAR2(14) N 발표 일시
  298. pObj->shpr.TMPR = pADO->FieldByName("TMPR")->AsString; // N NUMBER(6,3) Y 온도
  299. pObj->shpr.PRAM_1HH = pADO->FieldByName("PRAM_1HH")->AsString; // N NUMBER(5,2) Y 0 강수량 1시간
  300. pObj->shpr.ATMP_STTS = pADO->FieldByName("ATMP_STTS")->AsString; // N NUMBER(2) Y 대기 상태
  301. pObj->shpr.ESWS_WNSP = pADO->FieldByName("ESWS_WNSP")->AsString; // N NUMBER(5,2) Y 0 동서 풍속
  302. pObj->shpr.NRST_WNSP = pADO->FieldByName("NRST_WNSP")->AsString; // N NUMBER(5,2) Y 0 남북 풍속
  303. pObj->shpr.HMDT = pADO->FieldByName("HMDT")->AsString; // N NUMBER(5,2) Y 0 습도
  304. pObj->shpr.PRCP_STTS = pADO->FieldByName("PRCP_STTS")->AsString; // N NUMBER(3) Y 0 강수 상태
  305. pObj->shpr.THND_STTS = pADO->FieldByName("THND_STTS")->AsString; // N NUMBER(2) Y 낙뢰 상태
  306. pObj->shpr.WNDR = pADO->FieldByName("WNDR")->AsString; // N NUMBER(2) Y 풍향
  307. pObj->shpr.WNSP = pADO->FieldByName("WNSP")->AsString; // N NUMBER(5,2) Y 0 풍속
  308. #if 0
  309. int wndr = pObj->shpr.WNDR.ToIntDef(0);
  310. if (wndr >= 0 && wndr < 45) pObj->shpr.WNDR_NM = "N-NE";
  311. if (wndr >= 45 && wndr < 90) pObj->shpr.WNDR_NM = "NE-E";
  312. if (wndr >= 90 && wndr < 135) pObj->shpr.WNDR_NM = "E-SE";
  313. if (wndr >= 135 && wndr < 180) pObj->shpr.WNDR_NM = "SE-S";
  314. if (wndr >= 180 && wndr < 225) pObj->shpr.WNDR_NM = "S-SW";
  315. if (wndr >= 225 && wndr < 270) pObj->shpr.WNDR_NM = "SW-W";
  316. if (wndr >= 270 && wndr < 315) pObj->shpr.WNDR_NM = "W-NW";
  317. if (wndr >= 315 && wndr <= 360) pObj->shpr.WNDR_NM = "NW-N";
  318. #else
  319. //풍향값에 따른 16방위 변환
  320. int wndr = pObj->shpr.WNDR.ToIntDef(0);
  321. int wndrDir = (int)(((float)wndr + 22.5 * 0.5 ) / 22.5);
  322. switch(wndrDir)
  323. {
  324. case 0: pObj->shpr.WNDR_NM = "N"; break;
  325. case 1: pObj->shpr.WNDR_NM = "NNE"; break;
  326. case 2: pObj->shpr.WNDR_NM = "NE"; break;
  327. case 3: pObj->shpr.WNDR_NM = "ENE"; break;
  328. case 4: pObj->shpr.WNDR_NM = "E"; break;
  329. case 5: pObj->shpr.WNDR_NM = "ESE"; break;
  330. case 6: pObj->shpr.WNDR_NM = "SE"; break;
  331. case 7: pObj->shpr.WNDR_NM = "SSE"; break;
  332. case 8: pObj->shpr.WNDR_NM = "S"; break;
  333. case 9: pObj->shpr.WNDR_NM = "SSW"; break;
  334. case 10: pObj->shpr.WNDR_NM = "SW"; break;
  335. case 11: pObj->shpr.WNDR_NM = "WSW"; break;
  336. case 12: pObj->shpr.WNDR_NM = "W"; break;
  337. case 13: pObj->shpr.WNDR_NM = "WNW"; break;
  338. case 14: pObj->shpr.WNDR_NM = "NW"; break;
  339. case 15: pObj->shpr.WNDR_NM = "NNW"; break;
  340. case 16: pObj->shpr.WNDR_NM = "N"; break;
  341. }
  342. #endif
  343. //하늘상태 - 맑음(1), 구름조금(2), 구름많음(3), 흐림(4)
  344. switch(pObj->shpr.ATMP_STTS.ToIntDef(0))
  345. {
  346. case 1: pObj->shpr.ATMP_STTS_NM = "맑음"; break;
  347. case 2: pObj->shpr.ATMP_STTS_NM = "구름조금"; break;
  348. case 3: pObj->shpr.ATMP_STTS_NM = "구름많음"; break;
  349. case 4: pObj->shpr.ATMP_STTS_NM = "흐림"; break;
  350. default: pObj->shpr.ATMP_STTS_NM = "-"; break;
  351. }
  352. // 동서바람성분(m/s) - 동(+), 서(-)
  353. fTemp = pADO->FieldByName("ESWS_WNSP")->AsFloat;
  354. if (fTemp > 0) pObj->shpr.ESWS_WNSP_NM = "동 " + FormatFloat("#0.#0", fTemp);
  355. else if (fTemp < 0) pObj->shpr.ESWS_WNSP_NM = "서 " + FormatFloat("#0.#0", fTemp*-1);
  356. else pObj->shpr.ESWS_WNSP_NM = "-";
  357. // 남북바람성분(m/s) - 북(+), 남(-)
  358. fTemp = pADO->FieldByName("NRST_WNSP")->AsFloat;
  359. if (fTemp > 0) pObj->shpr.NRST_WNSP_NM = "북 " + FormatFloat("#0.#0", fTemp);
  360. else if (fTemp < 0) pObj->shpr.NRST_WNSP_NM = "남 " + FormatFloat("#0.#0", fTemp*-1);
  361. else pObj->shpr.NRST_WNSP_NM = "-";
  362. //강수형태 - 없음(0), 비(1), 비/눈(2), 눈(3)
  363. switch(pObj->shpr.PRCP_STTS.ToIntDef(0))
  364. {
  365. case 0: pObj->shpr.PRCP_STTS_NM = "없음"; break;
  366. case 1: pObj->shpr.PRCP_STTS_NM = "비"; break;
  367. case 2: pObj->shpr.PRCP_STTS_NM = "비/눈"; break;
  368. case 3: pObj->shpr.PRCP_STTS_NM = "눈"; break;
  369. default: pObj->shpr.PRCP_STTS_NM = "-"; break;
  370. }
  371. //낙뢰 - 없음(0), 있음(1)
  372. switch(pObj->shpr.THND_STTS.ToIntDef(0))
  373. {
  374. case 0: pObj->shpr.THND_STTS_NM = "없음"; break;
  375. case 1: pObj->shpr.THND_STTS_NM = "비"; break;
  376. default: pObj->shpr.THND_STTS_NM = "-"; break;
  377. }
  378. fTemp = pADO->FieldByName("WNSP")->AsFloat;
  379. pObj->shpr.WNSP_ALARM = VILG_NONE; // 강풍알람
  380. if (fTemp >= 21) pObj->shpr.WNSP_ALARM = VILG_ALARM;
  381. else if (fTemp >= 14) pObj->shpr.WNSP_ALARM = VILG_WARNING;
  382. if (pObj->shpr.WNSP_ALARM != VILG_NONE)
  383. {
  384. }
  385. }
  386. }
  387. catch(EDatabaseError &E)
  388. {
  389. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  390. DBERRORMSG("TItsVilgFrcsManager::LoadVilgShprInfo", String(E.ClassName()), E.Message, sQry);
  391. throw Exception(String(E.ClassName()) + E.Message);
  392. }
  393. catch(Exception &exception)
  394. {
  395. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  396. DBERRORMSG("TItsVilgFrcsManager::LoadVilgShprInfo", String(exception.ClassName()), exception.Message, sQry);
  397. throw Exception(String(exception.ClassName()) + exception.Message);
  398. }
  399. }
  400. __finally
  401. {
  402. if (pADO)
  403. {
  404. pADO->Close();
  405. delete pADO;
  406. }
  407. FLists.UnLock();
  408. }
  409. return true;
  410. }
  411. //---------------------------------------------------------------------------
  412. String TItsVilgFrcsManager::GetGradeDesc(String &ACode)
  413. {
  414. ACode = ACode.Trim();
  415. if (ACode == "1") return ATMP_GOOD;
  416. if (ACode == "2") return ATMP_NORMAL;
  417. if (ACode == "3") return ATMP_BAD;
  418. if (ACode == "4") return ATM_VERY_BAD;
  419. ACode = "0";
  420. return ATMP_NONE;
  421. }
  422. //---------------------------------------------------------------------------
  423. bool TItsVilgFrcsManager::LoadAtmpPltnInfo(TADOConnection *ADbConn/*=NULL*/)
  424. {
  425. String sQry;
  426. TADOQuery *pADO = NULL;
  427. sQry = "SELECT * \r\n"
  428. " FROM TB_ATMP_PLTN_RT_PNST \r\n"
  429. " WHERE MSRM_DT >= TO_CHAR(SYSDATE-120/1440,'YYYYMMDDHH24MISS') \r\n";
  430. try
  431. {
  432. int nTemp;
  433. float fTemp;
  434. FAtmpLists.Lock();
  435. try
  436. {
  437. pADO = new TADOQuery(NULL);
  438. pADO->Close();
  439. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  440. pADO->SQL->Clear();
  441. pADO->SQL->Text = sQry;
  442. pADO->Prepared = true;
  443. pADO->Open();
  444. for( ; !pADO->Eof; pADO->Next())
  445. {
  446. String ATMP_STTN_NMBR = pADO->FieldByName("ATMP_STTN_NMBR")->AsString;
  447. TItsAtmpPltn *pObj = FAtmpLists.Find(ATMP_STTN_NMBR);
  448. if (!pObj) continue;
  449. pObj->pnst.MSRM_DT = pADO->FieldByName("MSRM_DT")->AsString; // N VARCHAR2(14) Y 측정 일시
  450. pObj->pnst.MSRM_SYST_NM = pADO->FieldByName("MSRM_SYST_NM")->AsString; // N VARCHAR2(10) Y 측정 시스템 명
  451. pObj->pnst.CO_VAL = pADO->FieldByName("CO_VAL")->AsString; // N VARCHAR2(10) Y CO 값
  452. pObj->pnst.SO2_VAL = pADO->FieldByName("SO2_VAL")->AsString; // N VARCHAR2(10) Y SO2 값
  453. pObj->pnst.NO2_VAL = pADO->FieldByName("NO2_VAL")->AsString; // N VARCHAR2(10) Y NO2 값
  454. pObj->pnst.O3_VAL = pADO->FieldByName("O3_VAL")->AsString; // N VARCHAR2(10) Y O3 값
  455. pObj->pnst.PM10_VAL = pADO->FieldByName("PM10_VAL")->AsString; // N VARCHAR2(10) Y PM10 값
  456. pObj->pnst.PM10_24HH_VAL = pADO->FieldByName("PM10_24HH_VAL")->AsString; // N VARCHAR2(10) Y PM10 24시간 값
  457. pObj->pnst.PM25_VAL = pADO->FieldByName("PM25_VAL")->AsString; // N VARCHAR2(10) Y PM25 값
  458. pObj->pnst.PM25_24HH_VAL = pADO->FieldByName("PM25_24HH_VAL")->AsString; // N VARCHAR2(10) Y PM25 24시간 값
  459. pObj->pnst.INTG_ATMP_VAL = pADO->FieldByName("INTG_ATMP_VAL")->AsString; // N VARCHAR2(10) Y 통합 대기 값
  460. pObj->pnst.INTG_ATMP_GRAD = pADO->FieldByName("INTG_ATMP_GRAD")->AsString; // N VARCHAR2(10) Y 통합 대기 등급
  461. pObj->pnst.SO2_GRAD = pADO->FieldByName("SO2_GRAD")->AsString; // N VARCHAR2(10) Y SO2 등급
  462. pObj->pnst.CO_GRAD = pADO->FieldByName("CO_GRAD")->AsString; // N VARCHAR2(10) Y CO 등급
  463. pObj->pnst.O3_GRAD = pADO->FieldByName("O3_GRAD")->AsString; // N VARCHAR2(10) Y O3 드급
  464. pObj->pnst.NO2_GRAD = pADO->FieldByName("NO2_GRAD")->AsString; // N VARCHAR2(10) Y NO2 등급
  465. pObj->pnst.PM10_24HH_GRAD = pADO->FieldByName("PM10_24HH_GRAD")->AsString; // N VARCHAR2(10) Y PM10 24시간 등급
  466. pObj->pnst.PM25_24HH_GRAD = pADO->FieldByName("PM25_24HH_GRAD")->AsString; // N VARCHAR2(10) Y PM25 24시간 등급
  467. pObj->pnst.PM10_1HH_GRAD = pADO->FieldByName("PM10_1HH_GRAD")->AsString; // N VARCHAR2(10) Y PM10 1시간 등급
  468. pObj->pnst.PM25_1HH_GRAD = pADO->FieldByName("PM25_1HH_GRAD")->AsString; // N VARCHAR2(10) Y PM25 1시간 등급
  469. pObj->pnst.UPDT_DT = pADO->FieldByName("UPDT_DT")->AsString; // N VARCHAR2(14) Y 갱신 일시
  470. pObj->pnst.INTG_ATMP_GRAD_NM = GetGradeDesc(pObj->pnst.INTG_ATMP_GRAD);
  471. pObj->pnst.SO2_GRAD_NM = GetGradeDesc(pObj->pnst.SO2_GRAD);
  472. pObj->pnst.CO_GRAD_NM = GetGradeDesc(pObj->pnst.CO_GRAD);
  473. pObj->pnst.O3_GRAD_NM = GetGradeDesc(pObj->pnst.O3_GRAD);
  474. pObj->pnst.NO2_GRAD_NM = GetGradeDesc(pObj->pnst.NO2_GRAD);
  475. pObj->pnst.PM10_24HH_GRAD_NM = GetGradeDesc(pObj->pnst.PM10_24HH_GRAD);
  476. pObj->pnst.PM25_24HH_GRAD_NM = GetGradeDesc(pObj->pnst.PM25_24HH_GRAD);
  477. pObj->pnst.PM10_1HH_GRAD_NM = GetGradeDesc(pObj->pnst.PM10_1HH_GRAD);
  478. pObj->pnst.PM25_1HH_GRAD_NM = GetGradeDesc(pObj->pnst.PM25_1HH_GRAD);
  479. }
  480. }
  481. catch(EDatabaseError &E)
  482. {
  483. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  484. DBERRORMSG("TItsVilgFrcsManager::LoadAtmpPltnInfo", String(E.ClassName()), E.Message, sQry);
  485. throw Exception(String(E.ClassName()) + E.Message);
  486. }
  487. catch(Exception &exception)
  488. {
  489. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  490. DBERRORMSG("TItsVilgFrcsManager::LoadAtmpPltnInfo", String(exception.ClassName()), exception.Message, sQry);
  491. throw Exception(String(exception.ClassName()) + exception.Message);
  492. }
  493. }
  494. __finally
  495. {
  496. if (pADO)
  497. {
  498. pADO->Close();
  499. delete pADO;
  500. }
  501. FAtmpLists.UnLock();
  502. }
  503. return true;
  504. }
  505. //---------------------------------------------------------------------------
  506. bool TItsVilgFrcsManager::LoadAtmpSprpInfo(TADOConnection *ADbConn/*=NULL*/)
  507. {
  508. String sQry;
  509. TADOQuery *pADO = NULL;
  510. sQry = "SELECT * \r\n"
  511. " FROM TB_ATMP_PLTN_SPRP_PNST A \r\n"
  512. " WHERE A.ANNC_DVSN = '1' \r\n"
  513. " AND A.ANNC_DT > TO_CHAR(SYSDATE-31/1440,'YYYYMMDDHH24') \r\n";
  514. try
  515. {
  516. FSprpLists.Lock();
  517. FSprpLists.RemoveAll();
  518. try
  519. {
  520. pADO = new TADOQuery(NULL);
  521. pADO->Close();
  522. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  523. pADO->SQL->Clear();
  524. pADO->SQL->Text = sQry;
  525. pADO->Prepared = true;
  526. pADO->Open();
  527. for( ; !pADO->Eof; pADO->Next())
  528. {
  529. TItsAtmpSprp *pObj = new TItsAtmpSprp();
  530. pObj->ATMP_PLTN_KIND = pADO->FieldByName("ATMP_PLTN_KIND")->AsString.Trim(); // N VARCHAR2(1) N 대기 오염 종류(1:미세먼지, 2:초미세먼지)
  531. pObj->ANNC_DT = pADO->FieldByName("ANNC_DT")->AsString.Trim(); // N VARCHAR2(14) Y Update 시간
  532. pObj->REGN_CD = pADO->FieldByName("REGN_CD")->AsString.Trim(); // N VARCHAR2(1) Y 2 권역 코드(1:북부권, 2:동부권, 3:중부권, 4:남부권) 남양주=동부권
  533. pObj->ANNC_YMD = pADO->FieldByName("ANNC_YMD")->AsString.Trim(); // N VARCHAR2(8) Y 발표 일자(4)
  534. pObj->ANNC_HH = pADO->FieldByName("ANNC_HH")->AsString.Trim(); // N VARCHAR2(2) Y 발표 시간(2)
  535. pObj->ANNC_GRAD = pADO->FieldByName("ANNC_GRAD")->AsString.Trim(); // N VARCHAR2(1) Y 발표 등급(1:주의보, 2:경보, 5:황사경보)
  536. pObj->ANNC_DVSN = pADO->FieldByName("ANNC_DVSN")->AsString.Trim(); // N VARCHAR2(1) Y 발표 구분(1:발령, 0:해제, 2:발령내역없음)
  537. FSprpLists.Push(pObj->ATMP_PLTN_KIND, pObj);
  538. }
  539. }
  540. catch(EDatabaseError &E)
  541. {
  542. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  543. DBERRORMSG("TItsVilgFrcsManager::LoadAtmpSprpInfo", String(E.ClassName()), E.Message, sQry);
  544. throw Exception(String(E.ClassName()) + E.Message);
  545. }
  546. catch(Exception &exception)
  547. {
  548. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  549. DBERRORMSG("TItsVilgFrcsManager::LoadAtmpSprpInfo", String(exception.ClassName()), exception.Message, sQry);
  550. throw Exception(String(exception.ClassName()) + exception.Message);
  551. }
  552. }
  553. __finally
  554. {
  555. if (pADO)
  556. {
  557. pADO->Close();
  558. delete pADO;
  559. }
  560. FSprpLists.UnLock();
  561. }
  562. return true;
  563. }
  564. //---------------------------------------------------------------------------