From 0ed61a327b9d523cb85c70766f242d61a3dd2170 Mon Sep 17 00:00:00 2001 From: MonHun Date: Sun, 14 Jul 2024 12:36:14 +0900 Subject: [PATCH] win 0712 --- .../component/AnalysisStandStatus.java | 172 ++++++++--------- .../component/AnalysisVccsAiMetaStatus.java | 176 ++++++++++++++++++ .../standstatus/config/QueueManageBean.java | 6 +- .../controller/MainController.java | 10 +- .../kafka/consummer/KafkaMsgVccsListener.java | 70 +++++++ ...stener.java => KafkaMsgVideoListener.java} | 4 +- .../producer/KafkaProduceStandSttus.java | 2 +- .../kafka/vo/KafkaRequestVoiceVo.java | 30 +++ .../kr/gmtc/gw/standstatus/vo/VoiceVO.java | 52 ++++++ src/main/resources/application.yml | 1 + src/main/resources/mapper/db2/ic_sql.xml | 8 +- 11 files changed, 427 insertions(+), 104 deletions(-) create mode 100644 src/main/java/kr/gmtc/gw/standstatus/component/AnalysisVccsAiMetaStatus.java create mode 100644 src/main/java/kr/gmtc/gw/standstatus/kafka/consummer/KafkaMsgVccsListener.java rename src/main/java/kr/gmtc/gw/standstatus/kafka/consummer/{KafkaMessageListener.java => KafkaMsgVideoListener.java} (92%) create mode 100644 src/main/java/kr/gmtc/gw/standstatus/kafka/vo/KafkaRequestVoiceVo.java create mode 100644 src/main/java/kr/gmtc/gw/standstatus/vo/VoiceVO.java diff --git a/src/main/java/kr/gmtc/gw/standstatus/component/AnalysisStandStatus.java b/src/main/java/kr/gmtc/gw/standstatus/component/AnalysisStandStatus.java index 3409446..c3fc8cd 100644 --- a/src/main/java/kr/gmtc/gw/standstatus/component/AnalysisStandStatus.java +++ b/src/main/java/kr/gmtc/gw/standstatus/component/AnalysisStandStatus.java @@ -4,6 +4,7 @@ import java.time.Duration; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; @@ -26,9 +27,8 @@ public class AnalysisStandStatus { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - private CustomThread cThread_Analyze_VideoMeta; - private CustomThread cThread_Analyze_StandSttus; - private CustomThread cThread_Maping_CctvIDStandNo; + private List customThreads; + private CustomThread chkThreadStatus; private LinkedHashMap map_stand_sttus; @@ -58,10 +58,13 @@ public class AnalysisStandStatus { map_stand_sttus = new LinkedHashMap(); try { + customThreads = new ArrayList(); + customThreads.add(new CustomThread("mapingCctvStand", this, CustomThread.NO_SLEEP, this::init_map_stand_sttus, null, false)); + customThreads.add(new CustomThread("makeMapStandSttus", this, CustomThread.NO_SLEEP, this::analysis_Ai_Video_Meta, null, false)); + customThreads.add(new CustomThread("analysisStandSttus", this, CustomThread.NO_SLEEP, this::analysis_Stand_Sttus, null, false)); - cThread_Maping_CctvIDStandNo = new CustomThread("mapingCctvStand", this, CustomThread.NO_SLEEP, this::init_map_stand_sttus, null, false); - cThread_Analyze_VideoMeta = new CustomThread("makeMapStandSttus", this, CustomThread.NO_SLEEP, this::analysis_Ai_Video_Meta, null, false); - cThread_Analyze_StandSttus = new CustomThread("analysisStandSttus", this, CustomThread.NO_SLEEP, this::analysis_Stand_Sttus, null, false); + // 이중화 체크 및 업무스래드 체크 + chkThreadStatus = new CustomThread("chkThreadStatus", this, 3000, this::chkThreadStatus, null, false); } catch (Exception e) { logger.error("Start Fail: "+ e.toString()); @@ -71,15 +74,20 @@ public class AnalysisStandStatus { public void start() { try { - cThread_Maping_CctvIDStandNo.start(Thread.MAX_PRIORITY); - cThread_Analyze_VideoMeta.start(Thread.NORM_PRIORITY); - cThread_Analyze_StandSttus.start(Thread.MIN_PRIORITY); + for(CustomThread ct : customThreads ){ + ct.start(); + } + + chkThreadStatus.start(); } catch (Exception e) { logger.error("Start Fail: "+ e); } } + private void chkThreadStatus() throws InterruptedException{ + + } ////////////////////////////////////////////////////////////////////////////////////////////////////////////// private void init_map_stand_sttus() throws InterruptedException{ @@ -102,9 +110,9 @@ public class AnalysisStandStatus { } if(map_stand_sttus.size() != 0){ - logger.info("Stand Sttus HashMap 생성."); + logger.info("주기장(CCTV) 리스트 조회."); }else{ - logger.info("Stand Sttus HashMap 생성 실패."); + logger.info("주기장(CCTV) 리스트 조회 실패."); } Thread.sleep(1000 * (60 * 10)); // 10분 @@ -119,7 +127,7 @@ public class AnalysisStandStatus { */ private void analysis_Ai_Video_Meta() throws InterruptedException{ - if(dto.getDb_CctvList().size() == 0 || qRecvVideo.size() == 0 || map_stand_sttus.size() == 0) { + if(qRecvVideo.size() == 0 || map_stand_sttus.size() == 0) { Thread.sleep(3000); return ; @@ -128,21 +136,12 @@ public class AnalysisStandStatus { AiAnalyzeStandSttus aiStandSttus; int queSize = qRecvVideo.size(); - int imapCnt = 0; - for(int idx = 0; idx lcDataList = qRecvVideo.take(); for( AiVideoMetaData lcData : lcDataList ){ - // if(lcData.getCc_id().equals("123")){ - // String adsf = "adf"; - // } - imapCnt++; - aiStandSttus = new AiAnalyzeStandSttus(); aiStandSttus.setArcft_stand(lcData.getArcrft_yn()); @@ -155,10 +154,8 @@ public class AnalysisStandStatus { } - logger.info("AI메타정보 주기장 매핑 :" + imapCnt + " 건"); - - // 주기장 항공기 상태 초기화 - //map_stand_sttus.get(lcData.getCc_id()).setAircraft_sttus_ty("0"); + logger.info("AI메타정보 주기장 매핑 :" + lcDataList.size() + " 건"); + } @@ -186,9 +183,6 @@ public class AnalysisStandStatus { // 서비스큐 데이터 적재 store_Service_Data(); - - - Thread.sleep(300); } @@ -212,9 +206,6 @@ public class AnalysisStandStatus { sStandNo = _mfltarr.getItemString("STAND_NO"); - // logger.info("fltarr : " + fltarr.toString()); - //logger.info("ARR-Stand : " + sStandNo); - sCctv = findCctvID(sStandNo); if(sCctv.equals("")){ @@ -227,7 +218,6 @@ public class AnalysisStandStatus { * - 1순위 : 접근관제 인지 시각이 있음 * - 2순위 : 활주로 도착시각이 있음 */ - if( !_mfltarr.getItemString("APP_IN_DT").equals("") || !_mfltarr.getItemString("ACTL_ARR_DT").equals("")){ sSttusCD = "1"; @@ -242,7 +232,6 @@ public class AnalysisStandStatus { map_stand_sttus.get(sCctv).setSchdul_id(_mfltarr.getItemString("SCHDUL_ID")); map_stand_sttus.get(sCctv).setAc_reg_no(_mfltarr.getItemString("AC_REG_NO")); - // logger.info("ARR --- StandNo:"+sStandNo + "|" + "cctv:" +sCctv + "|" + "CallSign:"+fltarr.get("CLSGN") + " ["+fltarr.toString()+"]"); } // if(idx > 0 ) logger.info("도착 주기장 :" + (idx +1) + "건 갱신" ); @@ -257,7 +246,6 @@ public class AnalysisStandStatus { String sCctv, sStandNo, sSttusCD; int idx; - int iDepStandTm = 15; List list_Dep = dto.getDb_FltDep(); @@ -267,35 +255,6 @@ public class AnalysisStandStatus { DataLoadHashMap _mfltdep = list_Dep.get(idx); - /* [2]PDC발부 전 - * - 예상 주기장 출발 시각 15분 이내. - * - 실제 주기장 출발 시간이 없음. - * - PDC발부 시각이 없음. - */ - - /* [3]PDC발부 - * - 예상 주기장 출발 시각 15분 이내. - * - 실제 주기장 출발 시간이 없음. - * - PDC발부 시각이 있음. - */ - - /* [4]PUSH-BACK 대기 - * - 예상 주기장 출발 시각 15분 이내. - * - 실제 주기장 출발 시간이 없음. - * - PDC발부 시각이 있음. - * - 출발 승인 대기 시각이 있음(ACTL_CLR_WAIT_DT) - */ - - /* [5]PUSH-BACK 진행 - * - 실제 주기장 출발 시간이 있음 - * - A-CDM 상태코드 'TAX' 미수신 - */ - - /* [9]PUSH-BACK 종료 - * - 실제 주기장 출발 시간이 있음 - * - A-CDM 상태코드 'TAX'가 수신됨 - */ - sSttusCD = "0"; sStandNo = _mfltdep.getItemString("STAND_NO"); @@ -307,49 +266,76 @@ public class AnalysisStandStatus { continue; } - // if(sCctv.equals("107")){ - // String asdf = "asdfasdf"; - // } + // String sRecvTime = _mfltdep.getItemString("EXP_STAND_OFF_DT"); + // sRecvTime = sRecvTime.concat("00.000"); + // dt = LocalDateTime.parse(sRecvTime, df_Pattern); - String sRecvTime = _mfltdep.getItemString("EXP_STAND_OFF_DT"); - sRecvTime = sRecvTime.concat("00.000"); - dt = LocalDateTime.parse(sRecvTime, df_Pattern); - - Duration diff = Duration.between(LocalDateTime.now(), dt); - - String aiSttus; + // Duration diff = Duration.between(LocalDateTime.now(), dt); sSttusCD = "0"; - aiSttus = map_stand_sttus.get(sCctv).getAiStandSttus().getArcft_stand(); + // String aiSttus = map_stand_sttus.get(sCctv).getAiStandSttus().getArcft_stand(); // 예상 주기장 출발 시각 15분 이내, 실제 주기장 출발 시간이 없음. // if( aiSttus.equals("Y")){ //AI 상황분석 검증 완료전까지 주석 - if(_mfltdep.getItemString("ACTL_STAND_OFF_DT").equals("")){ + /* [2]PDC발부 전 + * - 실제 주기장 출발 시간이 없음. + * - PDC발부 시각이 없음. + */ + /* [3]PDC발부 + * - 실제 주기장 출발 시간이 없음. + * - PDC발부 시각이 있음. + */ + /* [4]PUSH-BACK 대기 + * - 실제 주기장 출발 시간이 없음. + * - 출발 승인 대기 시각이 있음(ACTL_CLR_WAIT_DT) + */ + if(_mfltdep.getItemString("ACTL_STAND_OFF_DT").equals("")){ - if(_mfltdep.getItemString("PDC_ISUE_TM").equals("")){ - sSttusCD = "2"; //[2]PDC발부 전 - }else{ - sSttusCD = "3"; //[3]PDC발부 - } - - if( !_mfltdep.getItemString("ACTL_CLR_WAIT_DT").equals("")){ - sSttusCD = "4"; //[4]PUSH-BACK 대기 - } + if(_mfltdep.getItemString("PDC_ISUE_TM").equals("")){ + sSttusCD = "2"; //[2]PDC발부 전 + }else{ + sSttusCD = "3"; //[3]PDC발부 } - if( !_mfltdep.getItemString("ACTL_STAND_OFF_DT").equals("")){ + if( !_mfltdep.getItemString("ACTL_CLR_WAIT_DT").equals("")){ + sSttusCD = "4"; //[4]PUSH-BACK 대기 + } + } - sSttusCD = "5"; //[5]PUSH-BACK 진행 - if(_mfltdep.getItemString("TAX_YN").equals("Y")){ - sSttusCD = "6"; //[9]PUSH-BACK 종료 - } + /* [5]PUSH-BACK 진행 + * - 실제 주기장 출발 시간이 있음 + * - A-CDM 상태코드 'TAX' 미수신 + */ + /* [9]PUSH-BACK 종료 + * - 실제 주기장 출발 시간이 있음 + * - A-CDM 상태코드 'TAX'가 수신됨 -> VCCS 푸쉬백 종료 또는 Tax 요청 이 수신됨. + + */ + if( !_mfltdep.getItemString("ACTL_STAND_OFF_DT").equals("")){ + + sSttusCD = "5"; //[5]PUSH-BACK 진행 + + if(_mfltdep.getItemString("TAX_YN").equals("Y")){ + sSttusCD = "6"; //[9]PUSH-BACK 종료 + }else{ + // AI 음성 메타 분석정보로 PUSH-BACK 종료 판단 + String strFltNum = _mfltdep.getItemString("flt_number"); + + // AnalysisVccsAiMetaStatus anaVccs = new + + // List> + + + + + + } - // }else{ - // sSttusCD = "0"; - // } + + } map_stand_sttus.get(sCctv).setClsgn(_mfltdep.getItemString("CLSGN")); map_stand_sttus.get(sCctv).setAircraft_sttus_ty(sSttusCD); diff --git a/src/main/java/kr/gmtc/gw/standstatus/component/AnalysisVccsAiMetaStatus.java b/src/main/java/kr/gmtc/gw/standstatus/component/AnalysisVccsAiMetaStatus.java new file mode 100644 index 0000000..086cdf0 --- /dev/null +++ b/src/main/java/kr/gmtc/gw/standstatus/component/AnalysisVccsAiMetaStatus.java @@ -0,0 +1,176 @@ +package kr.gmtc.gw.standstatus.component; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.LinkedBlockingQueue; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import kr.gmtc.gw.comp.rest.vo.RestServiceData; +import kr.gmtc.gw.comp.thread.CustomThread; +import kr.gmtc.gw.standstatus.config.QueueManageBean; +import kr.gmtc.gw.standstatus.database.dto.DataLoadDTO; +import kr.gmtc.gw.standstatus.database.dto.DataLoadHashMap; +import kr.gmtc.gw.standstatus.kafka.vo.AiVideoMetaData; +import kr.gmtc.gw.standstatus.kafka.vo.KafkaRequestVoiceVo; +import kr.gmtc.gw.standstatus.vo.AiAnalyzeStandSttus; +import kr.gmtc.gw.standstatus.vo.VoiceVO; +import kr.gmtc.gw.standstatus.vo.VoiceVO.VoiceKeyword; + +public class AnalysisVccsAiMetaStatus{ + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + private List customThreads; + private CustomThread chkThreadStatus; + + DateTimeFormatter df_Pattern = DateTimeFormatter.ofPattern("yyyyMMddHHmmss.SSS"); + + LocalDateTime dt; + + private DataLoadDTO dto; + private QueueManageBean queMB; + + private LinkedBlockingQueue> qRecvVccs; + // private LinkedList serviceList; + + private List> filterTaxi; + + public AnalysisVccsAiMetaStatus(DataLoadDTO dataLoadDTO, QueueManageBean queMB){ + this.dto = dataLoadDTO; + this.queMB = queMB; + initialize(); + } + + public void initialize() { + + + qRecvVccs = queMB.getQRecvVccs(); + + try { + customThreads = new ArrayList(); + customThreads.add(new CustomThread("storeRequestTaxi", this, CustomThread.NO_SLEEP, this::storeRequestTaxi, null, false)); + // customThreads.add(new CustomThread("makeMapStandSttus", this, CustomThread.NO_SLEEP, this::analysis_Ai_Video_Meta, null, false)); + // customThreads.add(new CustomThread("analysisStandSttus", this, CustomThread.NO_SLEEP, this::analysis_Stand_Sttus, null, false)); + + // 이중화 체크 및 업무스래드 체크 + chkThreadStatus = new CustomThread("chkThreadStatus", this, 3000, this::chkThreadStatus, null, false); + + } catch (Exception e) { + logger.error("Start Fail: "+ e.toString()); + } + } + + public void start() { + try { + + for(CustomThread ct : customThreads ){ + ct.start(); + } + + chkThreadStatus.start(); + + } catch (Exception e) { + logger.error("Start Fail: "+ e); + } + } + + private void chkThreadStatus() throws InterruptedException{ + + } +////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + private void storeRequestTaxi() throws InterruptedException{ + + int queSize = qRecvVccs.size(); + + filterTaxi = new ArrayList>(); + + for(int idx = 0; idx lcDataList = qRecvVccs.take(); + + for( VoiceVO voice : lcDataList ){ + + // List voiceList = lcData.getData(); + + String[] clsgnToken = ((String) voice.getCallsign()).split("\\ "); + + String clsgn_num = clsgnToken[1]; + + + + // 기장(p)이 요청(request)한 내용확인 + if(voice.getSpeaker().equals("p") && voice.getDoc_type().equals("request")){ + + List vKeywords = voice.getKeywords(); + + boolean bKeywordYn = false; + for(VoiceKeyword vk : vKeywords){ + if(vk.getKeyword().equals("request taxi")){ + bKeywordYn = true; + break; + } + } + + if(!bKeywordYn){ + for(VoiceKeyword vk : vKeywords){ + if(vk.getKeyword().equals("request")){ + bKeywordYn = true; + break; + } + } + + if(bKeywordYn){ + for(VoiceKeyword vk : vKeywords){ + if(vk.getKeyword().equals("taxi")){ + bKeywordYn = true; + break; + } + } + } + } + + if(bKeywordYn){ + + HashMap mapTaxi = new HashMap<>(); + + String sComDt = (String) voice.getEndtime(); + + sComDt = sComDt.replace("-", ""); + sComDt = sComDt.replace(" ", ""); + sComDt = sComDt.replace(":", ""); + sComDt = sComDt.substring(0, 12); + + mapTaxi.put("clsgn_num", clsgn_num); + mapTaxi.put("clsgn", (String) voice.getCallsign()); + mapTaxi.put("com_dt", sComDt); + + + filterTaxi.add(mapTaxi); + + } + + } + + } + + logger.info("AI음성메타(VCCS)정보 분석 :" + lcDataList.size() + " 건"); + + + } + + } + + public List> getFilterTaxi(){ + return this.filterTaxi; + } + + +} \ No newline at end of file diff --git a/src/main/java/kr/gmtc/gw/standstatus/config/QueueManageBean.java b/src/main/java/kr/gmtc/gw/standstatus/config/QueueManageBean.java index 0cfccc5..32b60dc 100644 --- a/src/main/java/kr/gmtc/gw/standstatus/config/QueueManageBean.java +++ b/src/main/java/kr/gmtc/gw/standstatus/config/QueueManageBean.java @@ -1,14 +1,14 @@ package kr.gmtc.gw.standstatus.config; import java.util.ArrayList; -import java.util.HashMap; import java.util.LinkedList; -import java.util.Map; import java.util.concurrent.LinkedBlockingQueue; import kr.gmtc.gw.comp.rest.vo.RestServiceData; import kr.gmtc.gw.standstatus.kafka.vo.AiVideoMetaData; +import kr.gmtc.gw.standstatus.kafka.vo.KafkaRequestVoiceVo; import kr.gmtc.gw.standstatus.vo.AlarmMsgVO; +import kr.gmtc.gw.standstatus.vo.VoiceVO; import lombok.Getter; import lombok.Setter; @@ -17,6 +17,7 @@ import lombok.Setter; public class QueueManageBean { private LinkedBlockingQueue> qRecvVideo; + private LinkedBlockingQueue> qRecvVccs; private LinkedBlockingQueue qAlamMsg; //private Map> mapServiceLists; private LinkedList serviceList; @@ -24,6 +25,7 @@ public class QueueManageBean { public QueueManageBean(){ this.qRecvVideo = new LinkedBlockingQueue>(100000); + this.qRecvVccs = new LinkedBlockingQueue>(100000); this.qAlamMsg = new LinkedBlockingQueue(100000); this.serviceList = new LinkedList(); this.bThredRunnig = false; diff --git a/src/main/java/kr/gmtc/gw/standstatus/controller/MainController.java b/src/main/java/kr/gmtc/gw/standstatus/controller/MainController.java index 5b2bac7..d32bb9a 100644 --- a/src/main/java/kr/gmtc/gw/standstatus/controller/MainController.java +++ b/src/main/java/kr/gmtc/gw/standstatus/controller/MainController.java @@ -21,6 +21,7 @@ import kr.gmtc.gw.comp.rest.ServiceQueManager; import kr.gmtc.gw.comp.thread.CustomThread; import kr.gmtc.gw.standstatus.component.AnalysisAlarmStatus; import kr.gmtc.gw.standstatus.component.AnalysisStandStatus; +import kr.gmtc.gw.standstatus.component.AnalysisVccsAiMetaStatus; import kr.gmtc.gw.standstatus.config.QueueManageBean; import kr.gmtc.gw.standstatus.database.datasource1.CmSelectDao; import kr.gmtc.gw.standstatus.database.datasource2.IcSelectDao; @@ -90,6 +91,7 @@ public class MainController implements ApplicationListener { private DataLoadService dataLoadService; private AnalysisStandStatus analysisStatusService; private AnalysisAlarmStatus analysisAlarmStatus; + private AnalysisVccsAiMetaStatus vccsAiMeta; ////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -116,6 +118,7 @@ public class MainController implements ApplicationListener { analysisAlarmStatus = new AnalysisAlarmStatus(dataLoadDTO, queMB, dataLoadService); + vccsAiMeta = new AnalysisVccsAiMetaStatus(dataLoadDTO, queMB); } catch (Exception e) { logger.error("Start Fail: "+ e.toString()); @@ -133,11 +136,12 @@ public class MainController implements ApplicationListener { // serviceQueManager.join(); // Thread.sleep(2000); - analysisStatusService.start(); +// analysisStatusService.start(); -// Thread.sleep(2000); - analysisAlarmStatus.start(); +// // Thread.sleep(2000); +// analysisAlarmStatus.start(); + vccsAiMeta.start(); } catch (Exception e) { diff --git a/src/main/java/kr/gmtc/gw/standstatus/kafka/consummer/KafkaMsgVccsListener.java b/src/main/java/kr/gmtc/gw/standstatus/kafka/consummer/KafkaMsgVccsListener.java new file mode 100644 index 0000000..0803ba8 --- /dev/null +++ b/src/main/java/kr/gmtc/gw/standstatus/kafka/consummer/KafkaMsgVccsListener.java @@ -0,0 +1,70 @@ +package kr.gmtc.gw.standstatus.kafka.consummer; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.concurrent.LinkedBlockingQueue; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.messaging.handler.annotation.Payload; +import org.springframework.stereotype.Service; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import kr.gmt.so.state.StateManager; +import kr.gmtc.gw.standstatus.config.QueueManageBean; +import kr.gmtc.gw.standstatus.kafka.vo.AiVideoMetaData; +import kr.gmtc.gw.standstatus.kafka.vo.KafkaRequestVo; +import kr.gmtc.gw.standstatus.kafka.vo.KafkaRequestVoiceVo; +import kr.gmtc.gw.standstatus.vo.VoiceVO; + +@Service +public class KafkaMsgVccsListener { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + private final ObjectMapper objMapper = new ObjectMapper(); + + // @Resource(name = "recvVideoQ") + // LinkedBlockingQueue recvVideoQ; + + @Resource(name = "queueManageBean") + private QueueManageBean queMB; + + + @Autowired + private StateManager stateMgr; + + @KafkaListener(topics = "${kafka.message.topic.recv.vccs}", groupId = "${kafka.consumer.group-id}") + public void listenAiAnalyzeVideo(@Payload String message) throws Exception{ + + if(stateMgr.isActive()){ + + KafkaRequestVoiceVo vo = null; + + try { + if (message != null) { + + vo = objMapper.readValue(message, KafkaRequestVoiceVo.class); + //recvVideoQ.add(vo.getData()); + queMB.getQRecvVccs().offer((ArrayList) vo.getData()); + + } + } catch(Exception e) { + logger.error(e.getMessage()); + } + + logger.info("AI음성메타정보(VCCS) 수신 1건" ); + } + + + } + + public String getTime() { + return LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss")); + } +} diff --git a/src/main/java/kr/gmtc/gw/standstatus/kafka/consummer/KafkaMessageListener.java b/src/main/java/kr/gmtc/gw/standstatus/kafka/consummer/KafkaMsgVideoListener.java similarity index 92% rename from src/main/java/kr/gmtc/gw/standstatus/kafka/consummer/KafkaMessageListener.java rename to src/main/java/kr/gmtc/gw/standstatus/kafka/consummer/KafkaMsgVideoListener.java index 63abbe6..adc0896 100644 --- a/src/main/java/kr/gmtc/gw/standstatus/kafka/consummer/KafkaMessageListener.java +++ b/src/main/java/kr/gmtc/gw/standstatus/kafka/consummer/KafkaMsgVideoListener.java @@ -22,7 +22,7 @@ import kr.gmtc.gw.standstatus.kafka.vo.AiVideoMetaData; import kr.gmtc.gw.standstatus.kafka.vo.KafkaRequestVo; @Service -public class KafkaMessageListener { +public class KafkaMsgVideoListener { private final Logger logger = LoggerFactory.getLogger(this.getClass()); private final ObjectMapper objMapper = new ObjectMapper(); @@ -37,7 +37,7 @@ public class KafkaMessageListener { @Autowired private StateManager stateMgr; - @KafkaListener(topics = "${kafka.message.topic.recv.video}", groupId = "${kafka.consumer.group-id}") + //@KafkaListener(topics = "${kafka.message.topic.recv.video}", groupId = "${kafka.consumer.group-id}") public void listenAiAnalyzeVideo(@Payload String message) throws Exception{ if(stateMgr.isActive()){ diff --git a/src/main/java/kr/gmtc/gw/standstatus/kafka/producer/KafkaProduceStandSttus.java b/src/main/java/kr/gmtc/gw/standstatus/kafka/producer/KafkaProduceStandSttus.java index 165051d..53f90db 100644 --- a/src/main/java/kr/gmtc/gw/standstatus/kafka/producer/KafkaProduceStandSttus.java +++ b/src/main/java/kr/gmtc/gw/standstatus/kafka/producer/KafkaProduceStandSttus.java @@ -27,7 +27,7 @@ import kr.gmtc.gw.standstatus.kafka.vo.KafkaServiceData; import kr.gmtc.gw.standstatus.kafka.vo.KafkaServiceVO; import kr.gmtc.gw.standstatus.kafka.vo.ResponsHeader; -@Component +//@Component public class KafkaProduceStandSttus { protected Logger logger; diff --git a/src/main/java/kr/gmtc/gw/standstatus/kafka/vo/KafkaRequestVoiceVo.java b/src/main/java/kr/gmtc/gw/standstatus/kafka/vo/KafkaRequestVoiceVo.java new file mode 100644 index 0000000..ceb8b77 --- /dev/null +++ b/src/main/java/kr/gmtc/gw/standstatus/kafka/vo/KafkaRequestVoiceVo.java @@ -0,0 +1,30 @@ +package kr.gmtc.gw.standstatus.kafka.vo; + +import java.util.ArrayList; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +import kr.gmtc.gw.standstatus.vo.VoiceVO; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Setter +@Getter +@ToString +@JsonPropertyOrder({ "result_code", "result_msg" }) +public class KafkaRequestVoiceVo { + + @JsonProperty("header") + private ResponsHeader header; + + @JsonProperty("data") + private List data; + + public KafkaRequestVoiceVo(){ + this.data = new ArrayList(); + } + +} \ No newline at end of file diff --git a/src/main/java/kr/gmtc/gw/standstatus/vo/VoiceVO.java b/src/main/java/kr/gmtc/gw/standstatus/vo/VoiceVO.java new file mode 100644 index 0000000..7afa746 --- /dev/null +++ b/src/main/java/kr/gmtc/gw/standstatus/vo/VoiceVO.java @@ -0,0 +1,52 @@ +package kr.gmtc.gw.standstatus.vo; + +import java.util.List; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class VoiceVO { + + @Getter + @Setter + public static class VoiceKeyword{ + + private String keyword; + private String tag; + + } + + @Getter + @Setter + public static class VoiceReadback{ + + private String result; + private String read_starttime; + private String read_endtime; + + private List keywords; + } + + private String starttime; + private String endtime; + private String com_type; + private String channel; + private String speaker; + private String facility; + private String callsign; + private String doc_type; + private String control_type; + + private List keywords; + private List readback; + + private String frequency; + private String media_name; + private String text; + + + + +} \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index db90df5..f0afeb3 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -45,6 +45,7 @@ kafka: topic: recv: video: ai.analyze.video + vccs: ai.analyze.voice_test send: sttus: ic.analyze.stand.status_test alarm: ic.analyze.alarm_test diff --git a/src/main/resources/mapper/db2/ic_sql.xml b/src/main/resources/mapper/db2/ic_sql.xml index df38195..4524077 100644 --- a/src/main/resources/mapper/db2/ic_sql.xml +++ b/src/main/resources/mapper/db2/ic_sql.xml @@ -5,9 +5,11 @@