//--------------------------------------------------------------------------- #pragma hdrstop #include "CDSTrafficF.h" #include "ITSUtilF.h" #include "AppGlobalF.h" //--------------------------------------------------------------------------- #pragma package(smart_init) TItsTraffic::TItsTraffic(int ALEVL, String AID, void* AObj) { ID = AID; LEVL = ALEVL; Object = AObj; InitTraffic(); } //--------------------------------------------------------------------------- TItsTraffic::~TItsTraffic() { } //--------------------------------------------------------------------------- void TItsTraffic::InitTraffic() { CMTR_GRAD_CD = "LTC0"; PRCN_DT = "19000101000000"; SPED = 0; TRVL_HH = 0; DATA_NUM = 0; TRAF_GRAD = 0; } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- TItsTrafficManager *ItsTrafficManager = NULL; //--------------------------------------------------------------------------- /* * Link Traffic Manager */ TItsTrafficManager::TItsTrafficManager() { } //--------------------------------------------------------------------------- TItsTrafficManager::~TItsTrafficManager() { } //--------------------------------------------------------------------------- void TItsTrafficManager::InitTraffic() { try { FLists.Lock(); FOR_STL(TItsTraffic*, pObj, FLists) { pObj->InitTraffic(); } } __finally { FLists.UnLock(); } } //--------------------------------------------------------------------------- bool TItsTrafficManager::LoadFromDb(TADOConnection *ADbConn/*=NULL*/) { bool bResult = true; String sQry; TADOQuery *pADO = NULL; TItsTraffic *pTraf; InitTraffic(); #if 0 sQry = "SELECT 3 AS LEVL, A.ROAD_ID AS LINKID, NVL(B.SPED, 0) AS SPEED, NVL(B.CMTR_GRAD_CD, 'LTC0') CMTR_GRAD_CD, \r\n" " DECODE(B.CMTR_GRAD_CD, 'LTC1', '1', 'LTC2', '2', 'LTC3', '3', '0') TRF_GRADE, \r\n" " NVL(B.PRCN_DT, '19000101000000') AS REGDATE, \r\n" " NVL(B.DATA_NUM, 0) AS DATACNT, \r\n" " NVL(B.TRVL_HH, 0) AS TRVTM \r\n" " FROM TB_ROAD A, \r\n" " (SELECT * \r\n" " FROM TB_ROAD_TRAF \r\n" " WHERE PRCN_DT > TO_CHAR(SYSDATE - 8 / 1440, 'YYYYMMDDHH24MISS') \r\n" " ) B \r\n" " WHERE A.ROAD_ID = B.ROAD_ID(+) \r\n" "UNION ALL \r\n" "SELECT 2 AS LEVL, A.IFSC_ID AS LINKID, NVL(B.SPED, 0) AS SPEED, NVL(B.CMTR_GRAD_CD, 'LTC0') CMTR_GRAD_CD, \r\n" " DECODE(B.CMTR_GRAD_CD, 'LTC1', '1', 'LTC2', '2', 'LTC3', '3', '0') TRF_GRADE, \r\n" " NVL(B.PRCN_DT, '19000101000000') AS REGDATE, \r\n" " NVL(B.DATA_NUM, 0) AS DATACNT, \r\n" " NVL(B.TRVL_HH, 0) AS TRVTM \r\n" " FROM TB_IFSC A, \r\n" " (SELECT * \r\n" " FROM TB_IFSC_TRAF \r\n" " WHERE PRCN_DT > TO_CHAR(SYSDATE - 8 / 1440, 'YYYYMMDDHH24MISS') \r\n" " ) B \r\n" " WHERE A.IFSC_ID = B.IFSC_ID(+) \r\n" "UNION ALL \r\n" "SELECT 1 AS LEVL, A.LINK_ID AS LINKID, NVL(B.SPED, 0) AS SPEED, NVL(B.CMTR_GRAD_CD, 'LTC0') CMTR_GRAD_CD, \r\n" " DECODE(B.CMTR_GRAD_CD, 'LTC1', '1', 'LTC2', '2', 'LTC3', '3', '0') TRF_GRADE, \r\n" " NVL(B.PRCN_DT, '19000101000000') AS REGDATE, \r\n" " NVL(B.DATA_NUM, 0) AS DATACNT, \r\n" " NVL(B.TRVL_HH, 0) AS TRVTM \r\n" " FROM TB_LINK A, \r\n" " (SELECT * \r\n" " FROM TB_LINK_TRAF \r\n" " WHERE PRCN_DT > TO_CHAR(SYSDATE - 8 / 1440, 'YYYYMMDDHH24MISS') \r\n" " ) B \r\n" " WHERE A.LINK_ID = B.LINK_ID(+) \r\n"; #else sQry = "SELECT 1 AS LEVL, A.LINK_ID AS LINKID, PRCN_DT, TFVL, SPED, OCPY_RATE, TRVL_HH, CMTR_GRAD_CD, PTRN_SPED, DATA_NUM, \r\n" " (CASE WHEN PRCN_DT <= TO_CHAR(SYSDATE - 10/1440, 'YYYYMMDDHH24MISS') \r\n" " THEN 'Y' ELSE 'N' END) AS MISSING, \r\n" " (CASE WHEN PRCN_DT >= TO_CHAR(SYSDATE - 15/1440, 'YYYYMMDDHH24MISS') \r\n" " THEN 'Y' ELSE 'N' END) AS LASTANS, \r\n" " (SELECT MAX(PRCN_DT) FROM TB_LINK_TRAF) MPRCN_DT, \r\n" " MISS_YN, PRCN_SPED, SMTH_SPED, ADJS_SPED, PRCN_SORC, ADJS_SORC \r\n" " FROM TB_LINK_TRAF A, TB_LINK B \r\n" " WHERE A.LINK_ID = B.LINK_ID \r\n" "UNION ALL \r\n" "SELECT 2 AS LEVL, A.IFSC_ID AS LINKID, PRCN_DT, TFVL, SPED, OCPY_RATE, TRVL_HH, CMTR_GRAD_CD, PTRN_SPED, DATA_NUM, \r\n" " (CASE WHEN PRCN_DT <= TO_CHAR(SYSDATE - 10/1440, 'YYYYMMDDHH24MISS') \r\n" " THEN 'Y' ELSE 'N' END) AS MISSING, \r\n" " (CASE WHEN PRCN_DT >= TO_CHAR(SYSDATE - 15/1440, 'YYYYMMDDHH24MISS') \r\n" " THEN 'Y' ELSE 'N' END) AS LASTANS, \r\n" " (SELECT MAX(PRCN_DT) FROM TB_LINK_TRAF) MPRCN_DT, \r\n" " 'N' AS MISS_YN, SPED AS PRCN_SPED, SPED AS SMTH_SPED, SPED AS ADJS_SPED, '' AS PRCN_SORC, 'MCS0' AS ADJS_SORC \r\n" " FROM TB_IFSC_TRAF A, TB_IFSC B \r\n" " WHERE A.IFSC_ID = B.IFSC_ID \r\n" "UNION ALL \r\n" "SELECT 3 AS LEVL, A.ROAD_ID AS LINKID, PRCN_DT, TFVL, SPED, OCPY_RATE, TRVL_HH, CMTR_GRAD_CD, PTRN_SPED, DATA_NUM, \r\n" " (CASE WHEN PRCN_DT <= TO_CHAR(SYSDATE - 10/1440, 'YYYYMMDDHH24MISS') \r\n" " THEN 'Y' ELSE 'N' END) AS MISSING, \r\n" " (CASE WHEN PRCN_DT >= TO_CHAR(SYSDATE - 15/1440, 'YYYYMMDDHH24MISS') \r\n" " THEN 'Y' ELSE 'N' END) AS LASTANS, \r\n" " (SELECT MAX(PRCN_DT) FROM TB_ROAD_TRAF) MPRCN_DT, \r\n" " 'N' AS MISS_YN, SPED AS PRCN_SPED, SPED AS SMTH_SPED, SPED AS ADJS_SPED, '' AS PRCN_SORC, 'MCS0' AS ADJS_SORC \r\n" " FROM TB_ROAD_TRAF A, TB_ROAD B \r\n" " WHERE A.ROAD_ID = B.ROAD_ID \r\n"; #endif try { FLists.Lock(); try { pADO = new TADOQuery(NULL); pADO->Close(); pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection(); pADO->SQL->Clear(); pADO->SQL->Text = sQry; pADO->Open(); for( ; !pADO->Eof; pADO->Next()) { String LINKID = pADO->FieldByName("LINKID")->AsString; pTraf = FLists.Find(LINKID); if (!pTraf) continue; pTraf->PRCN_DT = pADO->FieldByName("PRCN_DT")->AsString; pTraf->TFVL = pADO->FieldByName("TFVL")->AsInteger; pTraf->SPED = pADO->FieldByName("SPED")->AsInteger; pTraf->OCPY_RATE = pADO->FieldByName("OCPY_RATE")->AsFloat; pTraf->TRVL_HH = pADO->FieldByName("TRVL_HH")->AsInteger; pTraf->CMTR_GRAD_CD = pADO->FieldByName("CMTR_GRAD_CD")->AsString; pTraf->MISSING = pADO->FieldByName("MISSING")->AsString; // °áÃø¿©ºÎ pTraf->LASTANS = pADO->FieldByName("LASTANS")->AsString; // ÃÖ±Ù 15ºÐ À̳» °¡°ø pTraf->MPRCN_DT = pADO->FieldByName("MPRCN_DT")->AsString; // °¡°ø½Ã°¢(ÃÖ½Å) pTraf->DATA_NUM = pADO->FieldByName("DATA_NUM")->AsInteger; pTraf->PTRN_SPED = pADO->FieldByName("PTRN_SPED")->AsInteger; if (pTraf->CMTR_GRAD_CD == "LTC1") pTraf->TRAF_GRAD = 1; else if (pTraf->CMTR_GRAD_CD == "LTC2") pTraf->TRAF_GRAD = 2; else if (pTraf->CMTR_GRAD_CD == "LTC3") pTraf->TRAF_GRAD = 3; else pTraf->TRAF_GRAD = 0; pTraf->MISS_YN = pADO->FieldByName("MISS_YN")->AsString; // '°áÃø ¿©ºÎ'; pTraf->PRCN_SPED = pADO->FieldByName("PRCN_SPED")->AsInteger; // '°¡°ø ¼Óµµ'; pTraf->SMTH_SPED = pADO->FieldByName("SMTH_SPED")->AsInteger; // 'ÆòȰȭ ¼Óµµ'; pTraf->ADJS_SPED = pADO->FieldByName("ADJS_SPED")->AsInteger; // 'º¸Á¤ ¼Óµµ'; pTraf->PRCN_SORC = pADO->FieldByName("PRCN_SORC")->AsString; // '°¡°ø ¼Ò½º'; pTraf->ADJS_SORC = pADO->FieldByName("ADJS_SORC")->AsString; // 'º¸Á¤ ¼Ò½º'; } } catch(EDatabaseError &E) { ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2); DBERRORLOG("TItsTrafficManager::LoadFromDb", String(E.ClassName()), E.Message, sQry); return false; throw Exception(String(E.ClassName()) + E.Message); } catch(Exception &exception) { ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2); DBERRORLOG("TItsTrafficManager::LoadFromDb", String(exception.ClassName()), exception.Message, sQry); return false; throw Exception(String(exception.ClassName()) + exception.Message); } } __finally { if (pADO) { pADO->Close(); delete pADO; } FLists.UnLock(); } return bResult; } //---------------------------------------------------------------------------