CDSParkF.cpp 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. //---------------------------------------------------------------------------
  2. #pragma hdrstop
  3. #include "CDSParkF.h"
  4. #include "CDSCtlrF.h"
  5. #include "VmsUtilsF.h"
  6. #include "VMSCommLibF.h"
  7. //---------------------------------------------------------------------------
  8. #pragma package(smart_init)
  9. //---------------------------------------------------------------------------
  10. //---------------------------------------------------------------------------
  11. TCDSPark::TCDSPark()
  12. {
  13. REG_PRK_CMPRT_CO = 0;
  14. RUN_PRK_CMPRT_CO = 0;
  15. PARKING_CGS_STTUS = 9;
  16. REMNDR_PRK_CMPRT_CO = 0;
  17. Init();
  18. }
  19. //---------------------------------------------------------------------------
  20. TCDSPark::~TCDSPark()
  21. {
  22. }
  23. //---------------------------------------------------------------------------
  24. void TCDSPark::Init()
  25. {
  26. SUCCESS = false;
  27. CMNC_STTS_CD = "CMS1";
  28. PARKING_CGS_STTUS_DESC = "-";
  29. PARKING_CGS_STTUS = 9;
  30. REMNDR_PRK_CMPRT_CO = 0;
  31. }
  32. //---------------------------------------------------------------------------
  33. void TCDSPark::CalcCgsSttus()
  34. {
  35. FULL = false;
  36. if (!SUCCESS) {
  37. PARKING_CGS_STTUS_DESC = "점검중";
  38. PARKING_CGS_STTUS = 9;
  39. return;
  40. }
  41. if (REMNDR_PRK_CMPRT_CO <= 0) {
  42. FULL = true;
  43. }
  44. // 주차장 상태 코드 (0 : 여유 (점유 50% 미만), 1 : 보통 (점유 70% 미만), 2 : 혼잡 (점유 90% 미만), 3 : 만차 (점유 90% 초과))
  45. switch(PARKING_CGS_STTUS)
  46. {
  47. case 0: PARKING_CGS_STTUS_DESC = "여유"; break;
  48. case 1: PARKING_CGS_STTUS_DESC = "보통"; break;
  49. case 2: PARKING_CGS_STTUS_DESC = "혼잡"; break;
  50. case 3: PARKING_CGS_STTUS_DESC = "만차"; break;
  51. default: PARKING_CGS_STTUS_DESC = "점검중";
  52. SUCCESS = false;
  53. break;
  54. }
  55. }
  56. //---------------------------------------------------------------------------
  57. int TCDSPark::GetGradeColor()
  58. {
  59. if (!SUCCESS) {
  60. return 3;//황색(Yellow)
  61. }
  62. switch(PARKING_CGS_STTUS)
  63. {
  64. case 0: return 2;//밝은녹색(Lime)
  65. case 1: return 2;//밝은녹색(Lime)
  66. case 2: return 3;//황색(Yellow)
  67. case 3: return 1;//적색(Red)
  68. default: return grade_delay;;
  69. }
  70. }
  71. //---------------------------------------------------------------------------
  72. AnsiString TCDSPark::GetParkName() {
  73. return VMS_DSPL_NM;
  74. }
  75. //---------------------------------------------------------------------------
  76. AnsiString TCDSPark::GetCountText(AnsiString ATxt, int ACount) {
  77. if (!SUCCESS) {
  78. return " ";
  79. }
  80. bool isSpace = false;
  81. String sType = "";
  82. if (ATxt.Pos(" ")) {
  83. isSpace = true;
  84. }
  85. if (ATxt.Pos("대")) {
  86. sType = "대";
  87. }
  88. if (ATxt.Pos("면")) {
  89. sType = "면";
  90. }
  91. if (FULL) {
  92. return AnsiString("만차");
  93. }
  94. if (sType != "") {
  95. if (isSpace) {
  96. return AnsiString(ACount) + " " + sType;
  97. }
  98. return AnsiString(ACount) + sType;
  99. }
  100. return AnsiString(ACount);
  101. }
  102. //---------------------------------------------------------------------------
  103. AnsiString TCDSPark::GetRemainCo(AnsiString ATxt) {
  104. return GetCountText(ATxt, REMNDR_PRK_CMPRT_CO);
  105. }
  106. //---------------------------------------------------------------------------
  107. AnsiString TCDSPark::GetTotalCo(AnsiString ATxt) {
  108. return GetCountText(ATxt, REG_PRK_CMPRT_CO);
  109. }
  110. //---------------------------------------------------------------------------
  111. AnsiString TCDSPark::GetCgsSttus() {
  112. return PARKING_CGS_STTUS_DESC;
  113. }
  114. //---------------------------------------------------------------------------
  115. //---------------------------------------------------------------------------
  116. TCDSParkManager *CDSParkManager = NULL;
  117. //---------------------------------------------------------------------------
  118. TCDSParkManager::TCDSParkManager()
  119. {
  120. }
  121. //---------------------------------------------------------------------------
  122. TCDSParkManager::~TCDSParkManager()
  123. {
  124. FLists.RemoveAll();
  125. }
  126. //---------------------------------------------------------------------------
  127. int TCDSParkManager::LoadFromDb(TADOConnection *ADbConn)
  128. {
  129. String sQry;
  130. TADOQuery *pADO = NULL;
  131. int nSelCnt = 0;
  132. DDBSTART;
  133. #if 0
  134. sQry = "SELECT A.PRK_PLCE_NMBR, A.PRK_PLCE_MANAGE_NO, \r\n"
  135. " A.PRK_PLCE_NM, A.VMS_DSPL_NM, \r\n"
  136. " NVL(B.CMNC_STTS_CD, 'CMS1') AS CMNC_STTS_CD, \r\n"
  137. " A.PRK_CMPRT_CO AS REG_PRK_CMPRT_CO, \r\n"
  138. " NVL(C.PRK_CMPRT_CO, A.PRK_CMPRT_CO) AS RUN_PRK_CMPRT_CO, \r\n"
  139. " NVL(C.PARKING_CGS_STTUS, 9) AS PARKING_CGS_STTUS, \r\n"
  140. " NVL(C.REMNDR_PRK_CMPRT_CO, 0) AS REMNDR_PRK_CMPRT_CO \r\n"
  141. " FROM TB_PRK_PLCE A, TB_PRK_PLCE_STTS B, TB_PRK_PLCE_RT C \r\n"
  142. " WHERE A.DEL_YN = 'N' \r\n"
  143. " AND A.PIS_TYPE != 'N' \r\n"
  144. " AND A.PRK_PLCE_NMBR = B.PRK_PLCE_NMBR(+) \r\n"
  145. " AND A.PRK_PLCE_NMBR = C.PRK_PLCE_NMBR(+) \r\n";
  146. #else
  147. sQry = "SELECT A.PRK_PLCE_NMBR, A.PRK_PLCE_MANAGE_NO, \r\n"
  148. " A.PRK_PLCE_NM, A.VMS_DSPL_NM, \r\n"
  149. " NVL(C.CMNC_STTS_CD, 'CMS1') AS CMNC_STTS_CD, \r\n"
  150. " A.PRK_CMPRT_CO AS REG_PRK_CMPRT_CO, \r\n"
  151. " NVL(C.PRK_CMPRT_CO, A.PRK_CMPRT_CO) AS RUN_PRK_CMPRT_CO, \r\n"
  152. " NVL(C.PARKING_CGS_STTUS, 9) AS PARKING_CGS_STTUS, \r\n"
  153. " NVL(C.REMNDR_PRK_CMPRT_CO, 0) AS REMNDR_PRK_CMPRT_CO \r\n"
  154. " FROM TB_PRK_PLCE A, \r\n"
  155. " (SELECT PRK_PLCE_NMBR, \r\n"
  156. " DATA_COLCT_TIME, \r\n"
  157. " 'CMS' || STTS_CD AS CMNC_STTS_CD, \r\n"
  158. " fnParkingCgsSttus(PRK_CMPRT_CO, PRK_PARKING_CO) AS PARKING_CGS_STTUS, \r\n"
  159. " PRK_CMPRT_CO, \r\n"
  160. " REMNDR_PRK_CMPRT_CO, \r\n"
  161. " PRK_PARKING_CO \r\n"
  162. " FROM TB_PRK_PLCE_RT \r\n"
  163. " WHERE DATA_COLCT_TIME >= TO_CHAR(SYSDATE-10/1440, 'YYYYMMDDHH24MISS')) C \r\n"
  164. " WHERE A.DEL_YN = 'N' \r\n"
  165. " AND A.PIS_TYPE != 'N' \r\n"
  166. " AND A.PRK_PLCE_NMBR = C.PRK_PLCE_NMBR(+) \r\n";
  167. #endif
  168. try
  169. {
  170. FOR_STL(TCDSPark*, pTmp, FLists)
  171. {
  172. pTmp->Init();
  173. }
  174. TCDSPark *pObj;
  175. try
  176. {
  177. pADO = new TADOQuery(NULL);
  178. pADO->Connection = ADbConn;
  179. SQLText(pADO, sQry, true);
  180. SQLOpen(pADO);
  181. for( ; !pADO->Eof; pADO->Next())
  182. {
  183. AnsiString PRK_PLCE_NMBR = pADO->FieldByName("PRK_PLCE_NMBR")->AsString;
  184. pObj = FLists.Find(PRK_PLCE_NMBR);
  185. if (!pObj)
  186. {
  187. pObj = new TCDSPark();
  188. pObj->PRK_PLCE_NMBR = PRK_PLCE_NMBR;
  189. pObj->PRK_PLCE_MANAGE_NO = pADO->FieldByName("PRK_PLCE_MANAGE_NO")->AsString;
  190. FLists.Push(PRK_PLCE_NMBR, pObj);
  191. }
  192. pObj->PRK_PLCE_NM = pADO->FieldByName("PRK_PLCE_NM")->AsString;
  193. pObj->VMS_DSPL_NM = pADO->FieldByName("VMS_DSPL_NM")->AsString;
  194. pObj->CMNC_STTS_CD = pADO->FieldByName("CMNC_STTS_CD")->AsString;
  195. pObj->REG_PRK_CMPRT_CO = pADO->FieldByName("REG_PRK_CMPRT_CO")->AsInteger; // 주차계획대수
  196. pObj->RUN_PRK_CMPRT_CO = pADO->FieldByName("RUN_PRK_CMPRT_CO")->AsInteger; // 실시간 주차계획대수
  197. pObj->PARKING_CGS_STTUS = pADO->FieldByName("PARKING_CGS_STTUS")->AsInteger; // 현재 주차상황
  198. pObj->REMNDR_PRK_CMPRT_CO = pADO->FieldByName("REMNDR_PRK_CMPRT_CO")->AsInteger; // 현재 주차잔여대수
  199. if (pObj->REMNDR_PRK_CMPRT_CO > pObj->REG_PRK_CMPRT_CO) {
  200. // 현재 주차잔여대수가 주차계획대수 보다 크면 주차계획대수로 설정
  201. pObj->REMNDR_PRK_CMPRT_CO = pObj->REG_PRK_CMPRT_CO;
  202. }
  203. if (pObj->REMNDR_PRK_CMPRT_CO < 0) {
  204. pObj->REMNDR_PRK_CMPRT_CO = 0; // 현재 주차잔여대수가 0 이하이면 0으로 설정
  205. }
  206. if (pObj->VMS_DSPL_NM == "") {
  207. pObj->VMS_DSPL_NM = pObj->PRK_PLCE_NM;
  208. }
  209. if (pObj->CMNC_STTS_CD == "CMS0") {
  210. pObj->SUCCESS = true;
  211. }
  212. pObj->CalcCgsSttus();
  213. nSelCnt++;
  214. }
  215. }
  216. catch(EDatabaseError &E)
  217. {
  218. DBERROR(String(E.ClassName()), E.Message, sQry);
  219. return -1;
  220. }
  221. catch(Exception &e)
  222. {
  223. DBERROR(String(e.ClassName()), e.Message, sQry);
  224. return -1;
  225. }
  226. }
  227. __finally
  228. {
  229. SQLFree(pADO);
  230. }
  231. IDBSTOP(nSelCnt);
  232. return nSelCnt;
  233. }
  234. //---------------------------------------------------------------------------